| @@ -1,7 +1,9 @@ |
| 1 | 1 | # |
| 2 | 2 | # Tiny C Compiler Makefile |
| 3 | 3 | # |
| 4 | | −include config.mak |
| 4 | + |
| 5 | +TOP ?= . |
| 6 | +include $(TOP)/config.mak |
| 5 | 7 | |
| 6 | 8 | TARGET= |
| 7 | 9 | CFLAGS+=-g -Wall |
| @@ -33,312 +35,195 @@ CFLAGS+=-m386 -malign-functions=0 · 25 unmodified lines |
| 33 | 35 | else |
| 34 | 36 | CFLAGS+=-march=i386 -falign-functions=0 |
| 35 | 37 | ifneq ($(GCC_MAJOR),3) |
| 36 | | −CFLAGS+=-Wno-pointer-sign -Wno-sign-compare |
| 38 | +CFLAGS+=-Wno-pointer-sign -Wno-sign-compare -D_FORTIFY_SOURCE=0 |
| 37 | 39 | endif |
| 38 | 40 | endif |
| 39 | 41 | endif |
| 40 | 42 | |
| 41 | | −DISAS=objdump -d |
| 42 | | −INSTALL=install |
| 43 | +ifeq ($(TOP),.) |
| 43 | 44 | |
| 44 | | −ifdef CONFIG_WIN32 |
| 45 | 45 | PROGS=tcc$(EXESUF) |
| 46 | | −ifdef CONFIG_CROSS |
| 47 | | −PROGS+=c67-tcc$(EXESUF) arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) |
| 48 | | −endif |
| 46 | + |
| 47 | +ARM_CROSS = arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) |
| 48 | +I386_CROSS = i386-tcc$(EXESUF) |
| 49 | +WIN32_CROSS = i386-win32-tcc$(EXESUF) |
| 50 | +C67_CROSS = c67-tcc$(EXESUF) |
| 51 | +X64_CROSS = x86_64-tcc$(EXESUF) |
| 52 | + |
| 53 | +ifdef CONFIG_WIN32 |
| 49 | 54 | PROGS+=tiny_impdef$(EXESUF) tiny_libmaker$(EXESUF) |
| 50 | | −else |
| 51 | | −ifeq ($(ARCH),i386) |
| 52 | | −PROGS=tcc$(EXESUF) |
| 53 | | −ifdef CONFIG_CROSS |
| 54 | | −PROGS+=arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) |
| 55 | | −endif |
| 56 | | −endif |
| 57 | | −ifeq ($(ARCH),arm) |
| 58 | | −PROGS=tcc$(EXESUF) |
| 59 | | −ifdef CONFIG_CROSS |
| 60 | | −PROGS+=i386-tcc$(EXESUF) |
| 61 | | −endif |
| 55 | +PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 56 | + |
| 57 | +else ifeq ($(ARCH),i386) |
| 58 | +PROGS_CROSS=$(X64_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 59 | + |
| 60 | +else ifeq ($(ARCH),arm) |
| 61 | +PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(C67_CROSS) |
| 62 | + |
| 63 | +else ifeq ($(ARCH),x86-64) |
| 64 | +PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 62 | 65 | endif |
| 66 | + |
| 63 | 67 | ifdef CONFIG_CROSS |
| 64 | | −PROGS+=c67-tcc$(EXESUF) i386-win32-tcc$(EXESUF) |
| 65 | | −endif |
| 66 | | −endif |
| 67 | | −ifeq ($(ARCH),x86-64) |
| 68 | | −PROGS=tcc$(EXESUF) |
| 68 | +PROGS+=$(PROGS_CROSS) |
| 69 | 69 | endif |
| 70 | 70 | |
| 71 | | −ifdef CONFIG_USE_LIBGCC |
| 72 | | −LIBTCC1= |
| 73 | | −else |
| 71 | +ifndef CONFIG_USE_LIBGCC |
| 74 | 72 | LIBTCC1=libtcc1.a |
| 75 | 73 | endif |
| 76 | 74 | |
| 77 | | −# run local version of tcc with local libraries and includes |
| 78 | | −TCC=./tcc -B. -I. |
| 79 | | − |
| 80 | | −all: $(PROGS) \ |
| 81 | | − $(LIBTCC1) $(BCHECK_O) tcc-doc.html tcc.1 libtcc.a \ |
| 82 | | − libtcc_test$(EXESUF) |
| 83 | | − |
| 84 | | −Makefile: config.mak |
| 85 | | − |
| 86 | | −# auto test |
| 87 | | − |
| 88 | | −test: test.ref test.out |
| 89 | | − @if diff -u test.ref test.out ; then echo "Auto Test OK"; fi |
| 90 | | − |
| 91 | | −tcctest.ref: tcctest.c |
| 92 | | − $(CC) $(CFLAGS) -w -I. -o $@ $< |
| 93 | | − |
| 94 | | −test.ref: tcctest.ref |
| 95 | | − ./tcctest.ref > $@ |
| 96 | | − |
| 97 | | −test.out: tcc tcctest.c |
| 98 | | − $(TCC) -run tcctest.c > $@ |
| 99 | | − |
| 100 | | −run: tcc tcctest.c |
| 101 | | − $(TCC) -run tcctest.c |
| 102 | | − |
| 103 | | −# iterated test2 (compile tcc then compile tcctest.c !) |
| 104 | | −test2: tcc tcc.c tcctest.c test.ref |
| 105 | | − $(TCC) -run $(TARGET) tcc.c -B. -I. -run tcctest.c > test.out2 |
| 106 | | − @if diff -u test.ref test.out2 ; then echo "Auto Test2 OK"; fi |
| 107 | | − |
| 108 | | −# iterated test3 (compile tcc then compile tcc then compile tcctest.c !) |
| 109 | | −test3: tcc tcc.c tcctest.c test.ref |
| 110 | | − $(TCC) -run $(TARGET) tcc.c -B. -I. -run $(TARGET) tcc.c -B. -I. -run tcctest.c > test.out3 |
| 111 | | − @if diff -u test.ref test.out3 ; then echo "Auto Test3 OK"; fi |
| 112 | | − |
| 113 | | −# binary output test |
| 114 | | −test4: tcc test.ref |
| 115 | | −# dynamic output |
| 116 | | − $(TCC) -o tcctest1 tcctest.c |
| 117 | | − ./tcctest1 > test1.out |
| 118 | | − @if diff -u test.ref test1.out ; then echo "Dynamic Auto Test OK"; fi |
| 119 | | −# static output |
| 120 | | − $(TCC) -static -o tcctest2 tcctest.c |
| 121 | | − ./tcctest2 > test2.out |
| 122 | | − @if diff -u test.ref test2.out ; then echo "Static Auto Test OK"; fi |
| 123 | | −# object + link output |
| 124 | | − $(TCC) -c -o tcctest3.o tcctest.c |
| 125 | | − $(TCC) -o tcctest3 tcctest3.o |
| 126 | | − ./tcctest3 > test3.out |
| 127 | | − @if diff -u test.ref test3.out ; then echo "Object Auto Test OK"; fi |
| 128 | | −# dynamic output + bound check |
| 129 | | − $(TCC) -b -o tcctest4 tcctest.c |
| 130 | | − ./tcctest4 > test4.out |
| 131 | | − @if diff -u test.ref test4.out ; then echo "BCheck Auto Test OK"; fi |
| 132 | | − |
| 133 | | −# memory and bound check auto test |
| 134 | | −BOUNDS_OK = 1 4 8 10 |
| 135 | | −BOUNDS_FAIL= 2 5 7 9 11 12 13 |
| 136 | | − |
| 137 | | −btest: boundtest.c tcc |
| 138 | | − @for i in $(BOUNDS_OK); do \ |
| 139 | | − if $(TCC) -b -run boundtest.c $$i ; then \ |
| 140 | | − /bin/true ; \ |
| 141 | | − else\ |
| 142 | | − echo Failed positive test $$i ; exit 1 ; \ |
| 143 | | − fi ;\ |
| 144 | | − done ;\ |
| 145 | | − for i in $(BOUNDS_FAIL); do \ |
| 146 | | − if $(TCC) -b -run boundtest.c $$i ; then \ |
| 147 | | − echo Failed negative test $$i ; exit 1 ;\ |
| 148 | | − else\ |
| 149 | | − /bin/true ; \ |
| 150 | | − fi\ |
| 151 | | − done ;\ |
| 152 | | − echo Bound test OK |
| 153 | | − |
| 154 | | −# speed test |
| 155 | | −speed: tcc ex2 ex3 |
| 156 | | − time ./ex2 1238 2 3 4 10 13 4 |
| 157 | | − time ./tcc -I. ./ex2.c 1238 2 3 4 10 13 4 |
| 158 | | − time ./ex3 35 |
| 159 | | − time ./tcc -I. ./ex3.c 35 |
| 160 | | − |
| 161 | | −ex2: ex2.c |
| 162 | | − $(CC) $(CFLAGS) -o $@ $< |
| 163 | | − |
| 164 | | −ex3: ex3.c |
| 165 | | − $(CC) $(CFLAGS) -o $@ $< |
| 75 | +all: $(PROGS) $(LIBTCC1) $(BCHECK_O) libtcc.a tcc-doc.html tcc.1 libtcc_test$(EXESUF) |
| 76 | + |
| 77 | +TCC_CORE_FILES = tcc.c tccelf.c tccasm.c tcctok.h libtcc.h config.h |
| 166 | 78 | |
| 167 | 79 | # Host Tiny C Compiler |
| 168 | 80 | ifdef CONFIG_WIN32 |
| 169 | | −tcc$(EXESUF): tcc.c i386-gen.c tccelf.c tccasm.c i386-asm.c tcctok.h libtcc.h i386-asm.h tccpe.c |
| 170 | | − $(CC) $(CFLAGS) -DTCC_TARGET_PE -o $@ $< $(LIBS) |
| 171 | | −else |
| 172 | | −ifeq ($(ARCH),i386) |
| 173 | | −tcc$(EXESUF): tcc.c i386-gen.c tccelf.c tccasm.c i386-asm.c tcctok.h libtcc.h i386-asm.h |
| 174 | | − $(CC) $(CFLAGS) -o $@ $< $(LIBS) |
| 175 | | −endif |
| 176 | | −ifeq ($(ARCH),arm) |
| 81 | +tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h tccpe.c |
| 82 | + $(CC) -o $@ $< -DTCC_TARGET_PE $(CFLAGS) $(LIBS) |
| 83 | + |
| 84 | +else ifeq ($(ARCH),i386) |
| 85 | +tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h |
| 86 | + $(CC) -o $@ $< $(CFLAGS) $(LIBS) |
| 87 | + |
| 88 | +else ifeq ($(ARCH),x86-64) |
| 89 | +tcc$(EXESUF): $(TCC_CORE_FILES) x86_64-gen.c |
| 90 | + $(CC) -o $@ $< -DTCC_TARGET_X86_64 $(CFLAGS) $(LIBS) |
| 91 | + |
| 92 | +else ifeq ($(ARCH),arm) |
| 177 | 93 | ARMFLAGS = $(if $(wildcard /lib/ld-linux.so.3),-DTCC_ARM_EABI) |
| 178 | 94 | ARMFLAGS += $(if $(shell grep -l "^Features.* \(vfp\|iwmmxt\) " /proc/cpuinfo),-DTCC_ARM_VFP) |
| 179 | | − |
| 180 | | −tcc$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h |
| 181 | | − $(CC) $(CFLAGS) -DTCC_TARGET_ARM $(ARMFLAGS) -o $@ $< $(LIBS) |
| 182 | | −endif |
| 183 | | −ifeq ($(ARCH),x86-64) |
| 184 | | −tcc$(EXESUF): tcc.c tccelf.c tccasm.c tcctok.h libtcc.h x86_64-gen.c |
| 185 | | − $(CC) $(CFLAGS) -DTCC_TARGET_X86_64 -o $@ $< $(LIBS) |
| 186 | | −endif |
| 95 | +tcc$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 96 | + $(CC) -o $@ $< -DTCC_TARGET_ARM $(ARMFLAGS) $(CFLAGS) $(LIBS) |
| 187 | 97 | endif |
| 188 | 98 | |
| 189 | 99 | # Cross Tiny C Compilers |
| 190 | | −i386-tcc$(EXESUF): tcc.c i386-gen.c tccelf.c tccasm.c i386-asm.c tcctok.h libtcc.h i386-asm.h |
| 191 | | − $(CC) $(CFLAGS) -o $@ $< $(LIBS) |
| 100 | +i386-tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h |
| 101 | + $(CC) -o $@ $< $(CFLAGS) $(LIBS) |
| 102 | + |
| 103 | +i386-win32-tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h tccpe.c |
| 104 | + $(CC) -o $@ $< -DTCC_TARGET_PE $(CFLAGS) $(LIBS) |
| 105 | + |
| 106 | +x86_64-tcc$(EXESUF): $(TCC_CORE_FILES) x86_64-gen.c i386-asm.c i386-asm.h |
| 107 | + $(CC) -o $@ $< -DTCC_TARGET_X86_64 $(CFLAGS) $(LIBS) |
| 192 | 108 | |
| 193 | | −c67-tcc$(EXESUF): tcc.c c67-gen.c tccelf.c tccasm.c tcctok.h libtcc.h tcccoff.c |
| 194 | | − $(CC) $(CFLAGS) -DTCC_TARGET_C67 -o $@ $< $(LIBS) |
| 109 | +c67-tcc$(EXESUF): $(TCC_CORE_FILES) c67-gen.c tcccoff.c |
| 110 | + $(CC) -o $@ $< -DTCC_TARGET_C67 $(CFLAGS) $(LIBS) |
| 195 | 111 | |
| 196 | | −arm-tcc-fpa$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h |
| 197 | | − $(CC) $(CFLAGS) -DTCC_TARGET_ARM -o $@ $< $(LIBS) |
| 112 | +arm-tcc-fpa$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 113 | + $(CC) -o $@ $< -DTCC_TARGET_ARM $(CFLAGS) $(LIBS) |
| 114 | + |
| 115 | +arm-tcc-fpa-ld$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 116 | + $(CC) -o $@ $< -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12 $(CFLAGS) $(LIBS) |
| 117 | + |
| 118 | +arm-tcc-vfp$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 119 | + $(CC) -o $@ $< -DTCC_TARGET_ARM -DTCC_ARM_VFP $(CFLAGS) $(LIBS) |
| 120 | + |
| 121 | +arm-tcc-vfp-eabi$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 122 | + $(CC) -o $@ $< -DTCC_TARGET_ARM -DTCC_ARM_EABI $(CFLAGS) $(LIBS) |
| 123 | + |
| 124 | +# libtcc generation and test |
| 125 | +libtcc.o: tcc.c i386-gen.c |
| 126 | +ifdef CONFIG_WIN32 |
| 127 | + $(CC) -o $@ -c $< -DTCC_TARGET_PE -DLIBTCC $(CFLAGS) |
| 128 | +else |
| 129 | + $(CC) -o $@ -c $< $(TARGET) -DLIBTCC $(CFLAGS) |
| 130 | +endif |
| 198 | 131 | |
| 199 | | −arm-tcc-fpa-ld$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h |
| 200 | | − $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12 -o $@ $< $(LIBS) |
| 132 | +libtcc.a: libtcc.o |
| 133 | + $(AR) rcs $@ $^ |
| 201 | 134 | |
| 202 | | −arm-tcc-vfp$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h |
| 203 | | − $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DTCC_ARM_VFP -o $@ $< $(LIBS) |
| 135 | +libtcc_test$(EXESUF): tests/libtcc_test.c libtcc.a |
| 136 | + $(CC) -o $@ $^ -I. $(CFLAGS) $(LIBS) |
| 204 | 137 | |
| 205 | | −arm-tcc-vfp-eabi$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h |
| 206 | | − $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DTCC_ARM_EABI -o $@ $< $(LIBS) |
| 138 | +libtest: libtcc_test$(EXESUF) $(LIBTCC1) |
| 139 | + ./libtcc_test$(EXESUF) lib_path=. |
| 207 | 140 | |
| 208 | | −i386-win32-tcc$(EXESUF): tcc.c i386-gen.c tccelf.c tccasm.c i386-asm.c tcctok.h libtcc.h i386-asm.h tccpe.c |
| 209 | | − $(CC) $(CFLAGS) -DTCC_TARGET_PE -o $@ $< $(LIBS) |
| 141 | +# profiling version |
| 142 | +tcc_p: tcc.c |
| 143 | + $(CC) -o $@ $< $(CFLAGS_P) $(LIBS_P) |
| 210 | 144 | |
| 211 | 145 | # windows utilities |
| 212 | 146 | tiny_impdef$(EXESUF): win32/tools/tiny_impdef.c |
| 213 | | − $(CC) $(CFLAGS) -o $@ $< -lkernel32 |
| 147 | + $(CC) -o $@ $< $(CFLAGS) |
| 214 | 148 | tiny_libmaker$(EXESUF): win32/tools/tiny_libmaker.c |
| 215 | | − $(CC) $(CFLAGS) -o $@ $< -lkernel32 |
| 149 | + $(CC) -o $@ $< $(CFLAGS) |
| 216 | 150 | |
| 217 | 151 | # TinyCC runtime libraries |
| 152 | +LIBTCC1_OBJS=libtcc1.o |
| 153 | +LIBTCC1_CC=$(CC) |
| 154 | +VPATH+=lib |
| 218 | 155 | ifdef CONFIG_WIN32 |
| 219 | 156 | # for windows, we must use TCC because we generate ELF objects |
| 220 | | −LIBTCC1_OBJS=$(addprefix win32/lib/, crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o) libtcc1.o |
| 157 | +LIBTCC1_OBJS+=crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o |
| 221 | 158 | LIBTCC1_CC=./tcc.exe -Bwin32 -DTCC_TARGET_PE |
| 222 | | −else |
| 223 | | −LIBTCC1_OBJS=libtcc1.o |
| 224 | | −LIBTCC1_CC=$(CC) |
| 159 | +VPATH+=win32/lib |
| 225 | 160 | endif |
| 226 | 161 | ifeq ($(ARCH),i386) |
| 227 | 162 | LIBTCC1_OBJS+=alloca86.o alloca86-bt.o |
| 228 | 163 | endif |
| 229 | 164 | |
| 230 | 165 | %.o: %.c |
| 231 | | − $(LIBTCC1_CC) -O2 -Wall -c -o $@ $< |
| 166 | + $(LIBTCC1_CC) -o $@ -c $< -O2 -Wall |
| 232 | 167 | |
| 233 | 168 | %.o: %.S |
| 234 | | − $(LIBTCC1_CC) -c -o $@ $< |
| 169 | + $(LIBTCC1_CC) -o $@ -c $< |
| 235 | 170 | |
| 236 | 171 | libtcc1.a: $(LIBTCC1_OBJS) |
| 237 | 172 | $(AR) rcs $@ $^ |
| 238 | 173 | |
| 239 | 174 | bcheck.o: bcheck.c |
| 240 | | − $(CC) -O2 -Wall -c -o $@ $< |
| 175 | + $(CC) -o $@ -c $< -O2 -Wall |
| 241 | 176 | |
| 242 | | −install: tcc_install libinstall |
| 177 | +# install |
| 178 | +TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h |
| 179 | +INSTALL=install |
| 243 | 180 | |
| 244 | | −tcc_install: $(PROGS) tcc.1 $(LIBTCC1) $(BCHECK_O) tcc-doc.html |
| 245 | | − mkdir -p "$(DESTDIR)$(bindir)" |
| 246 | | − $(INSTALL) -s -m755 $(PROGS) "$(DESTDIR)$(bindir)" |
| 247 | 181 | ifndef CONFIG_WIN32 |
| 248 | | − mkdir -p "$(DESTDIR)$(mandir)/man1" |
| 249 | | − $(INSTALL) tcc.1 "$(DESTDIR)$(mandir)/man1" |
| 182 | +install: $(PROGS) $(LIBTCC1) $(BCHECK_O) libtcc.a tcc.1 tcc-doc.html |
| 183 | + mkdir -p "$(bindir)" |
| 184 | + $(INSTALL) -s -m755 $(PROGS) "$(bindir)" |
| 185 | + mkdir -p "$(mandir)/man1" |
| 186 | + $(INSTALL) tcc.1 "$(mandir)/man1" |
| 187 | + mkdir -p "$(tccdir)" |
| 188 | + mkdir -p "$(tccdir)/include" |
| 189 | +ifneq ($(LIBTCC1),) |
| 190 | + $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)" |
| 250 | 191 | endif |
| 251 | | − mkdir -p "$(DESTDIR)$(tccdir)" |
| 252 | | − mkdir -p "$(DESTDIR)$(tccdir)/include" |
| 253 | | −ifdef CONFIG_WIN32 |
| 254 | | − mkdir -p "$(DESTDIR)$(tccdir)/lib" |
| 255 | | − $(INSTALL) -m644 $(LIBTCC1) win32/lib/*.def "$(DESTDIR)$(tccdir)/lib" |
| 256 | | − cp -r win32/include/. "$(DESTDIR)$(tccdir)/include" |
| 257 | | − cp -r win32/examples/. "$(DESTDIR)$(tccdir)/examples" |
| 258 | | −else |
| 259 | | −ifndef CONFIG_USE_LIBGCC |
| 260 | | − $(INSTALL) -m644 libtcc1.a "$(DESTDIR)$(tccdir)" |
| 261 | | −endif |
| 262 | | −ifneq ($(ARCH),x86-64) |
| 263 | | − $(INSTALL) -m644 $(BCHECK_O) "$(DESTDIR)$(tccdir)" |
| 264 | | −endif |
| 265 | | − $(INSTALL) -m644 stdarg.h stddef.h stdbool.h float.h varargs.h \ |
| 266 | | − tcclib.h "$(DESTDIR)$(tccdir)/include" |
| 267 | | −endif |
| 268 | | − mkdir -p "$(DESTDIR)$(docdir)" |
| 269 | | − $(INSTALL) -m644 tcc-doc.html "$(DESTDIR)$(docdir)" |
| 270 | | −ifdef CONFIG_WIN32 |
| 271 | | − $(INSTALL) -m644 win32/tcc-win32.txt "$(DESTDIR)$(docdir)" |
| 192 | +ifneq ($(BCHECK_O),) |
| 193 | + $(INSTALL) -m644 $(BCHECK_O) "$(tccdir)" |
| 272 | 194 | endif |
| 195 | + $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include" |
| 196 | + mkdir -p "$(docdir)" |
| 197 | + $(INSTALL) -m644 tcc-doc.html "$(docdir)" |
| 198 | + mkdir -p "$(libdir)" |
| 199 | + $(INSTALL) -m644 libtcc.a "$(libdir)" |
| 200 | + mkdir -p "$(includedir)" |
| 201 | + $(INSTALL) -m644 libtcc.h "$(includedir)" |
| 202 | + |
| 203 | +uninstall: |
| 204 | + rm -fv $(foreach P,$(PROGS),"$(bindir)/$P") |
| 205 | + rm -fv $(foreach P,$(LIBTCC1) $(BCHECK_O),"$(tccdir)/$P") |
| 206 | + rm -fv $(foreach P,$(TCC_INCLUDES),"$(tccdir)/include/$P") |
| 207 | + rm -fv "$(docdir)/tcc-doc.html" "$(mandir)/man1/tcc.1" |
| 208 | + rm -fv "$(libdir)/libtcc.a" "$(includedir)/libtcc.h" |
| 273 | 209 | |
| 274 | | −clean: |
| 275 | | − rm -f *~ *.o *.a tcc tcct tcc_g tcctest.ref *.bin *.i ex2 \ |
| 276 | | − core gmon.out test.out test.ref a.out tcc_p \ |
| 277 | | − *.exe *.lib tcc.pod libtcc_test \ |
| 278 | | − tcctest[1234] test[1234].out $(PROGS) win32/lib/*.o |
| 279 | | − |
| 280 | | −distclean: clean |
| 281 | | − rm -f config.h config.mak config.texi |
| 282 | | − |
| 283 | | −# profiling version |
| 284 | | −tcc_p: tcc.c Makefile |
| 285 | | − $(CC) $(CFLAGS_P) -o $@ $< $(LIBS_P) |
| 286 | | − |
| 287 | | −# libtcc generation and example |
| 288 | | −libinstall: libtcc.a |
| 289 | | − mkdir -p "$(DESTDIR)$(libdir)" |
| 290 | | − $(INSTALL) -m644 libtcc.a "$(DESTDIR)$(libdir)" |
| 291 | | − mkdir -p "$(DESTDIR)$(includedir)" |
| 292 | | − $(INSTALL) -m644 libtcc.h "$(DESTDIR)$(includedir)" |
| 293 | | − |
| 294 | | −libtcc.o: tcc.c i386-gen.c Makefile |
| 295 | | −ifdef CONFIG_WIN32 |
| 296 | | − $(CC) $(CFLAGS) -DTCC_TARGET_PE -DLIBTCC -c -o $@ $< |
| 297 | 210 | else |
| 298 | | − $(CC) $(CFLAGS) $(TARGET) -DLIBTCC -c -o $@ $< |
| 211 | +install: $(PROGS) $(LIBTCC1) libtcc.a tcc-doc.html |
| 212 | + mkdir -p "$(tccdir)" |
| 213 | + mkdir -p "$(tccdir)/lib" |
| 214 | + mkdir -p "$(tccdir)/include" |
| 215 | + mkdir -p "$(tccdir)/examples" |
| 216 | + mkdir -p "$(tccdir)/doc" |
| 217 | + mkdir -p "$(tccdir)/libtcc" |
| 218 | + $(INSTALL) -s -m755 $(PROGS) "$(tccdir)" |
| 219 | + $(INSTALL) -m644 $(LIBTCC1) win32/lib/*.def "$(tccdir)/lib" |
| 220 | + cp -r win32/include/. "$(tccdir)/include" |
| 221 | + cp -r win32/examples/. "$(tccdir)/examples" |
| 222 | + $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include" |
| 223 | + $(INSTALL) -m644 tcc-doc.html win32/tcc-win32.txt"$(tccdir)/doc" |
| 224 | + $(INSTALL) -m644 libtcc.a libtcc.h "$(tccdir)/libtcc" |
| 299 | 225 | endif |
| 300 | 226 | |
| 301 | | −libtcc.a: libtcc.o |
| 302 | | − $(AR) rcs $@ $^ |
| 303 | | − |
| 304 | | −libtcc_test$(EXESUF): libtcc_test.c libtcc.a |
| 305 | | − $(CC) $(CFLAGS) -o $@ $< libtcc.a $(LIBS) |
| 306 | | − |
| 307 | | −libtest: libtcc_test |
| 308 | | − ./libtcc_test lib_path=. |
| 309 | | − |
| 310 | | −# targets for development |
| 311 | | − |
| 312 | | −%.bin: %.c tcc |
| 313 | | − $(TCC) -g -o $@ $< |
| 314 | | − $(DISAS) $@ |
| 315 | | − |
| 316 | | −instr: instr.o |
| 317 | | − objdump -d instr.o |
| 318 | | − |
| 319 | | −# tiny assembler testing |
| 320 | | − |
| 321 | | −asmtest.ref: asmtest.S |
| 322 | | − $(CC) -c -o asmtest.ref.o asmtest.S |
| 323 | | − objdump -D asmtest.ref.o > $@ |
| 324 | | − |
| 325 | | −# XXX: we compute tcc.c to go faster during development ! |
| 326 | | −asmtest.out: asmtest.S tcc |
| 327 | | −# ./tcc tcc.c -c asmtest.S |
| 328 | | −#asmtest.out: asmtest.S tcc |
| 329 | | − ./tcc -c asmtest.S |
| 330 | | − objdump -D asmtest.o > $@ |
| 331 | | − |
| 332 | | −asmtest: asmtest.out asmtest.ref |
| 333 | | − @if diff -u --ignore-matching-lines="file format" asmtest.ref asmtest.out ; then echo "ASM Auto Test OK"; fi |
| 334 | | − |
| 335 | | −instr.o: instr.S |
| 336 | | − $(CC) -O2 -Wall -g -c -o $@ $< |
| 337 | | − |
| 338 | | −cache: tcc_g |
| 339 | | − cachegrind ./tcc_g -o /tmp/linpack -lm bench/linpack.c |
| 340 | | − vg_annotate tcc.c > /tmp/linpack.cache.log |
| 341 | | − |
| 342 | 227 | # documentation and man page |
| 343 | 228 | tcc-doc.html: tcc-doc.texi |
| 344 | 229 | -texi2html -monolithic -number $< |
| @@ -347,11 +232,25 @@ tcc.1: tcc-doc.texi · 2 unmodified lines |
| 347 | 232 | -./texi2pod.pl $< tcc.pod |
| 348 | 233 | -pod2man --section=1 --center=" " --release=" " tcc.pod > $@ |
| 349 | 234 | |
| 350 | | −FILE=tcc-$(shell cat VERSION) |
| 351 | | − |
| 352 | 235 | # tar release (use 'make -k tar' on a checkouted tree) |
| 236 | +TCC-VERSION=tcc-$(shell cat VERSION) |
| 353 | 237 | tar: |
| 354 | | − rm -rf /tmp/$(FILE) |
| 355 | | − cp -r . /tmp/$(FILE) |
| 356 | | − ( cd /tmp ; tar zcvf ~/$(FILE).tar.gz $(FILE) --exclude CVS ) |
| 357 | | − rm -rf /tmp/$(FILE) |
| 238 | + rm -rf /tmp/$(TCC-VERSION) |
| 239 | + cp -r . /tmp/$(TCC-VERSION) |
| 240 | + ( cd /tmp ; tar zcvf ~/$(TCC-VERSION).tar.gz $(TCC-VERSION) --exclude CVS ) |
| 241 | + rm -rf /tmp/$(TCC-VERSION) |
| 242 | + |
| 243 | +# in tests subdir |
| 244 | +test clean : |
| 245 | + $(MAKE) -C tests $@ |
| 246 | + |
| 247 | +# clean |
| 248 | +clean: local_clean |
| 249 | +local_clean: |
| 250 | + rm -vf $(PROGS) tcc_p tcc.pod *~ *.o *.a *.out libtcc_test$(EXESUF) |
| 251 | + |
| 252 | +distclean: clean |
| 253 | + rm -vf config.h config.mak config.texi tcc.1 tcc-doc.html |
| 254 | + |
| 255 | +endif |
| 256 | +# ifeq ($(TOP),.) |