| @@ -1,7 +1,9 @@ |
| 1 | # | 1 | # |
| 2 | # Tiny C Compiler Makefile | 2 | # Tiny C Compiler Makefile |
| 3 | # | 3 | # |
| 4 | include config.mak | 4 | |
| | 5 | TOP ?= . |
| | 6 | include $(TOP)/config.mak |
| 5 | | 7 | |
| 6 | TARGET= | 8 | TARGET= |
| 7 | CFLAGS+=-g -Wall | 9 | CFLAGS+=-g -Wall |
| @@ -33,312 +35,195 @@ CFLAGS+=-m386 -malign-functions=0 · 25 unmodified lines |
| 33 | else | 35 | else |
| 34 | CFLAGS+=-march=i386 -falign-functions=0 | 36 | CFLAGS+=-march=i386 -falign-functions=0 |
| 35 | ifneq ($(GCC_MAJOR),3) | 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 | endif | 39 | endif |
| 38 | endif | 40 | endif |
| 39 | endif | 41 | endif |
| 40 | | 42 | |
| 41 | DISAS=objdump -d | 43 | ifeq ($(TOP),.) |
| 42 | INSTALL=install | | |
| 43 | | 44 | |
| 44 | ifdef CONFIG_WIN32 | | |
| 45 | PROGS=tcc$(EXESUF) | 45 | PROGS=tcc$(EXESUF) |
| 46 | ifdef CONFIG_CROSS | 46 | |
| 47 | PROGS+=c67-tcc$(EXESUF) arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) | 47 | ARM_CROSS = arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) |
| 48 | endif | 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 | PROGS+=tiny_impdef$(EXESUF) tiny_libmaker$(EXESUF) | 54 | PROGS+=tiny_impdef$(EXESUF) tiny_libmaker$(EXESUF) |
| 50 | else | 55 | PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 51 | ifeq ($(ARCH),i386) | 56 | |
| 52 | PROGS=tcc$(EXESUF) | 57 | else ifeq ($(ARCH),i386) |
| 53 | ifdef CONFIG_CROSS | 58 | PROGS_CROSS=$(X64_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 54 | PROGS+=arm-tcc-fpa$(EXESUF) arm-tcc-fpa-ld$(EXESUF) arm-tcc-vfp$(EXESUF) arm-tcc-vfp-eabi$(EXESUF) | 59 | |
| 55 | endif | 60 | else ifeq ($(ARCH),arm) |
| 56 | endif | 61 | PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(C67_CROSS) |
| 57 | ifeq ($(ARCH),arm) | 62 | |
| 58 | PROGS=tcc$(EXESUF) | 63 | else ifeq ($(ARCH),x86-64) |
| 59 | ifdef CONFIG_CROSS | 64 | PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(ARM_CROSS) $(C67_CROSS) |
| 60 | PROGS+=i386-tcc$(EXESUF) | | |
| 61 | endif | | |
| 62 | endif | 65 | endif |
| | 66 | |
| 63 | ifdef CONFIG_CROSS | 67 | ifdef CONFIG_CROSS |
| 64 | PROGS+=c67-tcc$(EXESUF) i386-win32-tcc$(EXESUF) | 68 | PROGS+=$(PROGS_CROSS) |
| 65 | endif | | |
| 66 | endif | | |
| 67 | ifeq ($(ARCH),x86-64) | | |
| 68 | PROGS=tcc$(EXESUF) | | |
| 69 | endif | 69 | endif |
| 70 | | 70 | |
| 71 | ifdef CONFIG_USE_LIBGCC | 71 | ifndef CONFIG_USE_LIBGCC |
| 72 | LIBTCC1= | | |
| 73 | else | | |
| 74 | LIBTCC1=libtcc1.a | 72 | LIBTCC1=libtcc1.a |
| 75 | endif | 73 | endif |
| 76 | | 74 | |
| 77 | # run local version of tcc with local libraries and includes | 75 | all: $(PROGS) $(LIBTCC1) $(BCHECK_O) libtcc.a tcc-doc.html tcc.1 libtcc_test$(EXESUF) |
| 78 | TCC=./tcc -B. -I. | 76 | |
| 79 | | 77 | TCC_CORE_FILES = tcc.c tccelf.c tccasm.c tcctok.h libtcc.h config.h |
| 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 $@ $< | | |
| 166 | | 78 | |
| 167 | # Host Tiny C Compiler | 79 | # Host Tiny C Compiler |
| 168 | ifdef CONFIG_WIN32 | 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 | 81 | tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h tccpe.c |
| 170 | $(CC) $(CFLAGS) -DTCC_TARGET_PE -o $@ $< $(LIBS) | 82 | $(CC) -o $@ $< -DTCC_TARGET_PE $(CFLAGS) $(LIBS) |
| 171 | else | 83 | |
| 172 | ifeq ($(ARCH),i386) | 84 | else 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 | 85 | tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h |
| 174 | $(CC) $(CFLAGS) -o $@ $< $(LIBS) | 86 | $(CC) -o $@ $< $(CFLAGS) $(LIBS) |
| 175 | endif | 87 | |
| 176 | ifeq ($(ARCH),arm) | 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 | ARMFLAGS = $(if $(wildcard /lib/ld-linux.so.3),-DTCC_ARM_EABI) | 93 | ARMFLAGS = $(if $(wildcard /lib/ld-linux.so.3),-DTCC_ARM_EABI) |
| 178 | ARMFLAGS += $(if $(shell grep -l "^Features.* \(vfp\|iwmmxt\) " /proc/cpuinfo),-DTCC_ARM_VFP) | 94 | ARMFLAGS += $(if $(shell grep -l "^Features.* \(vfp\|iwmmxt\) " /proc/cpuinfo),-DTCC_ARM_VFP) |
| 179 | | 95 | tcc$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 180 | tcc$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h | 96 | $(CC) -o $@ $< -DTCC_TARGET_ARM $(ARMFLAGS) $(CFLAGS) $(LIBS) |
| 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 | | |
| 187 | endif | 97 | endif |
| 188 | | 98 | |
| 189 | # Cross Tiny C Compilers | 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 | 100 | i386-tcc$(EXESUF): $(TCC_CORE_FILES) i386-gen.c i386-asm.c i386-asm.h |
| 191 | $(CC) $(CFLAGS) -o $@ $< $(LIBS) | 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 | 109 | c67-tcc$(EXESUF): $(TCC_CORE_FILES) c67-gen.c tcccoff.c |
| 194 | $(CC) $(CFLAGS) -DTCC_TARGET_C67 -o $@ $< $(LIBS) | 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 | 112 | arm-tcc-fpa$(EXESUF): $(TCC_CORE_FILES) arm-gen.c |
| 197 | $(CC) $(CFLAGS) -DTCC_TARGET_ARM -o $@ $< $(LIBS) | 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 | 132 | libtcc.a: libtcc.o |
| 200 | $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12 -o $@ $< $(LIBS) | 133 | $(AR) rcs $@ $^ |
| 201 | | 134 | |
| 202 | arm-tcc-vfp$(EXESUF): tcc.c arm-gen.c tccelf.c tccasm.c tcctok.h libtcc.h | 135 | libtcc_test$(EXESUF): tests/libtcc_test.c libtcc.a |
| 203 | $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DTCC_ARM_VFP -o $@ $< $(LIBS) | 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 | 138 | libtest: libtcc_test$(EXESUF) $(LIBTCC1) |
| 206 | $(CC) $(CFLAGS) -DTCC_TARGET_ARM -DTCC_ARM_EABI -o $@ $< $(LIBS) | 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 | 141 | # profiling version |
| 209 | $(CC) $(CFLAGS) -DTCC_TARGET_PE -o $@ $< $(LIBS) | 142 | tcc_p: tcc.c |
| | 143 | $(CC) -o $@ $< $(CFLAGS_P) $(LIBS_P) |
| 210 | | 144 | |
| 211 | # windows utilities | 145 | # windows utilities |
| 212 | tiny_impdef$(EXESUF): win32/tools/tiny_impdef.c | 146 | tiny_impdef$(EXESUF): win32/tools/tiny_impdef.c |
| 213 | $(CC) $(CFLAGS) -o $@ $< -lkernel32 | 147 | $(CC) -o $@ $< $(CFLAGS) |
| 214 | tiny_libmaker$(EXESUF): win32/tools/tiny_libmaker.c | 148 | tiny_libmaker$(EXESUF): win32/tools/tiny_libmaker.c |
| 215 | $(CC) $(CFLAGS) -o $@ $< -lkernel32 | 149 | $(CC) -o $@ $< $(CFLAGS) |
| 216 | | 150 | |
| 217 | # TinyCC runtime libraries | 151 | # TinyCC runtime libraries |
| | 152 | LIBTCC1_OBJS=libtcc1.o |
| | 153 | LIBTCC1_CC=$(CC) |
| | 154 | VPATH+=lib |
| 218 | ifdef CONFIG_WIN32 | 155 | ifdef CONFIG_WIN32 |
| 219 | # for windows, we must use TCC because we generate ELF objects | 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 | LIBTCC1_CC=./tcc.exe -Bwin32 -DTCC_TARGET_PE | 158 | LIBTCC1_CC=./tcc.exe -Bwin32 -DTCC_TARGET_PE |
| 222 | else | 159 | VPATH+=win32/lib |
| 223 | LIBTCC1_OBJS=libtcc1.o | | |
| 224 | LIBTCC1_CC=$(CC) | | |
| 225 | endif | 160 | endif |
| 226 | ifeq ($(ARCH),i386) | 161 | ifeq ($(ARCH),i386) |
| 227 | LIBTCC1_OBJS+=alloca86.o alloca86-bt.o | 162 | LIBTCC1_OBJS+=alloca86.o alloca86-bt.o |
| 228 | endif | 163 | endif |
| 229 | | 164 | |
| 230 | %.o: %.c | 165 | %.o: %.c |
| 231 | $(LIBTCC1_CC) -O2 -Wall -c -o $@ $< | 166 | $(LIBTCC1_CC) -o $@ -c $< -O2 -Wall |
| 232 | | 167 | |
| 233 | %.o: %.S | 168 | %.o: %.S |
| 234 | $(LIBTCC1_CC) -c -o $@ $< | 169 | $(LIBTCC1_CC) -o $@ -c $< |
| 235 | | 170 | |
| 236 | libtcc1.a: $(LIBTCC1_OBJS) | 171 | libtcc1.a: $(LIBTCC1_OBJS) |
| 237 | $(AR) rcs $@ $^ | 172 | $(AR) rcs $@ $^ |
| 238 | | 173 | |
| 239 | bcheck.o: bcheck.c | 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 | ifndef CONFIG_WIN32 | 181 | ifndef CONFIG_WIN32 |
| 248 | mkdir -p "$(DESTDIR)$(mandir)/man1" | 182 | install: $(PROGS) $(LIBTCC1) $(BCHECK_O) libtcc.a tcc.1 tcc-doc.html |
| 249 | $(INSTALL) tcc.1 "$(DESTDIR)$(mandir)/man1" | 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 | endif | 191 | endif |
| 251 | mkdir -p "$(DESTDIR)$(tccdir)" | 192 | ifneq ($(BCHECK_O),) |
| 252 | mkdir -p "$(DESTDIR)$(tccdir)/include" | 193 | $(INSTALL) -m644 $(BCHECK_O) "$(tccdir)" |
| 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)" | | |
| 272 | endif | 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 | else | 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 | endif | 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 | # documentation and man page | 227 | # documentation and man page |
| 343 | tcc-doc.html: tcc-doc.texi | 228 | tcc-doc.html: tcc-doc.texi |
| 344 | -texi2html -monolithic -number $< | 229 | -texi2html -monolithic -number $< |
| @@ -347,11 +232,25 @@ tcc.1: tcc-doc.texi · 2 unmodified lines |
| 347 | -./texi2pod.pl $< tcc.pod | 232 | -./texi2pod.pl $< tcc.pod |
| 348 | -pod2man --section=1 --center=" " --release=" " tcc.pod > $@ | 233 | -pod2man --section=1 --center=" " --release=" " tcc.pod > $@ |
| 349 | | 234 | |
| 350 | FILE=tcc-$(shell cat VERSION) | | |
| 351 | | | |
| 352 | # tar release (use 'make -k tar' on a checkouted tree) | 235 | # tar release (use 'make -k tar' on a checkouted tree) |
| | 236 | TCC-VERSION=tcc-$(shell cat VERSION) |
| 353 | tar: | 237 | tar: |
| 354 | rm -rf /tmp/$(FILE) | 238 | rm -rf /tmp/$(TCC-VERSION) |
| 355 | cp -r . /tmp/$(FILE) | 239 | cp -r . /tmp/$(TCC-VERSION) |
| 356 | ( cd /tmp ; tar zcvf ~/$(FILE).tar.gz $(FILE) --exclude CVS ) | 240 | ( cd /tmp ; tar zcvf ~/$(TCC-VERSION).tar.gz $(TCC-VERSION) --exclude CVS ) |
| 357 | rm -rf /tmp/$(FILE) | 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),.) |