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
)
17 XCFG
= $(or
$(findstring -win
,$T),-unx
)
18 S
= $(if
$(findstring yes
,$(SILENT
)),@
$(info * $@
))
20 # in order to use gcc, type: make <target>-libtcc1-usegcc=yes
21 arm-libtcc1-usegcc ?
= no
23 # This makes bounds checking 40%..60% faster.
24 #x86_64-libtcc1-usegcc=yes
25 #i386-libtcc1-usegcc=yes
27 ifeq "$($(T)-libtcc1-usegcc)" "yes"
30 XFLAGS
= $(CFLAGS
) -fPIC
-gdwarf
-fno-omit-frame-pointer
-Wno-unused-function
-Wno-unused-variable
33 ifneq ($(CONFIG_backtrace
),no
)
34 # only for native compiler
35 ifneq ($(CONFIG_bcheck
),no
)
36 $(X
)BCHECK_O
= bcheck.o
38 $(X
)BT_O
= bt-exe.o bt-log.o
39 $(X
)B_O
= $(BCHECK_O
) bt-exe.o bt-log.o bt-dll.o
45 I386_O
= libtcc1.o alloca.o alloca-bt.o stdatomic.o atomic.o builtin.o
$(BT_O
)
46 X86_64_O
= libtcc1.o alloca.o alloca-bt.o stdatomic.o atomic.o builtin.o
$(BT_O
)
47 ARM_O
= libtcc1.o armeabi.o alloca.o armflush.o stdatomic.o atomic.o builtin.o
$(BT_O
)
48 ARM64_O
= lib-arm64.o stdatomic.o atomic.o builtin.o
$(BT_O
)
49 RISCV64_O
= lib-arm64.o stdatomic.o atomic.o builtin.o
$(BT_O
)
50 WIN_O
= crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o
52 OBJ-i386
= $(I386_O
) $(BCHECK_O
) $(DSO_O
)
53 OBJ-x86_64
= $(X86_64_O
) va_list.o
$(BCHECK_O
) $(DSO_O
)
54 OBJ-x86_64-osx
= $(X86_64_O
) va_list.o
$(BCHECK_O
)
55 OBJ-i386-win32
= $(I386_O
) chkstk.o
$(B_O
) $(WIN_O
)
56 OBJ-x86_64-win32
= $(X86_64_O
) chkstk.o
$(B_O
) $(WIN_O
)
57 OBJ-arm64
= $(ARM64_O
) $(BCHECK_O
) $(DSO_O
)
58 OBJ-arm64-osx
= $(ARM64_O
) $(BCHECK_O
)
59 OBJ-arm
= $(ARM_O
) $(BCHECK_O
) $(DSO_O
)
60 OBJ-arm-fpa
= $(ARM_O
) $(DSO_O
)
61 OBJ-arm-fpa-ld
= $(ARM_O
) $(DSO_O
)
62 OBJ-arm-vfp
= $(ARM_O
) $(DSO_O
)
63 OBJ-arm-eabi
= $(ARM_O
) $(DSO_O
)
64 OBJ-arm-eabihf
= $(ARM_O
) $(DSO_O
)
65 OBJ-arm-wince
= $(ARM_O
) $(WIN_O
)
66 OBJ-riscv64
= $(RISCV64_O
) $(BCHECK_O
) $(DSO_O
)
68 OBJ-extra
= $(filter $(B_O
),$(OBJ-
$T))
69 OBJ-libtcc1
= $(addprefix $(X
),$(filter-out $(OBJ-extra
),$(OBJ-
$T)))
71 ALL
= $(addprefix $(TOP
)/,$(X
)libtcc1.a
$(OBJ-extra
))
75 $(TOP
)/$(X
)libtcc1.a
: $(OBJ-libtcc1
)
79 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
82 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
85 $S$(XCC
) -c
$< -o
$@
$(XFLAGS
)
87 $(TOP
)/bcheck.o
: XFLAGS
+= -g
$(if
$(CONFIG_musl
),-DTCC_MUSL
)
88 $(TOP
)/bt-exe.o
: $(TOP
)/tccrun.c
91 $(X
)wincrt1w.o
: wincrt1.c