@@ -36,7 +36,88 @@ CFG_GCCISH_CFLAGS += -fno-omit-frame-pointer
36
36
# embedded into the executable, so use a no-op command.
37
37
CFG_DSYMUTIL := true
38
38
39
+ # Hack: not sure how to test if a file exists in make other than this
40
+ OS_SUPP = $(patsubst % ,--suppressions=% ,\
41
+ $(wildcard $(CFG_SRC_DIR ) src/etc/$(CFG_OSTYPE ) .supp* ) )
42
+
43
+ ifdef CFG_DISABLE_OPTIMIZE_CXX
44
+ $(info cfg : disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
45
+ CFG_GCCISH_CFLAGS += -O0
46
+ else
47
+ CFG_GCCISH_CFLAGS += -O2
48
+ endif
49
+
50
+ ifdef CFG_VALGRIND
51
+ CFG_VALGRIND += --error-exitcode=100 \
52
+ --quiet \
53
+ --suppressions=$(CFG_SRC_DIR ) src/etc/x86.supp \
54
+ $(OS_SUPP )
55
+ ifdef CFG_ENABLE_HELGRIND
56
+ CFG_VALGRIND += --tool=helgrind
57
+ else
58
+ CFG_VALGRIND += --tool=memcheck \
59
+ --leak-check=full
60
+ endif
61
+ endif
62
+
63
+ ifneq ($(findstring linux,$(CFG_OSTYPE ) ) ,)
64
+ # -znoexecstack is here because librt is for some reason being created
65
+ # with executable stack and Fedora (or SELinux) doesn't like that (#798)
66
+ ifdef CFG_PERF
67
+ ifneq ($(CFG_PERF_WITH_LOGFD),)
68
+ CFG_PERF_TOOL := $(CFG_PERF ) stat -r 3 --log-fd 2
69
+ else
70
+ CFG_PERF_TOOL := $(CFG_PERF ) stat -r 3
71
+ endif
72
+ else
73
+ ifdef CFG_VALGRIND
74
+ CFG_PERF_TOOL :=\
75
+ $(CFG_VALGRIND ) --tool=cachegrind --cache-sim=yes --branch-sim=yes
76
+ else
77
+ CFG_PERF_TOOL := /usr/bin/time --verbose
78
+ endif
79
+ endif
80
+ endif
81
+
82
+ # These flags will cause the compiler to produce a .d file
83
+ # next to the .o file that lists header deps.
84
+ CFG_DEPEND_FLAGS = -MMD -MP -MT $(1 ) -MF $(1:%.o=%.d )
85
+
86
+ AR := ar
87
+
88
+ CFG_INFO := $(info cfg: using $(CFG_C_COMPILER ) )
89
+ ifeq ($(CFG_C_COMPILER ) ,clang)
90
+ ifeq ($(origin CC),default)
91
+ CC =clang
92
+ endif
93
+ ifeq ($(origin CXX),default)
94
+ CXX =clang++
95
+ endif
96
+ ifeq ($(origin CPP),default)
97
+ CPP =clang
98
+ endif
99
+ else
100
+ ifeq ($(CFG_C_COMPILER ) ,gcc)
101
+ ifeq ($(origin CC),default)
102
+ CC =gcc
103
+ endif
104
+ ifeq ($(origin CXX),default)
105
+ CXX =g++
106
+ endif
107
+ ifeq ($(origin CPP),default)
108
+ CPP =gcc
109
+ endif
110
+ else
111
+ CFG_ERR := $(error please try on a system with gcc or clang)
112
+ endif
113
+ endif
114
+
115
+
39
116
# x86_64-unknown-linux-gnu configuration
117
+ CC_x86_64-unknown-linux-gnu =$(CC )
118
+ CXX_x86_64-unknown-linux-gnu =$(CXX )
119
+ CPP_x86_64-unknown-linux-gnu =$(CPP )
120
+ AR_x86_64-unknown-linux-gnu =$(AR )
40
121
CFG_LIB_NAME_x86_64-unknown-linux-gnu =lib$(1 ) .so
41
122
CFG_LIB_GLOB_x86_64-unknown-linux-gnu =lib$(1 ) -*.so
42
123
CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu =lib$(1 ) -*.dylib.dSYM
@@ -59,6 +140,10 @@ CFG_RUN_x86_64-unknown-linux-gnu=$(2)
59
140
CFG_RUN_TARG_x86_64-unknown-linux-gnu =$(call CFG_RUN_x86_64-unknown-linux-gnu,,$(2 ) )
60
141
61
142
# i686-unknown-linux-gnu configuration
143
+ CC_i686-unknown-linux-gnu =$(CC )
144
+ CXX_i686-unknown-linux-gnu =$(CXX )
145
+ CPP_i686-unknown-linux-gnu =$(CPP )
146
+ AR_i686-unknown-linux-gnu =$(AR )
62
147
CFG_LIB_NAME_i686-unknown-linux-gnu =lib$(1 ) .so
63
148
CFG_LIB_GLOB_i686-unknown-linux-gnu =lib$(1 ) -*.so
64
149
CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu =lib$(1 ) -*.dylib.dSYM
@@ -81,6 +166,10 @@ CFG_RUN_i686-unknown-linux-gnu=$(2)
81
166
CFG_RUN_TARG_i686-unknown-linux-gnu =$(call CFG_RUN_i686-unknown-linux-gnu,,$(2 ) )
82
167
83
168
# x86_64-apple-darwin configuration
169
+ CC_x86_64-apple-darwin =$(CC )
170
+ CXX_x86_64-apple-darwin =$(CXX )
171
+ CPP_x86_64-apple-darwin =$(CPP )
172
+ AR_x86_64-apple-darwin =$(AR )
84
173
CFG_LIB_NAME_x86_64-apple-darwin =lib$(1 ) .dylib
85
174
CFG_LIB_GLOB_x86_64-apple-darwin =lib$(1 ) -*.dylib
86
175
CFG_LIB_DSYM_GLOB_x86_64-apple-darwin =lib$(1 ) -*.dylib.dSYM
@@ -102,6 +191,10 @@ CFG_RUN_x86_64-apple-darwin=$(2)
102
191
CFG_RUN_TARG_x86_64-apple-darwin =$(call CFG_RUN_x86_64-apple-darwin,,$(2 ) )
103
192
104
193
# i686-apple-darwin configuration
194
+ CC_i686-apple-darwin =$(CC )
195
+ CXX_i686-apple-darwin =$(CXX )
196
+ CPP_i686-apple-darwin =$(CPP )
197
+ AR_i686-apple-darwin =$(AR )
105
198
CFG_LIB_NAME_i686-apple-darwin =lib$(1 ) .dylib
106
199
CFG_LIB_GLOB_i686-apple-darwin =lib$(1 ) -*.dylib
107
200
CFG_LIB_DSYM_GLOB_i686-apple-darwin =lib$(1 ) -*.dylib.dSYM
@@ -123,6 +216,10 @@ CFG_RUN_i686-apple-darwin=$(2)
123
216
CFG_RUN_TARG_i686-apple-darwin =$(call CFG_RUN_i686-apple-darwin,,$(2 ) )
124
217
125
218
# arm-unknown-android configuration
219
+ CC_arm-unknown-android =$(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-gcc
220
+ CXX_arm-unknown-android =$(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-g++
221
+ CPP_arm-unknown-android =$(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-gcc -E
222
+ AR_arm-unknown-android =$(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-ar
126
223
CFG_LIB_NAME_arm-unknown-android =lib$(1 ) .so
127
224
CFG_LIB_GLOB_arm-unknown-android =lib$(1 ) -*.so
128
225
CFG_LIB_DSYM_GLOB_arm-unknown-android =lib$(1 ) -*.dylib.dSYM
@@ -135,7 +232,6 @@ CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-android := -Wl,-no-whole-archive -Wl,-znoe
135
232
CFG_DEF_SUFFIX_arm-unknown-android := .android.def
136
233
CFG_INSTALL_NAME_arm-unknown-android =
137
234
CFG_LIBUV_LINK_FLAGS_arm-unknown-android =
138
- CFG_GCCISH_CROSS_PREFIX_arm-unknown-android = $(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-
139
235
CFG_EXE_SUFFIX_arm-unknown-android :=
140
236
CFG_WINDOWSY_arm-unknown-android :=
141
237
CFG_UNIXY_arm-unknown-android := 1
@@ -146,6 +242,10 @@ CFG_RUN_TARG_arm-unknown-android=
146
242
RUSTC_FLAGS_arm-unknown-android :=--android-cross-path='$(CFG_ANDROID_CROSS_PATH ) '
147
243
148
244
# i686-pc-mingw32 configuration
245
+ CC_i686-pc-mingw32 =$(CC )
246
+ CXX_i686-pc-mingw32 =$(CXX )
247
+ CPP_i686-pc-mingw32 =$(CPP )
248
+ AR_i686-pc-mingw32 =$(AR )
149
249
CFG_LIB_NAME_i686-pc-mingw32 =$(1 ) .dll
150
250
CFG_LIB_GLOB_i686-pc-mingw32 =$(1 ) -*.dll
151
251
CFG_LIB_DSYM_GLOB_i686-pc-mingw32 =$(1 ) -*.dylib.dSYM
@@ -167,6 +267,10 @@ CFG_RUN_i686-pc-mingw32=PATH="$(CFG_LDPATH_i686-pc-mingw32):$(1)" $(2)
167
267
CFG_RUN_TARG_i686-pc-mingw32 =$(call CFG_RUN_i686-pc-mingw32,$(HLIB$(1 ) _H_$(CFG_BUILD_TRIPLE ) ) ,$(2 ) )
168
268
169
269
# i586-mingw32msvc configuration
270
+ CC_i586-mingw32msvc =$(CC )
271
+ CXX_i586-mingw32msvc =$(CXX )
272
+ CPP_i586-mingw32msvc =$(CPP )
273
+ AR_i586-mingw32msvc =$(AR )
170
274
CFG_LIB_NAME_i586-mingw32msvc =$(1 ) .dll
171
275
CFG_LIB_GLOB_i586-mingw32msvc =$(1 ) -*.dll
172
276
CFG_LIB_DSYM_GLOB_i586-mingw32msvc =$(1 ) -*.dylib.dSYM
@@ -179,7 +283,6 @@ CFG_GCCISH_POST_LIB_FLAGS_i586-mingw32msvc :=
179
283
CFG_DEF_SUFFIX_i586-mingw32msvc := .mingw32.def
180
284
CFG_INSTALL_NAME_i586-mingw32msvc =
181
285
CFG_LIBUV_LINK_FLAGS_i586-mingw32msvc := -lWs2_32 -lpsapi -liphlpapi
182
- CFG_GCCISH_CROSS_PREFIX_i586-mingw32msvc = $(CFG_MIGW32_CROSS_PATH ) /bin/i586-mingw32msvc-
183
286
CFG_EXE_SUFFIX_i586-mingw32msvc := .exe
184
287
CFG_WINDOWSY_i586-mingw32msvc := 1
185
288
CFG_UNIXY_i586-mingw32msvc :=
@@ -191,6 +294,10 @@ CFG_RUN_i586-mingw32msvc=
191
294
CFG_RUN_TARG_i586-mingw32msvc =
192
295
193
296
# x86_64-unknown-freebsd configuration
297
+ CC_x86_64-unknown-freebsd =$(CC )
298
+ CXX_x86_64-unknown-freebsd =$(CXX )
299
+ CPP_x86_64-unknown-freebsd =$(CPP )
300
+ AR_x86_64-unknown-freebsd =$(AR )
194
301
CFG_LIB_NAME_x86_64-unknown-freebsd =lib$(1 ) .so
195
302
CFG_LIB_GLOB_x86_64-unknown-freebsd =lib$(1 ) -*.so
196
303
CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd =$(1 ) -*.dylib.dSYM
@@ -210,166 +317,50 @@ CFG_LDPATH_x86_64-unknown-freebsd :=
210
317
CFG_RUN_x86_64-unknown-freebsd =$(2 )
211
318
CFG_RUN_TARG_x86_64-unknown-freebsd =$(call CFG_RUN_x86_64-unknown-freebsd,,$(2 ) )
212
319
213
- # Hack: not sure how to test if a file exists in make other than this
214
- OS_SUPP = $(patsubst % ,--suppressions=% ,\
215
- $(wildcard $(CFG_SRC_DIR ) src/etc/$(CFG_OSTYPE ) .supp* ) )
216
-
217
- ifdef CFG_DISABLE_OPTIMIZE_CXX
218
- $(info cfg : disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
219
- CFG_GCCISH_CFLAGS += -O0
220
- else
221
- CFG_GCCISH_CFLAGS += -O2
222
- endif
223
320
224
- ifdef CFG_VALGRIND
225
- CFG_VALGRIND += --error-exitcode=100 \
226
- --quiet \
227
- --suppressions=$(CFG_SRC_DIR ) src/etc/x86.supp \
228
- $(OS_SUPP )
229
- ifdef CFG_ENABLE_HELGRIND
230
- CFG_VALGRIND += --tool=helgrind
231
- else
232
- CFG_VALGRIND += --tool=memcheck \
233
- --leak-check=full
234
- endif
235
- endif
236
-
237
- ifneq ($(findstring linux,$(CFG_OSTYPE ) ) ,)
238
- # -znoexecstack is here because librt is for some reason being created
239
- # with executable stack and Fedora (or SELinux) doesn't like that (#798)
240
- ifdef CFG_PERF
241
- ifneq ($(CFG_PERF_WITH_LOGFD),)
242
- CFG_PERF_TOOL := $(CFG_PERF ) stat -r 3 --log-fd 2
243
- else
244
- CFG_PERF_TOOL := $(CFG_PERF ) stat -r 3
245
- endif
246
- else
247
- ifdef CFG_VALGRIND
248
- CFG_PERF_TOOL :=\
249
- $(CFG_VALGRIND ) --tool=cachegrind --cache-sim=yes --branch-sim=yes
250
- else
251
- CFG_PERF_TOOL := /usr/bin/time --verbose
252
- endif
253
- endif
254
- endif
255
-
256
- CFG_INFO := $(info cfg: using $(CFG_C_COMPILER ) )
257
- ifeq ($(CFG_C_COMPILER ) ,clang)
258
- ifeq ($(origin CC),default)
259
- CC =clang
260
- endif
261
- ifeq ($(origin CXX),default)
262
- CXX =clang++
263
- endif
264
- ifeq ($(origin CPP),default)
265
- CPP =clang
266
- endif
267
- CFG_GCCISH_CFLAGS +=
268
- CFG_GCCISH_CXXFLAGS +=
269
- CFG_GCCISH_LINK_FLAGS +=
270
- # These flags will cause the compiler to produce a .d file
271
- # next to the .o file that lists header deps.
272
- CFG_DEPEND_FLAGS = -MMD -MP -MT $(1 ) -MF $(1:%.o=%.d )
273
-
274
- else
275
- ifeq ($(CFG_C_COMPILER ) ,gcc)
276
- ifeq ($(origin CC),default)
277
- CC =gcc
278
- endif
279
- ifeq ($(origin CXX),default)
280
- CXX =g++
281
- endif
282
- ifeq ($(origin CPP),default)
283
- CPP =gcc
284
- endif
285
- CFG_GCCISH_CFLAGS +=
286
- CFG_GCCISH_CXXFLAGS +=
287
- CFG_GCCISH_LINK_FLAGS +=
288
- # These flags will cause the compiler to produce a .d file
289
- # next to the .o file that lists header deps.
290
- CFG_DEPEND_FLAGS = -MMD -MP -MT $(1 ) -MF $(1:%.o=%.d )
291
-
292
- else
293
- CFG_ERR := $(error please try on a system with gcc or clang)
294
- endif
295
- endif
296
-
297
- define CFG_MAKE_CC
298
- ifeq ($$(CFG_BUILD_TRIPLE ) ,$(1 ) )
299
-
300
- CFG_COMPILE_C_$(1 ) = $$(CC ) \
301
- $$(CFG_GCCISH_CFLAGS ) \
302
- $$(CFG_GCCISH_CFLAGS_$(1 ) ) \
303
- $$(CFG_DEPEND_FLAGS ) \
304
- -c -o $$(1 ) $$(2 )
305
- CFG_LINK_C_$(1 ) = $$(CC ) \
306
- $$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
307
- $$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) ) \
308
- $$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
309
- $$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
310
- CFG_COMPILE_CXX_$(1 ) = $$(CXX ) \
321
+ define CFG_MAKE_TOOLCHAIN
322
+ CFG_COMPILE_C_$(1 ) = $$(CC_$(1 ) ) \
311
323
$$(CFG_GCCISH_CFLAGS ) \
312
- $$(CFG_GCCISH_CXXFLAGS ) \
313
324
$$(CFG_GCCISH_CFLAGS_$(1 ) ) \
314
- $$(CFG_GCCISH_CXXFLAGS_$(1 ) ) \
315
325
$$(CFG_DEPEND_FLAGS ) \
316
326
-c -o $$(1 ) $$(2 )
317
- CFG_LINK_CXX_$(1 ) = $$(CXX ) \
318
- $$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
319
- $$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) \
320
- $$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
321
- $$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
322
-
323
- else
324
-
325
- CFG_COMPILE_C_$(1 ) = $(CFG_GCCISH_CROSS_PREFIX_$(1 ) )$$(CC ) \
326
- $$(CFG_GCCISH_CFLAGS ) \
327
- $$(CFG_GCCISH_CFLAGS_$(1 ) ) \
328
- $$(CFG_DEPEND_FLAGS ) \
329
- -c -o $$(1 ) $$(2 )
330
- CFG_LINK_C_$(1 ) = $(CFG_GCCISH_CROSS_PREFIX_$(1 ) )$$(CC ) \
327
+ CFG_LINK_C_$(1 ) = $$(CC_$(1 ) ) \
331
328
$$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
332
329
$$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) ) \
333
330
$$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
334
331
$$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
335
- CFG_COMPILE_CXX_$(1 ) = $( CFG_GCCISH_CROSS_PREFIX_ $(1 ) )$$( CXX ) \
332
+ CFG_COMPILE_CXX_$(1 ) = $$( CXX_ $(1 ) ) \
336
333
$$(CFG_GCCISH_CFLAGS ) \
337
334
$$(CFG_GCCISH_CXXFLAGS ) \
338
335
$$(CFG_GCCISH_CFLAGS_$(1 ) ) \
339
336
$$(CFG_GCCISH_CXXFLAGS_$(1 ) ) \
340
337
$$(CFG_DEPEND_FLAGS ) \
341
338
-c -o $$(1 ) $$(2 )
342
- CFG_LINK_CXX_$(1 ) = $( CFG_GCCISH_CROSS_PREFIX_ $(1 ) )$$( CXX ) \
339
+ CFG_LINK_CXX_$(1 ) = $$( CXX_ $(1 ) ) \
343
340
$$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
344
341
$$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) \
345
342
$$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
346
343
$$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
347
344
348
- endif
349
-
350
- endef
351
-
352
- $(foreach target,$(CFG_TARGET_TRIPLES), \
353
- $(eval $(call CFG_MAKE_CC,$(target))))
354
-
355
- # We're using llvm-mc as our assembler because it supports
356
- # .cfi pseudo-ops on mac
357
- define CFG_MAKE_ASSEMBLER
358
- ifeq ($$(CFG_BUILD_TRIPLE ) ,$(1 ) )
345
+ ifneq ($(1 ) ,arm-unknown-android)
359
346
360
- CFG_ASSEMBLE_$(1 ) =$$(CPP ) -E $$(CFG_DEPEND_FLAGS ) $$(2 ) | \
347
+ # We're using llvm-mc as our assembler because it supports
348
+ # .cfi pseudo-ops on mac
349
+ CFG_ASSEMBLE_$(1 ) =$$(CPP_$(1 ) ) -E $$(CFG_DEPEND_FLAGS ) $$(2 ) | \
361
350
$$(LLVM_MC_$$(CFG_BUILD_TRIPLE ) ) \
362
351
-assemble \
363
352
-filetype=obj \
364
353
-triple=$(1 ) \
365
354
-o=$$(1 )
366
355
else
367
356
368
- CFG_ASSEMBLE_$(1 ) =$(CFG_GCCISH_CROSS_PREFIX_$(1 ) )$$(CPP ) $$(CFG_DEPEND_FLAGS ) $$(2 ) -c -o $$(1 )
357
+ # For the Android cross, use the Android assembler
358
+ # XXX: We should be able to use the LLVM assembler
359
+ CFG_ASSEMBLE_$(1 ) =$$(CXX_$(1 ) ) $$(CFG_DEPEND_FLAGS ) $$(2 ) -c -o $$(1 )
369
360
370
361
endif
371
362
372
363
endef
373
364
374
365
$(foreach target,$(CFG_TARGET_TRIPLES),\
375
- $(eval $(call CFG_MAKE_ASSEMBLER ,$(target))))
366
+ $(eval $(call CFG_MAKE_TOOLCHAIN ,$(target))))
0 commit comments