@@ -36,7 +36,88 @@ CFG_GCCISH_CFLAGS += -fno-omit-frame-pointer
3636# embedded into the executable, so use a no-op command.
3737CFG_DSYMUTIL := true
3838
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+
39116# 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 )
40121CFG_LIB_NAME_x86_64-unknown-linux-gnu =lib$(1 ) .so
41122CFG_LIB_GLOB_x86_64-unknown-linux-gnu =lib$(1 ) -*.so
42123CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu =lib$(1 ) -*.dylib.dSYM
@@ -59,6 +140,10 @@ CFG_RUN_x86_64-unknown-linux-gnu=$(2)
59140CFG_RUN_TARG_x86_64-unknown-linux-gnu =$(call CFG_RUN_x86_64-unknown-linux-gnu,,$(2 ) )
60141
61142# 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 )
62147CFG_LIB_NAME_i686-unknown-linux-gnu =lib$(1 ) .so
63148CFG_LIB_GLOB_i686-unknown-linux-gnu =lib$(1 ) -*.so
64149CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu =lib$(1 ) -*.dylib.dSYM
@@ -81,6 +166,10 @@ CFG_RUN_i686-unknown-linux-gnu=$(2)
81166CFG_RUN_TARG_i686-unknown-linux-gnu =$(call CFG_RUN_i686-unknown-linux-gnu,,$(2 ) )
82167
83168# 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 )
84173CFG_LIB_NAME_x86_64-apple-darwin =lib$(1 ) .dylib
85174CFG_LIB_GLOB_x86_64-apple-darwin =lib$(1 ) -*.dylib
86175CFG_LIB_DSYM_GLOB_x86_64-apple-darwin =lib$(1 ) -*.dylib.dSYM
@@ -102,6 +191,10 @@ CFG_RUN_x86_64-apple-darwin=$(2)
102191CFG_RUN_TARG_x86_64-apple-darwin =$(call CFG_RUN_x86_64-apple-darwin,,$(2 ) )
103192
104193# 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 )
105198CFG_LIB_NAME_i686-apple-darwin =lib$(1 ) .dylib
106199CFG_LIB_GLOB_i686-apple-darwin =lib$(1 ) -*.dylib
107200CFG_LIB_DSYM_GLOB_i686-apple-darwin =lib$(1 ) -*.dylib.dSYM
@@ -123,6 +216,10 @@ CFG_RUN_i686-apple-darwin=$(2)
123216CFG_RUN_TARG_i686-apple-darwin =$(call CFG_RUN_i686-apple-darwin,,$(2 ) )
124217
125218# 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
126223CFG_LIB_NAME_arm-unknown-android =lib$(1 ) .so
127224CFG_LIB_GLOB_arm-unknown-android =lib$(1 ) -*.so
128225CFG_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
135232CFG_DEF_SUFFIX_arm-unknown-android := .android.def
136233CFG_INSTALL_NAME_arm-unknown-android =
137234CFG_LIBUV_LINK_FLAGS_arm-unknown-android =
138- CFG_GCCISH_CROSS_PREFIX_arm-unknown-android = $(CFG_ANDROID_CROSS_PATH ) /bin/arm-linux-androideabi-
139235CFG_EXE_SUFFIX_arm-unknown-android :=
140236CFG_WINDOWSY_arm-unknown-android :=
141237CFG_UNIXY_arm-unknown-android := 1
@@ -146,6 +242,10 @@ CFG_RUN_TARG_arm-unknown-android=
146242RUSTC_FLAGS_arm-unknown-android :=--android-cross-path='$(CFG_ANDROID_CROSS_PATH ) '
147243
148244# 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 )
149249CFG_LIB_NAME_i686-pc-mingw32 =$(1 ) .dll
150250CFG_LIB_GLOB_i686-pc-mingw32 =$(1 ) -*.dll
151251CFG_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)
167267CFG_RUN_TARG_i686-pc-mingw32 =$(call CFG_RUN_i686-pc-mingw32,$(HLIB$(1 ) _H_$(CFG_BUILD_TRIPLE ) ) ,$(2 ) )
168268
169269# i586-mingw32msvc configuration
270+ CC_i586-mingw32msvc =$(CC )
271+ CXX_i586-mingw32msvc =$(CXX )
272+ CPP_i586-mingw32msvc =$(CPP )
273+ AR_i586-mingw32msvc =$(AR )
170274CFG_LIB_NAME_i586-mingw32msvc =$(1 ) .dll
171275CFG_LIB_GLOB_i586-mingw32msvc =$(1 ) -*.dll
172276CFG_LIB_DSYM_GLOB_i586-mingw32msvc =$(1 ) -*.dylib.dSYM
@@ -179,7 +283,6 @@ CFG_GCCISH_POST_LIB_FLAGS_i586-mingw32msvc :=
179283CFG_DEF_SUFFIX_i586-mingw32msvc := .mingw32.def
180284CFG_INSTALL_NAME_i586-mingw32msvc =
181285CFG_LIBUV_LINK_FLAGS_i586-mingw32msvc := -lWs2_32 -lpsapi -liphlpapi
182- CFG_GCCISH_CROSS_PREFIX_i586-mingw32msvc = $(CFG_MIGW32_CROSS_PATH ) /bin/i586-mingw32msvc-
183286CFG_EXE_SUFFIX_i586-mingw32msvc := .exe
184287CFG_WINDOWSY_i586-mingw32msvc := 1
185288CFG_UNIXY_i586-mingw32msvc :=
@@ -191,6 +294,10 @@ CFG_RUN_i586-mingw32msvc=
191294CFG_RUN_TARG_i586-mingw32msvc =
192295
193296# 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 )
194301CFG_LIB_NAME_x86_64-unknown-freebsd =lib$(1 ) .so
195302CFG_LIB_GLOB_x86_64-unknown-freebsd =lib$(1 ) -*.so
196303CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd =$(1 ) -*.dylib.dSYM
@@ -210,166 +317,50 @@ CFG_LDPATH_x86_64-unknown-freebsd :=
210317CFG_RUN_x86_64-unknown-freebsd =$(2 )
211318CFG_RUN_TARG_x86_64-unknown-freebsd =$(call CFG_RUN_x86_64-unknown-freebsd,,$(2 ) )
212319
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
223320
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 ) ) \
311323 $$(CFG_GCCISH_CFLAGS ) \
312- $$(CFG_GCCISH_CXXFLAGS ) \
313324 $$(CFG_GCCISH_CFLAGS_$(1 ) ) \
314- $$(CFG_GCCISH_CXXFLAGS_$(1 ) ) \
315325 $$(CFG_DEPEND_FLAGS ) \
316326 -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 ) ) \
331328 $$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
332329 $$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) ) \
333330 $$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
334331 $$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
335- CFG_COMPILE_CXX_$(1 ) = $( CFG_GCCISH_CROSS_PREFIX_ $(1 ) )$$( CXX ) \
332+ CFG_COMPILE_CXX_$(1 ) = $$( CXX_ $(1 ) ) \
336333 $$(CFG_GCCISH_CFLAGS ) \
337334 $$(CFG_GCCISH_CXXFLAGS ) \
338335 $$(CFG_GCCISH_CFLAGS_$(1 ) ) \
339336 $$(CFG_GCCISH_CXXFLAGS_$(1 ) ) \
340337 $$(CFG_DEPEND_FLAGS ) \
341338 -c -o $$(1 ) $$(2 )
342- CFG_LINK_CXX_$(1 ) = $( CFG_GCCISH_CROSS_PREFIX_ $(1 ) )$$( CXX ) \
339+ CFG_LINK_CXX_$(1 ) = $$( CXX_ $(1 ) ) \
343340 $$(CFG_GCCISH_LINK_FLAGS ) -o $$(1 ) \
344341 $$(CFG_GCCISH_LINK_FLAGS_$(1 ) ) \
345342 $$(CFG_GCCISH_DEF_FLAG_$(1 ) )$$(3 ) $$(2 ) \
346343 $$(call CFG_INSTALL_NAME_$(1 ) ,$$(4 ) )
347344
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)
359346
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 ) | \
361350 $$(LLVM_MC_$$(CFG_BUILD_TRIPLE ) ) \
362351 -assemble \
363352 -filetype=obj \
364353 -triple=$(1 ) \
365354 -o=$$(1 )
366355 else
367356
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 )
369360
370361 endif
371362
372363endef
373364
374365$(foreach target,$(CFG_TARGET_TRIPLES),\
375- $(eval $(call CFG_MAKE_ASSEMBLER ,$(target))))
366+ $(eval $(call CFG_MAKE_TOOLCHAIN ,$(target))))
0 commit comments