2 # Tiny C Compiler Makefile for libtcc1.a
6 include $(TOP
)/Makefile
7 VPATH
= $(TOPSRC
)/lib
$(TOPSRC
)/win32
/lib
8 T
= $(or
$(CROSS_TARGET
),$(NATIVE_TARGET
),unknown
)
9 X
= $(if
$(CROSS_TARGET
),$(CROSS_TARGET
)-)
11 XTCC ?
= $(TOP
)/$(X
)tcc
$(EXESUF
)
14 XFLAGS-unx
= -B
$(TOPSRC
)
15 XFLAGS-win
= -B
$(TOPSRC
)/win32
-I
$(TOPSRC
)/include
16 XFLAGS
= $(XFLAGS
$(XCFG
)) -I
$(TOP
)
18 XCFG
= $(or
$(findstring -win
,$T),-unx
)
19 S
= $(if
$(findstring yes
,$(SILENT
)),@
$(info * $@
))
21 # in order to use gcc, type: make <target>-libtcc1-usegcc=yes
22 arm-libtcc1-usegcc ?
= no
24 # This makes bounds checking 40%..60% faster.
25 #x86_64-libtcc1-usegcc=yes
26 #i386-libtcc1-usegcc=yes
28 ifeq "$($(T)-libtcc1-usegcc)" "yes"
31 XFLAGS
= $(CFLAGS
) -fPIC
-gdwarf
-fno-omit-frame-pointer
-Wno-unused-function
-Wno-unused-variable
35 ifneq ($(CONFIG_backtrace
),no
)
36 # only for native compiler
37 ifneq ($(CONFIG_bcheck
),no
)
38 $(X
)BCHECK_O
= bcheck.o
40 $(X
)BT_O
= bt-exe.o bt-log.o
41 $(X
)B_O
= $(BCHECK_O
) bt-exe.o bt-log.o bt-dll.o
43 $(X
)BT_O
+= runmain.o tcov.o
47 I386_O
= libtcc1.o alloca.o alloca-bt.o stdatomic.o atomic.o builtin.o
$(BT_O
)
48 X86_64_O
= libtcc1.o alloca.o alloca-bt.o stdatomic.o atomic.o builtin.o
$(BT_O
)
49 ARM_O
= libtcc1.o armeabi.o alloca.o armflush.o stdatomic.o atomic.o builtin.o
$(BT_O
)
50 ARM64_O
= lib-arm64.o stdatomic.o atomic.o builtin.o
$(BT_O
)
51 RISCV64_O
= lib-arm64.o stdatomic.o atomic.o builtin.o
$(BT_O
)
52 WIN_O
= crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o
54 OBJ-i386
= $(I386_O
) $(BCHECK_O
) $(DSO_O
)
55 OBJ-x86_64
= $(X86_64_O
) va_list.o
$(BCHECK_O
) $(DSO_O
)
56 OBJ-x86_64-osx
= $(X86_64_O
) va_list.o
$(BCHECK_O
)
57 OBJ-i386-win32
= $(I386_O
) chkstk.o
$(B_O
) $(WIN_O
)
58 OBJ-x86_64-win32
= $(X86_64_O
) chkstk.o
$(B_O
) $(WIN_O
)
59 OBJ-arm64
= $(ARM64_O
) $(BCHECK_O
) $(DSO_O
)
60 OBJ-arm64-osx
= $(ARM64_O
) $(BCHECK_O
)
61 OBJ-arm
= $(ARM_O
) $(BCHECK_O
) $(DSO_O
)
62 OBJ-arm-fpa
= $(ARM_O
) $(DSO_O
)
63 OBJ-arm-fpa-ld
= $(ARM_O
) $(DSO_O
)
64 OBJ-arm-vfp
= $(ARM_O
) $(DSO_O
)
65 OBJ-arm-eabi
= $(ARM_O
) $(DSO_O
)
66 OBJ-arm-eabihf
= $(ARM_O
) $(DSO_O
)
67 OBJ-arm-wince
= $(ARM_O
) $(WIN_O
)
68 OBJ-riscv64
= $(RISCV64_O
) $(BCHECK_O
) $(DSO_O
)
70 OBJ-extra
= $(filter $(B_O
) runmain.o
,$(OBJ-
$T))
71 OBJ-libtcc1
= $(addprefix $(X
),$(filter-out $(OBJ-extra
),$(OBJ-
$T)))
73 ALL
= $(addprefix $(TOP
)/,$(X
)libtcc1.a
$(OBJ-extra
))
77 $(TOP
)/$(X
)libtcc1.a
: $(OBJ-libtcc1
)
81 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
84 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
87 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
89 $(TOP
)/bcheck.o
: XFLAGS
+= $(BFLAGS
) $(if
$(CONFIG_musl
),-DTCC_MUSL
)
90 $(TOP
)/bt-exe.o
: $(TOP
)/tccrun.c
93 $(X
)wincrt1w.o
: wincrt1.c