Skip to content
This repository was archived by the owner on Nov 22, 2023. It is now read-only.

Commit bb93064

Browse files
author
grischka
committed
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
1 parent 669f611 commit bb93064

File tree

10 files changed

+321
-296
lines changed

10 files changed

+321
-296
lines changed

Makefile

Lines changed: 234 additions & 220 deletions
Large diffs are not rendered by default.

arm-asm.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ ST_FUNC void gen_le32(int c);
1717
#else
1818
/*************************************************************/
1919

20+
static void asm_error(void)
21+
{
22+
tcc_error("ARM asm not implemented.");
23+
}
24+
2025
/* XXX: make it faster ? */
2126
ST_FUNC void g(int c)
2227
{
@@ -49,10 +54,12 @@ ST_FUNC void gen_expr32(ExprValue *pe)
4954

5055
ST_FUNC void asm_opcode(TCCState *s1, int opcode)
5156
{
57+
asm_error();
5258
}
5359

5460
ST_FUNC void subst_asm_operand(CString *add_str, SValue *sv, int modifier)
5561
{
62+
asm_error();
5663
}
5764

5865
/* generate prolog and epilog code for asm statement */
@@ -61,21 +68,25 @@ ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands,
6168
uint8_t *clobber_regs,
6269
int out_reg)
6370
{
71+
asm_error();
6472
}
6573

6674
ST_FUNC void asm_compute_constraints(ASMOperand *operands,
6775
int nb_operands, int nb_outputs,
6876
const uint8_t *clobber_regs,
6977
int *pout_reg)
7078
{
79+
asm_error();
7180
}
7281

7382
ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str)
7483
{
84+
asm_error();
7585
}
7686

7787
ST_FUNC int asm_parse_regvar (int t)
7888
{
89+
asm_error();
7990
return -1;
8091
}
8192

examples/ex3.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
#include <stdlib.h>
2-
#include <stdio.h>
1+
#include <tcclib.h>
32

43
int fib(n)
54
{

lib/Makefile

Lines changed: 50 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,76 +5,71 @@
55
TOP = ..
66
include $(TOP)/Makefile
77
VPATH = $(TOPSRC)/lib $(TOPSRC)/win32/lib
8+
T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown)
9+
X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-)
810

9-
ifneq ($(CROSS),yes)
10-
TCC = $(TOP)/tcc$(EXESUF)
11-
OUT = ../libtcc1.a
11+
TCC = $(TOP)/$(X)tcc$(EXESUF)
12+
XCC = $(TCC)
13+
XAR = $(TCC) -ar
14+
XFLAGS-unx = -B$(TOPSRC)
15+
XFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include
16+
XFLAGS = $(XFLAGS$(XCFG))
17+
XCFG = $(or $(findstring -win,$T),-unx)
18+
19+
ifeq ($(X),)
1220
BCHECK_O = bcheck.o
13-
else
14-
TCC = $(TOP)/$(TARGET)-tcc$(EXESUF)
15-
OUT = libtcc1-$(TARGET).a
21+
ifeq "$T" "arm"
22+
XCC = $(CC)
23+
XAR = $(AR)
24+
XFLAGS = $(CFLAGS) -fPIC
25+
endif
1626
endif
1727

18-
XCC = $(TCC) -B$(TOPSRC)
19-
XAR = $(TCC) -ar
28+
ifeq ($(TARGETOS),Darwin)
29+
XFLAGS += -D_ANSI_SOURCE
30+
BCHECK_O =
31+
endif
2032

2133
I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
2234
X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o $(BCHECK_O)
2335
ARM_O = libtcc1.o armeabi.o alloca-arm.o
2436
ARM64_O = lib-arm64.o
2537
WIN_O = crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o
2638

27-
ifeq "$(TARGET)" "i386-win32"
28-
OBJ = $(I386_O) chkstk.o $(WIN_O)
29-
TGT = -DTCC_TARGET_I386 -DTCC_TARGET_PE
30-
XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include
31-
else ifeq "$(TARGET)" "x86_64-win32"
32-
OBJ = $(X86_64_O) chkstk.o $(WIN_O)
33-
TGT = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
34-
XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include
35-
else ifeq "$(TARGET)" "arm-wince"
36-
OBJ = $(ARM_O) $(WIN_O)
37-
TGT = -DTCC_TARGET_ARM -DTCC_TARGET_PE
38-
XCC = $(TCC) -B$(TOPSRC)/win32 -I$(TOPSRC)/include
39-
else ifeq "$(TARGET)" "i386"
40-
OBJ = $(I386_O)
41-
TGT = -DTCC_TARGET_I386
42-
else ifeq "$(TARGET)" "x86_64"
43-
OBJ = $(X86_64_O)
44-
TGT = -DTCC_TARGET_X86_64
45-
else ifeq "$(TARGET)" "arm-eabihf"
46-
OBJ = $(ARM_O)
47-
TGT = -DTCC_TARGET_ARM
48-
ifneq ($(CROSS),yes)
49-
# using gcc, need asm
50-
XCC = $(CC)
51-
XFLAGS = $(CFLAGS) -fPIC
52-
XAR = $(AR)
53-
endif
54-
else ifeq "$(TARGET)" "arm64"
55-
OBJ = $(ARM64_O)
56-
TGT = -DTCC_TARGET_ARM64
57-
else ifneq "$(TARGET)" ""
58-
$(error libtcc1.a not supported on target '$(TARGET)')
59-
endif
39+
OBJ-i386 = $(I386_O)
40+
TGT-i386 = -DTCC_TARGET_I386
6041

