-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile.pre
224 lines (142 loc) · 8.31 KB
/
Makefile.pre
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
ROOT_DIR = $(abspath ./)/
INC_DIR = $(ROOT_DIR)include/
SRC_DIR = $(ROOT_DIR)src/
BIN_DIR = $(ROOT_DIR)bin/
LIB_DIR = $(ROOT_DIR)lib/
OBJ_DIR = $(ROOT_DIR)obj/
DEPS_K_DIR = $(ROOT_DIR)deps/k/
AR = ar rcs
CC = gcc
OPTIMIZE = -O2
MEMORY_CHECK =
WARNING = -Wall -Wextra -Winline
DEBUG = -DNDEBUG
PLATFORM = Linux
CONFIG =
STDC =
CFLAGS = $(STDC) $(OPTIMIZE) $(MEMORY_CHECK) $(WARNING) $(DEBUG) $(CONFIG) -I $(ROOT_DIR) -I $(DEPS_K_DIR)
KLANG_OBJS = $(OBJ_DIR)klutils.o $(OBJ_DIR)klgc.o $(OBJ_DIR)klmm.o $(OBJ_DIR)kltuple.o $(OBJ_DIR)klarray.o $(OBJ_DIR)klmap.o $(OBJ_DIR)klclass.o \
$(OBJ_DIR)klclosure.o $(OBJ_DIR)klkfunc.o $(OBJ_DIR)klref.o $(OBJ_DIR)klstring.o $(OBJ_DIR)klcoroutine.o $(OBJ_DIR)klbuiltinclass.o \
$(OBJ_DIR)klvalue.o $(OBJ_DIR)klcommon.o $(OBJ_DIR)klexec.o $(OBJ_DIR)klstack.o $(OBJ_DIR)klstate.o $(OBJ_DIR)klthrow.o \
$(OBJ_DIR)klconvert.o $(OBJ_DIR)klapi.o
KLANGC_OBJS = $(OBJ_DIR)klparser.o $(OBJ_DIR)klparser_expr.o $(OBJ_DIR)klparser_stmt.o $(OBJ_DIR)klparser_comprehension.o \
$(OBJ_DIR)klparser_utils.o $(OBJ_DIR)klparser_error.o $(OBJ_DIR)klparser_recovery.o $(OBJ_DIR)kltokens.o \
$(OBJ_DIR)kllex.o $(OBJ_DIR)klcfdarr.o $(OBJ_DIR)klerror.o $(OBJ_DIR)klast.o $(OBJ_DIR)klast_expr.o $(OBJ_DIR)klast_stmt.o \
$(OBJ_DIR)klstrtbl.o $(OBJ_DIR)klcode.o $(OBJ_DIR)klcode_dump.o $(OBJ_DIR)klcode_print.o $(OBJ_DIR)klcontbl.o \
$(OBJ_DIR)klgen.o $(OBJ_DIR)klgen_expr.o $(OBJ_DIR)klgen_exprbool.o $(OBJ_DIR)klgen_pattern.o $(OBJ_DIR)klgen_stmt.o \
$(OBJ_DIR)klgen_emit.o $(OBJ_DIR)klgen_utils.o $(OBJ_DIR)klsymtbl.o $(OBJ_DIR)klutils.o
KLANGC_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGC_OBJS))
KLANGLIB_TB_OBJS = $(OBJ_DIR)kllib_tb.o
KLANGLIB_TB_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_TB_OBJS))
KLANGLIB_RTCPL_OBJS = $(OBJ_DIR)kllib_rtcpl.o
KLANGLIB_RTCPL_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_RTCPL_OBJS))
KLANGLIB_BASIC_OBJS = $(OBJ_DIR)kllib_basic.o
KLANGLIB_BASIC_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_BASIC_OBJS))
KLANGLIB_STREAM_OBJS = $(OBJ_DIR)kllib_stream.o $(OBJ_DIR)kllib_file.o $(OBJ_DIR)kllib_stream_collection.o \
$(OBJ_DIR)kllib_kistring.o $(OBJ_DIR)kllib_kostring.o $(OBJ_DIR)kllib_sstring.o $(OBJ_DIR)kllib_write.o
KLANGLIB_STREAM_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_STREAM_OBJS))
KLANGLIB_STRING_OBJS = $(OBJ_DIR)kllib_string.o
KLANGLIB_STRING_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_STRING_OBJS))
KLANGLIB_RTCPL_WRAPPER_OBJS = $(OBJ_DIR)kllib_rtcpl_wrapper.o
KLANGLIB_RTCPL_WRAPPER_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_RTCPL_WRAPPER_OBJS))
KLANGLIB_PRINT_OBJS = $(OBJ_DIR)kllib_print.o
KLANGLIB_PRINT_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_PRINT_OBJS))
KLANGLIB_CAST_OBJS = $(OBJ_DIR)kllib_cast.o
KLANGLIB_CAST_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_CAST_OBJS))
KLANGLIB_OS_OBJS = $(OBJ_DIR)kllib_os.o
KLANGLIB_OS_PIC_OBJS = $(patsubst %.o, %.pic.o, $(KLANGLIB_OS_OBJS))
KLANGLIBS_A = $(LIB_DIR)traceback.a $(LIB_DIR)runtime_compiler.a $(LIB_DIR)basic.a $(LIB_DIR)stream.a $(LIB_DIR)string.a $(LIB_DIR)rtcpl_wrapper.a $(LIB_DIR)print.a $(LIB_DIR)cast.a $(LIB_DIR)os.a
KLANGLIBS_SO = $(patsubst %.a, %.so, $(KLANGLIBS_A))
ifeq ($(PLATFORM), Windows)
all: $(LIB_DIR)klang.dll $(LIB_DIR)libklangc.a $(LIB_DIR)libklangc.pic.a $(BIN_DIR)klangc $(BIN_DIR)klang $(KLANGLIBS_SO)
$(BIN_DIR)klang : $(OBJ_DIR)klang.o $(LIB_DIR)klang.dll $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) $(CFLAGS) -o $@ $^
$(LIB_DIR)klang.dll : $(KLANG_OBJS) $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) -shared -o $@ $^
$(LIB_DIR)traceback.so : $(KLANGLIB_TB_PIC_OBJS) $(LIB_DIR)klang.dll $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)runtime_compiler.so : $(KLANGLIB_RTCPL_PIC_OBJS) $(LIB_DIR)klang.dll $(LIB_DIR)libklangc.pic.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)basic.so : $(KLANGLIB_BASIC_PIC_OBJS) $(LIB_DIR)klang.dll $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)stream.so : $(KLANGLIB_STREAM_PIC_OBJS) $(LIB_DIR)klang.dll $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)string.so : $(KLANGLIB_STRING_OBJS) $(LIB_DIR)klang.dll | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)rtcpl_wrapper.so : $(KLANGLIB_RTCPL_WRAPPER_PIC_OBJS) $(LIB_DIR)klang.dll $(DEPS_K_DIR)lib/libk.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)print.so : $(KLANGLIB_PRINT_PIC_OBJS) $(LIB_DIR)klang.dll | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)cast.so : $(KLANGLIB_CAST_PIC_OBJS) $(LIB_DIR)klang.dll | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)os.so : $(KLANGLIB_OS_PIC_OBJS) $(LIB_DIR)klang.dll | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
endif
ifeq ($(PLATFORM), Linux)
all: $(LIB_DIR)libklang.a $(LIB_DIR)libklangc.a $(LIB_DIR)libklangc.pic.a $(BIN_DIR)klangc $(BIN_DIR)klang $(KLANGLIBS_SO)
$(BIN_DIR)klang : $(OBJ_DIR)klang.o $(LIB_DIR)libklang.a | create_dir
$(CC) $(CFLAGS) -rdynamic -o $@ $< -L $(LIB_DIR) -lklang -ldl
$(LIB_DIR)libklang.a : $(KLANG_OBJS) $(DEPS_K_DIR)lib/libk.a | create_dir
cp $(DEPS_K_DIR)lib/libk.a $@
$(AR) $@ $(KLANG_OBJS)
$(LIB_DIR)traceback.so : $(KLANGLIB_TB_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $(KLANGLIB_TB_PIC_OBJS)
$(LIB_DIR)runtime_compiler.so : $(KLANGLIB_RTCPL_PIC_OBJS) $(LIB_DIR)libklangc.pic.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $(KLANGLIB_RTCPL_PIC_OBJS) -L $(LIB_DIR) -lklangc.pic
$(LIB_DIR)basic.so : $(KLANGLIB_BASIC_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $(KLANGLIB_BASIC_PIC_OBJS)
$(LIB_DIR)stream.so : $(KLANGLIB_STREAM_PIC_OBJS) $(DEPS_K_DIR)lib/libk.pic.a | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)string.so : $(KLANGLIB_STRING_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)rtcpl_wrapper.so : $(KLANGLIB_RTCPL_WRAPPER_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)print.so : $(KLANGLIB_PRINT_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)cast.so : $(KLANGLIB_CAST_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
$(LIB_DIR)os.so : $(KLANGLIB_OS_PIC_OBJS) | create_dir
$(CC) -shared $(CFLAGS) -o $@ $^
endif
ifeq ($(PLATFORM), static)
CONFIG += -DKLCONFIG_USE_STATIC_LANGLIB --static
all: $(LIB_DIR)libklang.a $(LIB_DIR)libklangc.a $(BIN_DIR)klangc $(BIN_DIR)klang
$(BIN_DIR)klang : $(OBJ_DIR)klang.o $(LIB_DIR)libklang.a $(KLANGLIBS_A) | create_dir
$(CC) $(CFLAGS) -o $@ $^
$(LIB_DIR)libklang.a : $(KLANG_OBJS) $(DEPS_K_DIR)lib/libk.a | create_dir
cp $(DEPS_K_DIR)lib/libk.a $@
$(AR) $@ $(KLANG_OBJS)
$(LIB_DIR)traceback.a : $(KLANGLIB_TB_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)runtime_compiler.a : $(KLANGLIB_RTCPL_OBJS) $(LIB_DIR)libklangc.a | create_dir
cp $(LIB_DIR)libklangc.a $@
$(AR) $@ $(KLANGLIB_RTCPL_OBJS)
$(LIB_DIR)basic.a : $(KLANGLIB_BASIC_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)stream.a : $(KLANGLIB_STREAM_OBJS) $(DEPS_K_DIR)lib/libk.a | create_dir
$(AR) $@ $^
$(LIB_DIR)string.a : $(KLANGLIB_STRING_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)rtcpl_wrapper.a : $(KLANGLIB_RTCPL_WRAPPER_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)print.a : $(KLANGLIB_PRINT_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)cast.a : $(KLANGLIB_CAST_OBJS) | create_dir
$(AR) $@ $^
$(LIB_DIR)os.a : $(KLANGLIB_OS_OBJS) | create_dir
$(AR) $@ $^
endif
$(BIN_DIR)klangc : $(OBJ_DIR)klangc.o $(LIB_DIR)libklangc.a | create_dir
$(CC) $(CFLAGS) -o $@ $< -L $(LIB_DIR) -lklangc
$(LIB_DIR)libklangc.a : $(KLANGC_OBJS) $(DEPS_K_DIR)lib/libk.a | create_dir
cp $(DEPS_K_DIR)lib/libk.a $@
$(AR) $@ $(KLANGC_OBJS)
$(LIB_DIR)libklangc.pic.a : $(KLANGC_PIC_OBJS) $(DEPS_K_DIR)lib/libk.pic.a | create_dir
cp $(DEPS_K_DIR)lib/libk.pic.a $@
$(AR) $@ $(KLANGC_PIC_OBJS)
$(DEPS_K_DIR)lib/libk.a :
$(MAKE) -C $(DEPS_K_DIR) $(DEPS_K_DIR)lib/libk.a "STDC=$(STDC)" "AR=$(AR)" "CC=$(CC)" "OPTIMIZE=$(OPTIMIZE)" "MEMORY_CHECK=$(MEMORY_CHECK)" "WARNING=$(WARNING)" "DEBUG=$(DEBUG)"
$(DEPS_K_DIR)lib/libk.pic.a :
$(MAKE) -C $(DEPS_K_DIR) $(DEPS_K_DIR)lib/libk.pic.a "STDC=$(STDC)" "AR=$(AR)" "CC=$(CC)" "OPTIMIZE=$(OPTIMIZE)" "MEMORY_CHECK=$(MEMORY_CHECK)" "WARNING=$(WARNING)" "DEBUG=$(DEBUG)"
$(DEPS_K_DIR)lib/libk.so :
$(MAKE) -C $(DEPS_K_DIR) $(DEPS_K_DIR)lib/libk.so "STDC=$(STDC)" "AR=$(AR)" "CC=$(CC)" "OPTIMIZE=$(OPTIMIZE)" "MEMORY_CHECK=$(MEMORY_CHECK)" "WARNING=$(WARNING)" "DEBUG=$(DEBUG)"