2 # Tiny C Compiler Makefile
6 include $(TOP
)/config.mak
11 TARGET
=-DTCC_TARGET_X86_64
12 CFLAGS
+=-Wno-pointer-sign
20 ifneq ($(ARCH
),x86-64
)
24 CFLAGS_P
=$(CFLAGS
) -pg
-static
-DCONFIG_TCC_STATIC
27 ifneq ($(GCC_MAJOR
),2)
28 CFLAGS
+=-fno-strict-aliasing
32 CFLAGS
+=-mpreferred-stack-boundary
=2
34 CFLAGS
+=-m386
-malign-functions
=0
36 CFLAGS
+=-march
=i386
-falign-functions
=0
37 ifneq ($(GCC_MAJOR
),3)
38 CFLAGS
+=-Wno-pointer-sign
-Wno-sign-compare
-D_FORTIFY_SOURCE
=0
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
)
54 PROGS
+=tiny_impdef
$(EXESUF
) tiny_libmaker
$(EXESUF
)
55 PROGS_CROSS
=$(I386_CROSS
) $(X64_CROSS
) $(ARM_CROSS
) $(C67_CROSS
)
57 else ifeq ($(ARCH
),i386
)
58 PROGS_CROSS
=$(X64_CROSS
) $(WIN32_CROSS
) $(ARM_CROSS
) $(C67_CROSS
)
60 else ifeq ($(ARCH
),arm
)
61 PROGS_CROSS
=$(I386_CROSS
) $(X64_CROSS
) $(WIN32_CROSS
) $(C67_CROSS
)
63 else ifeq ($(ARCH
),x86-64
)
64 PROGS_CROSS
=$(I386_CROSS
) $(WIN32_CROSS
) $(ARM_CROSS
) $(C67_CROSS
)
71 ifndef CONFIG_USE_LIBGCC
75 all: $(PROGS
) $(LIBTCC1
) $(BCHECK_O
) libtcc.a tcc-doc.html tcc
.1 libtcc_test
$(EXESUF
)
77 TCC_CORE_FILES
= tcc.c tccelf.c tccasm.c tcctok.h libtcc.h config.h
79 # Host Tiny C Compiler
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
)
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
)
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
)
92 else ifeq ($(ARCH
),arm
)
93 ARMFLAGS
= $(if
$(wildcard /lib
/ld-linux.so
.3),-DTCC_ARM_EABI
)
94 ARMFLAGS
+= $(if
$(shell grep
-l
"^Features.* \(vfp\|iwmmxt\) " /proc
/cpuinfo
),-DTCC_ARM_VFP
)
95 tcc
$(EXESUF
): $(TCC_CORE_FILES
) arm-gen.c
96 $(CC
) -o
$@
$< -DTCC_TARGET_ARM
$(ARMFLAGS
) $(CFLAGS
) $(LIBS
)
99 # Cross Tiny C Compilers
100 i386-tcc
$(EXESUF
): $(TCC_CORE_FILES
) i386-gen.c i386-asm.c i386-asm.h
101 $(CC
) -o
$@
$< $(CFLAGS
) $(LIBS
)
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
)
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
)
109 c67-tcc
$(EXESUF
): $(TCC_CORE_FILES
) c67-gen.c tcccoff.c
110 $(CC
) -o
$@
$< -DTCC_TARGET_C67
$(CFLAGS
) $(LIBS
)
112 arm-tcc-fpa
$(EXESUF
): $(TCC_CORE_FILES
) arm-gen.c
113 $(CC
) -o
$@
$< -DTCC_TARGET_ARM
$(CFLAGS
) $(LIBS
)
115 arm-tcc-fpa-ld
$(EXESUF
): $(TCC_CORE_FILES
) arm-gen.c
116 $(CC
) -o
$@
$< -DTCC_TARGET_ARM
-DLDOUBLE_SIZE
=12 $(CFLAGS
) $(LIBS
)
118 arm-tcc-vfp
$(EXESUF
): $(TCC_CORE_FILES
) arm-gen.c
119 $(CC
) -o
$@
$< -DTCC_TARGET_ARM
-DTCC_ARM_VFP
$(CFLAGS
) $(LIBS
)
121 arm-tcc-vfp-eabi
$(EXESUF
): $(TCC_CORE_FILES
) arm-gen.c
122 $(CC
) -o
$@
$< -DTCC_TARGET_ARM
-DTCC_ARM_EABI
$(CFLAGS
) $(LIBS
)
124 # libtcc generation and test
125 libtcc.o
: tcc.c i386-gen.c
127 $(CC
) -o
$@
-c
$< -DTCC_TARGET_PE
-DLIBTCC
$(CFLAGS
)
129 $(CC
) -o
$@
-c
$< $(TARGET
) -DLIBTCC
$(CFLAGS
)
135 libtcc_test
$(EXESUF
): tests
/libtcc_test.c libtcc.a
136 $(CC
) -o
$@
$^
-I.
$(CFLAGS
) $(LIBS
)
138 libtest
: libtcc_test
$(EXESUF
) $(LIBTCC1
)
139 .
/libtcc_test
$(EXESUF
) lib_path
=.
143 $(CC
) -o
$@
$< $(CFLAGS_P
) $(LIBS_P
)
146 tiny_impdef
$(EXESUF
): win32
/tools
/tiny_impdef.c
147 $(CC
) -o
$@
$< $(CFLAGS
)
148 tiny_libmaker
$(EXESUF
): win32
/tools
/tiny_libmaker.c
149 $(CC
) -o
$@
$< $(CFLAGS
)
151 # TinyCC runtime libraries
152 LIBTCC1_OBJS
=libtcc1.o
156 # for windows, we must use TCC because we generate ELF objects
157 LIBTCC1_OBJS
+=crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
158 LIBTCC1_CC
=.
/tcc.exe
-Bwin32
-DTCC_TARGET_PE
162 LIBTCC1_OBJS
+=alloca86.o alloca86-bt.o
166 $(LIBTCC1_CC
) -o
$@
-c
$< -O2
-Wall
169 $(LIBTCC1_CC
) -o
$@
-c
$<
171 libtcc1.a
: $(LIBTCC1_OBJS
)
175 $(CC
) -o
$@
-c
$< -O2
-Wall
178 TCC_INCLUDES
= stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h
182 install: $(PROGS
) $(LIBTCC1
) $(BCHECK_O
) libtcc.a tcc
.1 tcc-doc.html
184 $(INSTALL
) -s
-m755
$(PROGS
) "$(bindir)"
185 mkdir
-p
"$(mandir)/man1"
186 $(INSTALL
) tcc
.1 "$(mandir)/man1"
188 mkdir
-p
"$(tccdir)/include"
190 $(INSTALL
) -m644
$(LIBTCC1
) "$(tccdir)"
193 $(INSTALL
) -m644
$(BCHECK_O
) "$(tccdir)"
195 $(INSTALL
) -m644
$(addprefix include/,$(TCC_INCLUDES
)) "$(tccdir)/include"
197 $(INSTALL
) -m644 tcc-doc.html
"$(docdir)"
199 $(INSTALL
) -m644 libtcc.a
"$(libdir)"
200 mkdir
-p
"$(includedir)"
201 $(INSTALL
) -m644 libtcc.h
"$(includedir)"
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"
211 install: $(PROGS
) $(LIBTCC1
) libtcc.a tcc-doc.html
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"
227 # documentation and man page
228 tcc-doc.html
: tcc-doc.texi
229 -texi2html
-monolithic
-number
$<
232 -.
/texi2pod.pl
$< tcc.pod
233 -pod2man
--section
=1 --center
=" " --release
=" " tcc.pod
> $@
235 # tar release (use 'make -k tar' on a checkouted tree)
236 TCC-VERSION
=tcc-
$(shell cat VERSION
)
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
)
250 rm -vf
$(PROGS
) tcc_p tcc.pod
*~
*.o
*.a
*.out libtcc_test
$(EXESUF
)
253 rm -vf config.h config.mak config.texi tcc
.1 tcc-doc.html