61-
ifeq ($(TARGETOS),Darwin)
62-
XFLAGS += -D_ANSI_SOURCE
63-
BCHECK_O =
64-
endif
42+
OBJ-x86_64 = $(X86_64_O)
43+
TGT-x86_64 = -DTCC_TARGET_X86_64
44+
45+
OBJ-arm = $(ARM_O)
46+
TGT-arm = -DTCC_TARGET_ARM
47+
48+
OBJ-arm64 = $(ARM64_O)
49+
TGT-arm64 = -DTCC_TARGET_ARM64
6550

66-
all : $(OUT)
51+
OBJ-i386-win32 = $(I386_O) chkstk.o $(WIN_O)
52+
TGT-i386-win32 = -DTCC_TARGET_I386 -DTCC_TARGET_PE
6753

68-
$(OUT) : $(patsubst %.o,%-$(TARGET).o,$(OBJ))
54+
OBJ-x86_64-win32 = $(X86_64_O) chkstk.o $(WIN_O)
55+
TGT-x86_64-win32 = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
56+
57+
OBJ-arm-wince = $(ARM_O) $(WIN_O)
58+
TGT-arm-wince = -DTCC_TARGET_ARM -DTCC_TARGET_PE
59+
60+
all : $(BIN)
61+
62+
$(BIN) : $(patsubst %.o,$(X)%.o,$(OBJ-$T))
6963
$(XAR) rcs $@ $^
70-
%-$(TARGET).o : %.c
71-
$(XCC) -c $< -o $@ $(TGT) $(XFLAGS)
72-
%-$(TARGET).o : %.S
73-
$(XCC) -c $< -o $@ $(TGT) $(XFLAGS)
7464

75-
crt1w-$(TARGET).o : crt1.c
76-
wincrt1w-$(TARGET).o : wincrt1.c
77-
bcheck-$(TARGET).o : XFLAGS += -w
65+
$(X)%.o : %.c
66+
$(XCC) -c $< -o $@ $(TGT-$T) $(XFLAGS)
67+
68+
$(X)%.o : %.S
69+
$(XCC) -c $< -o $@ $(TGT-$T) $(XFLAGS)
70+
71+
$(X)crt1w.o : crt1.c
72+
$(X)wincrt1w.o : wincrt1.c
7873

7974
clean :
80-
rm -f *.a *.o $(OUT)
75+
rm -f *.a *.o $(BIN)

lib/bcheck.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
|| defined(__DragonFly__) || defined(__dietlibc__) \
5050
|| defined(__UCLIBC__) || defined(__OpenBSD__) || defined(__NetBSD__) \
5151
|| defined(_WIN32) || defined(TCC_UCLIBC)
52-
#warning Bound checking does not support malloc (etc.) in this environment.
52+
//#warning Bound checking does not support malloc (etc.) in this environment.
5353
#undef CONFIG_TCC_MALLOC_HOOKS
5454
#undef HAVE_MEMALIGN
5555
#endif

tcc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1519,7 +1519,7 @@ ST_FUNC void gen_opl(int op);
15191519
/* ------------ arm-gen.c ------------ */
15201520
#ifdef TCC_TARGET_ARM
15211521
#if defined(TCC_ARM_EABI) && !defined(CONFIG_TCC_ELFINTERP)
1522-
ST_FUNC char *default_elfinterp(struct TCCState *s);
1522+
PUB_FUNC char *default_elfinterp(struct TCCState *s);
15231523
#endif
15241524
ST_FUNC void arm_init(struct TCCState *s);
15251525
ST_FUNC void gen_cvt_itof1(int t);

tests/Makefile

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ TESTS = \
1717
dlltest \
1818
abitest \
1919
vla_test-run \
20+
cross-test \
2021
tests2-dir \
2122
pp-dir
2223

