aboutsummaryrefslogtreecommitdiff
path: root/lib/Makefile
blob: 505ec233ea6cc85a202022445e6a0af05b5bd2ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#
# Tiny C Compiler Makefile for libtcc1.a
#

TOP = ..
include $(TOP)/Makefile
VPATH = $(top_srcdir)/lib $(top_srcdir)/win32/lib

ifndef TARGET # native library
 ifdef CONFIG_WIN64
  TARGET = x86_64-win
 else
 ifdef CONFIG_WIN32
  TARGET = i386-win
 else
 ifeq ($(ARCH),i386)
  TARGET = i386
 else
 ifeq ($(ARCH),x86-64)
  TARGET = x86_64
 else
 ifeq ($(ARCH),arm)
  TARGET = arm
  XCC = $(CC)
 else
 ifeq ($(ARCH),arm64)
  TARGET = arm64
 else
 endif
 endif
 endif
 endif
 endif
 endif
 BCHECK_O = bcheck.o
endif

DIR = $(TARGET)

native : ../libtcc1.a
cross : $(DIR)/libtcc1.a

native : TCC = $(TOP)/tcc$(EXESUF)
cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF)

I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
X86_64_O = libtcc1.o alloca86_64.o
ARM_O = libtcc1.o armeabi.o alloca-arm.o
WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o
ARM64_O = lib-arm64.o

# build TCC runtime library to contain PIC code, so it can be linked
# into shared libraries
PICFLAGS = -fPIC

# don't compile with -fstack-protector-strong, TCC doesn't handle it
# correctly
CFLAGS := $(filter-out -fstack-protector-strong,$(CFLAGS))

ifeq "$(TARGET)" "i386-win"
 OBJ = $(addprefix $(DIR)/,$(WIN32_O))
 TGT = -DTCC_TARGET_I386 -DTCC_TARGET_PE
 XCC ?= $(TCC) -B$(top_srcdir)/win32 -I$(top_srcdir)/include
 XAR ?= $(DIR)/tiny_libmaker$(EXESUF)
 PICFLAGS =
else
ifeq "$(TARGET)" "x86_64-win"
 OBJ = $(addprefix $(DIR)/,$(WIN64_O))
 TGT = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
 XCC = $(TCC) -B$(top_srcdir)/win32 -I$(top_srcdir)/include
 XAR ?= $(DIR)/tiny_libmaker$(EXESUF)
 PICFLAGS =
else
ifeq "$(TARGET)" "i386"
 OBJ = $(addprefix $(DIR)/,$(I386_O))
 TGT = -DTCC_TARGET_I386
 XCC ?= $(TCC) -B$(TOP)
else
ifeq "$(TARGET)" "x86_64"
 OBJ = $(addprefix $(DIR)/,$(X86_64_O))
 TGT = -DTCC_TARGET_X86_64
 XCC ?= $(TCC) -B$(TOP)
else
ifeq "$(TARGET)" "arm"
 OBJ = $(addprefix $(DIR)/,$(ARM_O))
 TGT = -DTCC_TARGET_ARM
 XCC ?= $(TCC) -B$(TOP)
else
ifeq "$(TARGET)" "arm64"
 OBJ = $(addprefix $(DIR)/,$(ARM64_O))
 TGT = -DTCC_TARGET_ARM64
 XCC ?= $(TCC) -B$(TOP)
else
 $(error libtcc1.a not supported on target '$(TARGET)')
endif
endif
endif
endif
endif
endif

XFLAGS = $(CPPFLAGS) $(CFLAGS) $(PICFLAGS) $(TGT)

ifeq ($(TARGETOS),Darwin)
 XAR = $(DIR)/tiny_libmaker$(EXESUF)
 XFLAGS += -D_ANSI_SOURCE
 BCHECK_O =
endif

ifdef XAR
AR = $(XAR)
endif

$(DIR)/libtcc1.a ../libtcc1.a : $(OBJ) $(XAR)
	$(AR) rcs $@ $(OBJ)
$(DIR)/%.o : %.c
	$(XCC) -c $< -o $@ $(XFLAGS)
$(DIR)/%.o : %.S
	$(XCC) -c $< -o $@ $(XFLAGS)
$(DIR)/%$(EXESUF) : $(TOP)/win32/tools/%.c
	$(CC) -o $@ $< $(XFLAGS) $(LDFLAGS)

$(OBJ) $(XAR) : $(DIR)/exists
$(DIR)/exists :
	mkdir -p $(DIR)
	@echo $@ > $@

clean :
	rm -rfv i386-win x86_64-win i386 x86_64