i386: We can change 'lea 0(%ebp),r' to 'mov %ebp,r'
[tinycc.git] / lib / Makefile
blob6813052bc74ee0ad84507a80679b3f1d07a537c8
2 # Tiny C Compiler Makefile for libtcc1.a
5 TOP = ..
6 include $(TOP)/config.mak
8 ifndef TARGET
9 ifdef CONFIG_WIN64
10 TARGET = x86_64-win32
11 else
12 ifdef CONFIG_WIN32
13 TARGET = i386-win32
14 else
15 ifeq ($(ARCH),i386)
16 TARGET = i386
17 ifneq ($(TARGETOS),Darwin)
18 XCC = gcc -O2 -m32
19 endif
20 else
21 ifeq ($(ARCH),x86-64)
22 TARGET = x86_64
23 ifneq ($(TARGETOS),Darwin)
24 XCC = gcc -O2 -m64
25 endif
26 endif
27 endif
28 endif
29 endif
30 endif
32 DIR = $(TARGET)
34 native : ../libtcc1.a
35 cross : $(DIR)/libtcc1.a
37 native : TCC = $(TOP)/tcc$(EXESUF)
38 cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF)
40 I386_O = libtcc1.o alloca86.o alloca86-bt.o
41 X86_64_O = libtcc1.o alloca86_64.o
42 WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o bcheck.o
43 WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
45 VPATH = $(TOP)/lib $(TOP)/win32/lib
47 ifeq "$(TARGET)" "i386-win32"
48 OBJ = $(addprefix $(DIR)/,$(WIN32_O))
49 TGT = -DTCC_TARGET_I386 -DTCC_TARGET_PE
50 XCC = $(TCC) -B$(TOP)/win32 -I$(TOP)/include
51 XAR = $(DIR)/tiny_libmaker$(EXESUF)
52 else
53 ifeq "$(TARGET)" "x86_64-win32"
54 OBJ = $(addprefix $(DIR)/,$(WIN64_O))
55 TGT = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
56 XCC = $(TCC) -B$(TOP)/win32 -I$(TOP)/include
57 XAR = $(DIR)/tiny_libmaker$(EXESUF)
58 else
59 ifeq "$(TARGET)" "i386"
60 OBJ = $(addprefix $(DIR)/,$(I386_O))
61 TGT = -DTCC_TARGET_I386
62 XCC ?= $(TCC) -B$(TOP) -m32 -D_ANSI_SOURCE
63 ifeq ($(TARGETOS),Darwin)
64 XAR = $(DIR)/tiny_libmaker$(EXESUF)
65 endif
66 else
67 ifeq "$(TARGET)" "x86_64"
68 OBJ = $(addprefix $(DIR)/,$(X86_64_O))
69 TGT = -DTCC_TARGET_X86_64
70 XCC ?= $(TCC) -B$(TOP) -m64 -D_ANSI_SOURCE
71 ifeq ($(TARGETOS),Darwin)
72 XAR = $(DIR)/tiny_libmaker$(EXESUF)
73 endif
74 else
75 $(error libtcc1.a not supported on target '$(TARGET)')
76 endif
77 endif
78 endif
79 endif
81 ifdef XAR
82 AR = $(XAR)
83 endif
85 $(DIR)/libtcc1.a ../libtcc1.a : $(OBJ) $(XAR)
86 $(AR) rcs $@ $(OBJ)
87 $(DIR)/%.o : %.c
88 $(XCC) -c $< -o $@ $(CPPFLAGS) $(TGT) $(CFLAGS)
89 $(DIR)/%.o : %.S
90 $(XCC) -c $< -o $@ $(CPPFLAGS) $(TGT) $(CFLAGS)
91 $(DIR)/%$(EXESUF) : $(TOP)/win32/tools/%.c
92 $(CC) -Os -s -w -o $@ $< $(CPPFLAGS) $(TGT) $(CFLAGS) $(LDFLAGS)
94 $(OBJ) $(XAR) : $(DIR)/exists
95 $(DIR)/exists :
96 mkdir -p $(DIR)
97 @echo $@ > $@
99 clean :
100 rm -rfv i386-win32 x86_64-win32 i386 x86_64