diff options
| author | grischka <grischka> | 2017-02-25 12:49:47 +0100 |
|---|---|---|
| committer | grischka <grischka> | 2017-02-25 12:51:04 +0100 |
| commit | bb93064d7857d887b674999c9b4152b44a628f9a (patch) | |
| tree | 5290a93161373fd5a286d9aaf32ebb8dea04f82c /lib | |
| parent | 669f61117d6ff2255649e80a9708fe24e32d4a33 (diff) | |
| download | tinycc-bb93064d7857d887b674999c9b4152b44a628f9a.tar.gz tinycc-bb93064d7857d887b674999c9b4152b44a628f9a.tar.bz2 | |
makefile: unify cross with native builds
supports building cross compilers on the fly without need
for configure --enable-cross
$ make cross # all compilers
$ make cross-TARGET # only TARGET-compiler & its libtcc1.a
with TARGET one from
i386 x86_64 i386-win32 x86_64-win32 arm arm64 arm-wince c67
Type 'make help' for more information
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Makefile | 105 | ||||
| -rw-r--r-- | lib/bcheck.c | 2 |
2 files changed, 51 insertions, 56 deletions
diff --git a/lib/Makefile b/lib/Makefile index 0c32c52..3c5b988 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -5,18 +5,30 @@ TOP = .. include $(TOP)/Makefile VPATH = $(TOPSRC)/lib $(TOPSRC)/win32/lib +T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown) +X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-) -ifneq ($(CROSS),yes) - TCC = $(TOP)/tcc$(EXESUF) - OUT = ../libtcc1.a +TCC = $(TOP)/$(X)tcc$(EXESUF) +XCC = $(TCC) +XAR = $(TCC) -ar +XFLAGS-unx = -B$(TOPSRC) +XFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include +XFLAGS = $(XFLAGS$(XCFG)) +XCFG = $(or $(findstring -win,$T),-unx) + +ifeq ($(X),) BCHECK_O = bcheck.o -else - TCC = $(TOP)/$(TARGET)-tcc$(EXESUF) - OUT = libtcc1-$(TARGET).a + ifeq "$T" "arm" + XCC = $(CC) + XAR = $(AR) + XFLAGS = $(CFLAGS) -fPIC + endif endif -XCC = $(TCC) -B$(TOPSRC) -XAR = $(TCC) -ar +ifeq ($(TARGETOS),Darwin) + XFLAGS += -D_ANSI_SOURCE + BCHECK_O = +endif I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O) X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o $(BCHECK_O) @@ -24,57 +36,40 @@ ARM_O = libtcc1.o armeabi.o alloca-arm.o ARM64_O = lib-arm64.o WIN_O = crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o -ifeq "$(TARGET)" "i386-win32" - OBJ = $(I386_O) chkstk.o $(WIN_O) - TGT = -DTCC_TARGET_I386 -DTCC_TARGET_PE - XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include -else ifeq "$(TARGET)" "x86_64-win32" - OBJ = $(X86_64_O) chkstk.o $(WIN_O) - TGT = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE - XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include -else ifeq "$(TARGET)" "arm-wince" - OBJ = $(ARM_O) $(WIN_O) - TGT = -DTCC_TARGET_ARM -DTCC_TARGET_PE - XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include -else ifeq "$(TARGET)" "i386" - OBJ = $(I386_O) - TGT = -DTCC_TARGET_I386 -else ifeq "$(TARGET)" "x86_64" - OBJ = $(X86_64_O) - TGT = -DTCC_TARGET_X86_64 -else ifeq "$(TARGET)" "arm-eabihf" - OBJ = $(ARM_O) - TGT = -DTCC_TARGET_ARM - ifneq ($(CROSS),yes) - # using gcc, need asm - XCC = $(CC) - XFLAGS = $(CFLAGS) -fPIC - XAR = $(AR) - endif -else ifeq "$(TARGET)" "arm64" - OBJ = $(ARM64_O) - TGT = -DTCC_TARGET_ARM64 -else ifneq "$(TARGET)" "" - $(error libtcc1.a not supported on target '$(TARGET)') -endif +OBJ-i386 = $(I386_O) +TGT-i386 = -DTCC_TARGET_I386 -ifeq ($(TARGETOS),Darwin) - XFLAGS += -D_ANSI_SOURCE - BCHECK_O = -endif +OBJ-x86_64 = $(X86_64_O) +TGT-x86_64 = -DTCC_TARGET_X86_64 + +OBJ-arm = $(ARM_O) +TGT-arm = -DTCC_TARGET_ARM + +OBJ-arm64 = $(ARM64_O) +TGT-arm64 = -DTCC_TARGET_ARM64 -all : $(OUT) +OBJ-i386-win32 = $(I386_O) chkstk.o $(WIN_O) +TGT-i386-win32 = -DTCC_TARGET_I386 -DTCC_TARGET_PE -$(OUT) : $(patsubst %.o,%-$(TARGET).o,$(OBJ)) +OBJ-x86_64-win32 = $(X86_64_O) chkstk.o $(WIN_O) +TGT-x86_64-win32 = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE + +OBJ-arm-wince = $(ARM_O) $(WIN_O) +TGT-arm-wince = -DTCC_TARGET_ARM -DTCC_TARGET_PE + +all : $(BIN) + +$(BIN) : $(patsubst %.o,$(X)%.o,$(OBJ-$T)) $(XAR) rcs $@ $^ -%-$(TARGET).o : %.c - $(XCC) -c $< -o $@ $(TGT) $(XFLAGS) -%-$(TARGET).o : %.S - $(XCC) -c $< -o $@ $(TGT) $(XFLAGS) -crt1w-$(TARGET).o : crt1.c -wincrt1w-$(TARGET).o : wincrt1.c -bcheck-$(TARGET).o : XFLAGS += -w +$(X)%.o : %.c + $(XCC) -c $< -o $@ $(TGT-$T) $(XFLAGS) + +$(X)%.o : %.S + $(XCC) -c $< -o $@ $(TGT-$T) $(XFLAGS) + +$(X)crt1w.o : crt1.c +$(X)wincrt1w.o : wincrt1.c clean : - rm -f *.a *.o $(OUT) + rm -f *.a *.o $(BIN) diff --git a/lib/bcheck.c b/lib/bcheck.c index d3b9955..9eb012f 100644 --- a/lib/bcheck.c +++ b/lib/bcheck.c @@ -49,7 +49,7 @@ || defined(__DragonFly__) || defined(__dietlibc__) \ || defined(__UCLIBC__) || defined(__OpenBSD__) || defined(__NetBSD__) \ || defined(_WIN32) || defined(TCC_UCLIBC) -#warning Bound checking does not support malloc (etc.) in this environment. +//#warning Bound checking does not support malloc (etc.) in this environment. #undef CONFIG_TCC_MALLOC_HOOKS #undef HAVE_MEMALIGN #endif |