@@ -45,23 +46,22 @@ endif
4546
ifeq (,$(filter i386 x86_64,$(ARCH)))
4647
TESTS := $(filter-out dlltest,$(TESTS))
4748
endif
49+
ifndef CONFIG_CROSS
50+
TESTS := $(filter-out cross-%,$(TESTS))
51+
endif
4852

49-
# run local version of tcc with local libraries and includes
50-
TCCFLAGS = -B$(TOP) -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP)
5153
ifdef CONFIG_WIN32
52-
TCCFLAGS = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) -L$(TOP)
53-
PATH := $(CURDIR)/$(TOP):$(PATH) # for libtcc_test to find libtcc.dll
54+
PATH := $(CURDIR)/$(TOP);$(PATH) # for libtcc_test to find libtcc.dll
5455
endif
5556

56-
TCC = $(TOP)/tcc $(TCCFLAGS)
57-
RUN_TCC = $(NATIVE_DEFINES) -DONE_SOURCE -run $(TOPSRC)/tcc.c $(TCCFLAGS)
58-
5957
ifeq ($(TARGETOS),Darwin)
6058
CFLAGS += -Wl,-flat_namespace,-undefined,warning
6159
TCCFLAGS += -D_ANSI_SOURCE
6260
export MACOSX_DEPLOYMENT_TARGET:=10.2
6361
endif
6462

63+
RUN_TCC = $(NATIVE_DEFINES) -DONE_SOURCE -run $(TOPSRC)/tcc.c $(TCCFLAGS)
64+
6565
DISAS = objdump -d
6666

6767
all test : clean-s $(TESTS)
@@ -236,6 +236,16 @@ vla_test-run: vla_test$(EXESUF)
236236
@echo ------------ $@ ------------
237237
./vla_test$(EXESUF)
238238

239+
cross-test :
240+
@echo ------------ $@ ------------
241+
$(TOP)/i386-tcc$(EXESUF) $(TCCFLAGS-unx) -c $(TOPSRC)/examples/ex3.c && echo "ok"
242+
$(TOP)/x86_64-tcc$(EXESUF) $(TCCFLAGS-unx) -c $(TOPSRC)/examples/ex3.c && echo "ok"
243+
$(TOP)/arm-tcc$(EXESUF) $(TCCFLAGS-unx) -c $(TOPSRC)/examples/ex3.c && echo "ok"
244+
$(TOP)/c67-tcc$(EXESUF) $(TCCFLAGS-unx) -c $(TOPSRC)/examples/ex3.c && echo "ok"
245+
$(TOP)/i386-win32-tcc$(EXESUF) $(TCCFLAGS-win) $(TOPSRC)/win32/examples/hello_win.c && echo "ok"
246+
$(TOP)/x86_64-win32-tcc$(EXESUF) $(TCCFLAGS-win) $(TOPSRC)/win32/examples/hello_win.c && echo "ok"
247+
$(TOP)/arm-wince-tcc$(EXESUF) $(TCCFLAGS-win) -c $(TOPSRC)/win32/examples/hello_win.c && echo "ok"
248+
239249
# targets for development
240250
%.bin: %.c tcc
241251
$(TCC) -g -o $@ $<

tests/pp/Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
#
44

55
TOP = ../..
6-
include $(TOP)/config.mak
6+
include $(TOP)/Makefile
77
SRC = $(TOPSRC)/tests/pp
88
VPATH = $(SRC)
99

10-
TCC = ../../tcc
1110
files = $(patsubst %.$1,%.test,$(notdir $(wildcard $(SRC)/*.$1)))
1211
TESTS = $(call files,c) $(call files,S)
1312

tests/tests2/Makefile

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
TOP = ../..
2-
include $(TOP)/config.mak
2+
include $(TOP)/Makefile
33
SRC = $(TOPSRC)/tests/tests2
44
VPATH = $(SRC)
55

6-
# run local version of tcc with local libraries and includes
7-
TCCFLAGS = -B$(TOP) -I$(TOPSRC)/include
8-
ifdef CONFIG_WIN32
9-
TCCFLAGS = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -L$(TOP)
10-
endif
11-
TCC = $(TOP)/tcc $(TCCFLAGS)
12-
136
TESTS = $(patsubst %.c,%.test,$(sort $(notdir $(wildcard $(SRC)/*.c))))
147

158
# 34_array_assignment.test -- array assignment is not in C standard

win32/include/_mingw.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,12 @@
8383
#define _M_IX86 300 /* Visual Studio */
8484
#define WIN32 1
8585
#define _USE_32BIT_TIME_T
86+
#ifdef __arm__
87+
#define __TRY__
88+
#else
8689
#define __TRY__ void __try__(void**), *_sehrec[6]; __try__(_sehrec);
8790
#endif
91+
#endif
8892

8993
/* in stddef.h */
9094
#define _SIZE_T_DEFINED

0 commit comments

Comments
 (0)