1 # Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 # file at the top-level directory of this distribution and at
3 # http://rust-lang.org/COPYRIGHT.
5 # Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 # http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 # <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 # option. This file may not be copied, modified, or distributed
9 # except according to those terms.
12 # Create variables HOST_<triple> containing the host part
13 # of each target triple. For example, the triple i686-darwin-macos
14 # would create a variable HOST_i686-darwin-macos with the value
17 HOST_$(1) = $(subst i686,i386,$(word 1,$(subst -, ,$(1))))
19 $(foreach t,$(CFG_TARGET),$(eval $(call DEF_HOST_VAR,$(t))))
20 $(foreach t,$(CFG_TARGET),$(info cfg: host for $(t) is $(HOST_$(t))))
24 OSTYPE_$(1) = $(subst $(firstword $(subst -, ,$(1)))-,,$(1))
26 $(foreach t,$(CFG_TARGET),$(eval $(call DEF_OSTYPE_VAR,$(t))))
27 $(foreach t,$(CFG_TARGET),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
29 # On Darwin, we need to run dsymutil so the debugging information ends
30 # up in the right place. On other platforms, it automatically gets
31 # embedded into the executable, so use a no-op command.
34 # Hack: not sure how to test if a file exists in make other than this
35 OS_SUPP = $(patsubst %,--suppressions=%,\
36 $(wildcard $(CFG_SRC_DIR)src/etc/$(CFG_OSTYPE).supp*))
38 ifdef CFG_DISABLE_OPTIMIZE_CXX
39 $(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
40 CFG_GCCISH_CFLAGS += -O0
42 CFG_GCCISH_CFLAGS += -O2
45 # The soname thing is for supporting a statically linked jemalloc.
46 # see https://blog.mozilla.org/jseward/2012/06/05/valgrind-now-supports-jemalloc-builds-directly/
48 CFG_VALGRIND += --error-exitcode=100 \
49 --soname-synonyms=somalloc=NONE \
51 --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp \
53 ifdef CFG_ENABLE_HELGRIND
54 CFG_VALGRIND += --tool=helgrind
56 CFG_VALGRIND += --tool=memcheck \
61 ifneq ($(findstring linux,$(CFG_OSTYPE)),)
63 ifneq ($(CFG_PERF_WITH_LOGFD),)
64 CFG_PERF_TOOL := $(CFG_PERF) stat -r 3 --log-fd 2
66 CFG_PERF_TOOL := $(CFG_PERF) stat -r 3
71 $(CFG_VALGRIND) --tool=cachegrind --cache-sim=yes --branch-sim=yes
73 CFG_PERF_TOOL := /usr/bin/time --verbose
78 # These flags will cause the compiler to produce a .d file
79 # next to the .o file that lists header deps.
80 CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
86 ifeq ($(origin $(1)),undefined)
87 $$(info cfg: using $(1)=$(CFG_$(1)) (CFG_$(1)))
90 ifeq ($(origin $(1)),default)
91 $$(info cfg: using $(1)=$(CFG_$(1)) (CFG_$(1)))
97 $(foreach cvar,CC CXX CPP CFLAGS CXXFLAGS CPPFLAGS,\
98 $(eval $(call SET_FROM_CFG,$(cvar))))
100 CFG_RLIB_GLOB=lib$(1)-*.rlib
102 # x86_64-unknown-linux-gnu configuration
103 CC_x86_64-unknown-linux-gnu=$(CC)
104 CXX_x86_64-unknown-linux-gnu=$(CXX)
105 CPP_x86_64-unknown-linux-gnu=$(CPP)
106 AR_x86_64-unknown-linux-gnu=$(AR)
107 CFG_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).so
108 CFG_STATIC_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).a
109 CFG_LIB_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.so
110 CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
111 CFG_CFLAGS_x86_64-unknown-linux-gnu := -m64
112 CFG_GCCISH_CFLAGS_x86_64-unknown-linux-gnu := -Wall -Werror -g -fPIC -m64
113 CFG_GCCISH_CXXFLAGS_x86_64-unknown-linux-gnu := -fno-rtti
114 CFG_GCCISH_LINK_FLAGS_x86_64-unknown-linux-gnu := -shared -fPIC -ldl -pthread -lrt -g -m64
115 CFG_GCCISH_DEF_FLAG_x86_64-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
116 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-whole-archive
117 CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-no-whole-archive
118 CFG_DEF_SUFFIX_x86_64-unknown-linux-gnu := .linux.def
119 CFG_LLC_FLAGS_x86_64-unknown-linux-gnu :=
120 CFG_INSTALL_NAME_x86_64-unknown-linux-gnu =
121 CFG_LIBUV_LINK_FLAGS_x86_64-unknown-linux-gnu =
122 CFG_EXE_SUFFIX_x86_64-unknown-linux-gnu =
123 CFG_WINDOWSY_x86_64-unknown-linux-gnu :=
124 CFG_UNIXY_x86_64-unknown-linux-gnu := 1
125 CFG_PATH_MUNGE_x86_64-unknown-linux-gnu := true
126 CFG_LDPATH_x86_64-unknown-linux-gnu :=
127 CFG_RUN_x86_64-unknown-linux-gnu=$(2)
128 CFG_RUN_TARG_x86_64-unknown-linux-gnu=$(call CFG_RUN_x86_64-unknown-linux-gnu,,$(2))
130 # i686-unknown-linux-gnu configuration
131 CC_i686-unknown-linux-gnu=$(CC)
132 CXX_i686-unknown-linux-gnu=$(CXX)
133 CPP_i686-unknown-linux-gnu=$(CPP)
134 AR_i686-unknown-linux-gnu=$(AR)
135 CFG_LIB_NAME_i686-unknown-linux-gnu=lib$(1).so
136 CFG_STATIC_LIB_NAME_i686-unknown-linux-gnu=lib$(1).a
137 CFG_LIB_GLOB_i686-unknown-linux-gnu=lib$(1)-*.so
138 CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
139 CFG_CFLAGS_i686-unknown-linux-gnu := -m32 $(CFLAGS)
140 CFG_GCCISH_CFLAGS_i686-unknown-linux-gnu := -Wall -Werror -g -fPIC -m32 $(CFLAGS)
141 CFG_GCCISH_CXXFLAGS_i686-unknown-linux-gnu := -fno-rtti $(CXXFLAGS)
142 CFG_GCCISH_LINK_FLAGS_i686-unknown-linux-gnu := -shared -fPIC -ldl -pthread -lrt -g -m32
143 CFG_GCCISH_DEF_FLAG_i686-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
144 CFG_GCCISH_PRE_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-whole-archive
145 CFG_GCCISH_POST_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-no-whole-archive
146 CFG_DEF_SUFFIX_i686-unknown-linux-gnu := .linux.def
147 CFG_LLC_FLAGS_i686-unknown-linux-gnu :=
148 CFG_INSTALL_NAME_i686-unknown-linux-gnu =
149 CFG_LIBUV_LINK_FLAGS_i686-unknown-linux-gnu =
150 CFG_EXE_SUFFIX_i686-unknown-linux-gnu =
151 CFG_WINDOWSY_i686-unknown-linux-gnu :=
152 CFG_UNIXY_i686-unknown-linux-gnu := 1
153 CFG_PATH_MUNGE_i686-unknown-linux-gnu := true
154 CFG_LDPATH_i686-unknown-linux-gnu :=
155 CFG_RUN_i686-unknown-linux-gnu=$(2)
156 CFG_RUN_TARG_i686-unknown-linux-gnu=$(call CFG_RUN_i686-unknown-linux-gnu,,$(2))
158 # arm-apple-darwin configuration
159 ifeq ($(CFG_OSTYPE),apple-darwin)
160 CFG_IOS_SDK = $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
161 CFG_IOS_FLAGS = -target arm-apple-darwin -isysroot $(CFG_IOS_SDK) -I$(CFG_IOS_SDK)/usr/include -I$(CFG_IOS_SDK)/usr/include/c++/4.2.1
162 CC_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang)
163 CXX_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++)
164 CPP_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos clang++)
165 AR_arm-apple-darwin = $(shell xcrun -find -sdk iphoneos ar)
166 CFG_LIB_NAME_arm-apple-darwin = lib$(1).dylib
167 CFG_LIB_GLOB_arm-apple-darwin = lib$(1)-*.dylib
168 CFG_LIB_DSYM_GLOB_arm-apple-darwin = lib$(1)-*.dylib.dSYM
169 CFG_CFLAGS_arm-apple-darwin := $(CFG_IOS_FLAGS) $(CFLAGS)
170 CFG_GCCISH_CFLAGS_arm-apple-darwin := -Wall -Werror -g -fPIC $(CFG_IOS_FLAGS) $(CFLAGS)
171 CFG_GCCISH_CXXFLAGS_arm-apple-darwin := -fno-rtti $(CFG_IOS_FLAGS) $(CXXFLAGS)
172 CFG_GCCISH_LINK_FLAGS_arm-apple-darwin := -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind
173 CFG_GCCISH_DEF_FLAG_arm-apple-darwin := -Wl,-exported_symbols_list,
174 CFG_GCCISH_PRE_LIB_FLAGS_arm-apple-darwin :=
175 CFG_GCCISH_POST_LIB_FLAGS_arm-apple-darwin :=
176 CFG_DEF_SUFFIX_arm-apple-darwin := .darwin.def
177 CFG_LLC_FLAGS_arm-apple-darwin :=
178 CFG_INSTALL_NAME_arm-apple-darwin = -Wl,-install_name,@rpath/$(1)
179 CFG_LIBUV_LINK_FLAGS_arm-apple-darwin =
180 CFG_EXE_SUFFIX_arm-apple-darwin :=
181 CFG_WINDOWSY_arm-apple-darwin :=
182 CFG_UNIXY_arm-apple-darwin := 1
183 CFG_PATH_MUNGE_arm-apple-darwin := true
184 CFG_LDPATH_arm-apple-darwin :=
185 CFG_RUN_arm-apple-darwin = $(2)
186 CFG_RUN_TARG_arm-apple-darwin = $(call CFG_RUN_arm-apple-darwin,,$(2))
189 # x86_64-apple-darwin configuration
190 CC_x86_64-apple-darwin=$(CC)
191 CXX_x86_64-apple-darwin=$(CXX)
192 CPP_x86_64-apple-darwin=$(CPP)
193 AR_x86_64-apple-darwin=$(AR)
194 CFG_LIB_NAME_x86_64-apple-darwin=lib$(1).dylib
195 CFG_STATIC_LIB_NAME_x86_64-apple-darwin=lib$(1).a
196 CFG_LIB_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib
197 CFG_LIB_DSYM_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib.dSYM
198 CFG_CFLAGS_x86_64-apple-darwin := -m64 -arch x86_64 $(CFLAGS)
199 CFG_GCCISH_CFLAGS_x86_64-apple-darwin := -Wall -Werror -g -fPIC -m64 -arch x86_64 $(CFLAGS)
200 CFG_GCCISH_CXXFLAGS_x86_64-apple-darwin := -fno-rtti $(CXXFLAGS)
201 CFG_GCCISH_LINK_FLAGS_x86_64-apple-darwin := -dynamiclib -pthread -framework CoreServices -m64
202 CFG_GCCISH_DEF_FLAG_x86_64-apple-darwin := -Wl,-exported_symbols_list,
203 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-apple-darwin :=
204 CFG_GCCISH_POST_LIB_FLAGS_x86_64-apple-darwin :=
205 CFG_DEF_SUFFIX_x86_64-apple-darwin := .darwin.def
206 CFG_LLC_FLAGS_x86_64-apple-darwin :=
207 CFG_INSTALL_NAME_x86_64-apple-darwin = -Wl,-install_name,@rpath/$(1)
208 CFG_LIBUV_LINK_FLAGS_x86_64-apple-darwin =
209 CFG_EXE_SUFFIX_x86_64-apple-darwin :=
210 CFG_WINDOWSY_x86_64-apple-darwin :=
211 CFG_UNIXY_x86_64-apple-darwin := 1
212 CFG_PATH_MUNGE_x86_64-apple-darwin := true
213 CFG_LDPATH_x86_64-apple-darwin :=
214 CFG_RUN_x86_64-apple-darwin=$(2)
215 CFG_RUN_TARG_x86_64-apple-darwin=$(call CFG_RUN_x86_64-apple-darwin,,$(2))
217 # i686-apple-darwin configuration
218 CC_i686-apple-darwin=$(CC)
219 CXX_i686-apple-darwin=$(CXX)
220 CPP_i686-apple-darwin=$(CPP)
221 AR_i686-apple-darwin=$(AR)
222 CFG_LIB_NAME_i686-apple-darwin=lib$(1).dylib
223 CFG_STATIC_LIB_NAME_i686-apple-darwin=lib$(1).a
224 CFG_LIB_GLOB_i686-apple-darwin=lib$(1)-*.dylib
225 CFG_LIB_DSYM_GLOB_i686-apple-darwin=lib$(1)-*.dylib.dSYM
226 CFG_CFLAGS_i686-apple-darwin := -m32 -arch i386 $(CFLAGS)
227 CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -Werror -g -fPIC -m32 -arch i386 $(CFLAGS)
228 CFG_GCCISH_CXXFLAGS_i686-apple-darwin := -fno-rtti $(CXXFLAGS)
229 CFG_GCCISH_LINK_FLAGS_i686-apple-darwin := -dynamiclib -pthread -framework CoreServices -m32
230 CFG_GCCISH_DEF_FLAG_i686-apple-darwin := -Wl,-exported_symbols_list,
231 CFG_GCCISH_PRE_LIB_FLAGS_i686-apple-darwin :=
232 CFG_GCCISH_POST_LIB_FLAGS_i686-apple-darwin :=
233 CFG_DEF_SUFFIX_i686-apple-darwin := .darwin.def
234 CFG_LLC_FLAGS_i686-apple-darwin :=
235 CFG_INSTALL_NAME_i686-apple-darwin = -Wl,-install_name,@rpath/$(1)
236 CFG_LIBUV_LINK_FLAGS_i686-apple-darwin =
237 CFG_EXE_SUFFIX_i686-apple-darwin :=
238 CFG_WINDOWSY_i686-apple-darwin :=
239 CFG_UNIXY_i686-apple-darwin := 1
240 CFG_PATH_MUNGE_i686-apple-darwin := true
241 CFG_LDPATH_i686-apple-darwin :=
242 CFG_RUN_i686-apple-darwin=$(2)
243 CFG_RUN_TARG_i686-apple-darwin=$(call CFG_RUN_i686-apple-darwin,,$(2))
245 # arm-linux-androideabi configuration
246 CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
247 CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
248 CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E
249 AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
250 CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
251 CFG_STATIC_LIB_NAME_arm-linux-androideabi=lib$(1).a
252 CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so
253 CFG_LIB_DSYM_GLOB_arm-linux-androideabi=lib$(1)-*.dylib.dSYM
254 CFG_CFLAGS_arm-linux-androideabi := -D__arm__ -DANDROID -D__ANDROID__ $(CFLAGS)
255 CFG_GCCISH_CFLAGS_arm-linux-androideabi := -Wall -g -fPIC -D__arm__ -DANDROID -D__ANDROID__ $(CFLAGS)
256 CFG_GCCISH_CXXFLAGS_arm-linux-androideabi := -fno-rtti $(CXXFLAGS)
257 CFG_GCCISH_LINK_FLAGS_arm-linux-androideabi := -shared -fPIC -ldl -g -lm -lsupc++
258 CFG_GCCISH_DEF_FLAG_arm-linux-androideabi := -Wl,--export-dynamic,--dynamic-list=
259 CFG_GCCISH_PRE_LIB_FLAGS_arm-linux-androideabi := -Wl,-whole-archive
260 CFG_GCCISH_POST_LIB_FLAGS_arm-linux-androideabi := -Wl,-no-whole-archive
261 CFG_DEF_SUFFIX_arm-linux-androideabi := .android.def
262 CFG_LLC_FLAGS_arm-linux-androideabi :=
263 CFG_INSTALL_NAME_arm-linux-androideabi =
264 CFG_LIBUV_LINK_FLAGS_arm-linux-androideabi =
265 CFG_EXE_SUFFIX_arm-linux-androideabi :=
266 CFG_WINDOWSY_arm-linux-androideabi :=
267 CFG_UNIXY_arm-linux-androideabi := 1
268 CFG_PATH_MUNGE_arm-linux-androideabi := true
269 CFG_LDPATH_arm-linux-androideabi :=
270 CFG_RUN_arm-linux-androideabi=
271 CFG_RUN_TARG_arm-linux-androideabi=
272 RUSTC_FLAGS_arm-linux-androideabi :=
273 RUSTC_CROSS_FLAGS_arm-linux-androideabi :=
275 # arm-unknown-linux-gnueabihf configuration
276 CROSS_PREFIX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-
277 CC_arm-unknown-linux-gnueabihf=gcc
278 CXX_arm-unknown-linux-gnueabihf=g++
279 CPP_arm-unknown-linux-gnueabihf=gcc -E
280 AR_arm-unknown-linux-gnueabihf=ar
281 CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
282 CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).a
283 CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
284 CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.dylib.dSYM
285 CFG_CFLAGS_arm-unknown-linux-gnueabihf := -D__arm__ $(CFLAGS)
286 CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabihf := -Wall -g -fPIC -D__arm__ $(CFLAGS)
287 CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabihf := -fno-rtti $(CXXFLAGS)
288 CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabihf := -shared -fPIC -g
289 CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabihf := -Wl,--export-dynamic,--dynamic-list=
290 CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-whole-archive
291 CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-no-whole-archive
292 CFG_DEF_SUFFIX_arm-unknown-linux-gnueabihf := .linux.def
293 CFG_LLC_FLAGS_arm-unknown-linux-gnueabihf :=
294 CFG_INSTALL_NAME_ar,-unknown-linux-gnueabihf =
295 CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabihf =
296 CFG_EXE_SUFFIX_arm-unknown-linux-gnueabihf :=
297 CFG_WINDOWSY_arm-unknown-linux-gnueabihf :=
298 CFG_UNIXY_arm-unknown-linux-gnueabihf := 1
299 CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
300 CFG_LDPATH_arm-unknown-linux-gnueabihf :=
301 CFG_RUN_arm-unknown-linux-gnueabihf=$(2)
302 CFG_RUN_TARG_arm-unknown-linux-gnueabihf=$(call CFG_RUN_arm-unknown-linux-gnueabihf,,$(2))
303 RUSTC_FLAGS_arm-unknown-linux-gnueabihf := -C target-feature=+v6,+vfp2
304 RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabihf :=
306 # arm-unknown-linux-gnueabi configuration
307 CROSS_PREFIX_arm-unknown-linux-gnueabi=arm-linux-gnueabi-
308 CC_arm-unknown-linux-gnueabi=gcc
309 CXX_arm-unknown-linux-gnueabi=g++
310 CPP_arm-unknown-linux-gnueabi=gcc -E
311 AR_arm-unknown-linux-gnueabi=ar
312 CFG_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).so
313 CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).a
314 CFG_LIB_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.so
315 CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.dylib.dSYM
316 CFG_CFLAGS_arm-unknown-linux-gnueabi := -D__arm__ -mfpu=vfp $(CFLAGS)
317 CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabi := -Wall -g -fPIC -D__arm__ -mfpu=vfp $(CFLAGS)
318 CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabi := -fno-rtti $(CXXFLAGS)
319 CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabi := -shared -fPIC -g
320 CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabi := -Wl,--export-dynamic,--dynamic-list=
321 CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabi := -Wl,-whole-archive
322 CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabi := -Wl,-no-whole-archive
323 CFG_DEF_SUFFIX_arm-unknown-linux-gnueabi := .linux.def
324 CFG_LLC_FLAGS_arm-unknown-linux-gnueabi :=
325 CFG_INSTALL_NAME_arm-unknown-linux-gnueabi =
326 CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabi =
327 CFG_EXE_SUFFIX_arm-unknown-linux-gnueabi :=
328 CFG_WINDOWSY_arm-unknown-linux-gnueabi :=
329 CFG_UNIXY_arm-unknown-linux-gnueabi := 1
330 CFG_PATH_MUNGE_arm-unknown-linux-gnueabi := true
331 CFG_LDPATH_arm-unknown-linux-gnueabi :=
332 CFG_RUN_arm-unknown-linux-gnueabi=$(2)
333 CFG_RUN_TARG_arm-unknown-linux-gnueabi=$(call CFG_RUN_arm-unknown-linux-gnueabi,,$(2))
334 RUSTC_FLAGS_arm-unknown-linux-gnueabi :=
335 RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabi :=
337 # mips-unknown-linux-gnu configuration
338 CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
339 CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
340 CPP_mips-unknown-linux-gnu=mips-linux-gnu-gcc -E
341 AR_mips-unknown-linux-gnu=mips-linux-gnu-ar
342 CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so
343 CFG_STATIC_LIB_NAME_mips-unknown-linux-gnu=lib$(1).a
344 CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so
345 CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
346 CFG_CFLAGS_mips-unknown-linux-gnu := -mips32r2 -msoft-float -mabi=32 -mno-compact-eh $(CFLAGS)
347 CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh $(CFLAGS)
348 CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti $(CXXFLAGS)
349 CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-gnu := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32
350 CFG_GCCISH_DEF_FLAG_mips-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
351 CFG_GCCISH_PRE_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-whole-archive
352 CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive
353 CFG_DEF_SUFFIX_mips-unknown-linux-gnu := .linux.def
354 CFG_LLC_FLAGS_mips-unknown-linux-gnu :=
355 CFG_INSTALL_NAME_mips-unknown-linux-gnu =
356 CFG_LIBUV_LINK_FLAGS_mips-unknown-linux-gnu =
357 CFG_EXE_SUFFIX_mips-unknown-linux-gnu :=
358 CFG_WINDOWSY_mips-unknown-linux-gnu :=
359 CFG_UNIXY_mips-unknown-linux-gnu := 1
360 CFG_PATH_MUNGE_mips-unknown-linux-gnu := true
361 CFG_LDPATH_mips-unknown-linux-gnu :=
362 CFG_RUN_mips-unknown-linux-gnu=
363 CFG_RUN_TARG_mips-unknown-linux-gnu=
364 RUSTC_FLAGS_mips-unknown-linux-gnu := -C target-cpu=mips32r2 -C target-feature="+mips32r2,+o32" -C soft-float
366 # i686-pc-mingw32 configuration
367 CC_i686-pc-mingw32=$(CC)
368 CXX_i686-pc-mingw32=$(CXX)
369 CPP_i686-pc-mingw32=$(CPP)
370 AR_i686-pc-mingw32=$(AR)
371 CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
372 CFG_STATIC_LIB_NAME_i686-pc-mingw32=$(1).lib
373 CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
374 CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
375 CFG_CFLAGS_mips-i686-pc-mingw32 := -m32 -march=i686 -D_WIN32_WINNT=0x0600 $(CFLAGS)
376 CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600 -I$(CFG_SRC_DIR)src/etc/mingw-fix-include $(CFLAGS)
377 CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti $(CXXFLAGS)
378 CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g -m32
379 CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 :=
380 CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 :=
381 CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
382 CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
383 CFG_LLC_FLAGS_i686-pc-mingw32 :=
384 CFG_INSTALL_NAME_i686-pc-mingw32 =
385 CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lws2_32 -lpsapi -liphlpapi
386 CFG_LLVM_BUILD_ENV_i686-pc-mingw32 := CPATH=$(CFG_SRC_DIR)src/etc/mingw-fix-include
387 CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
388 CFG_WINDOWSY_i686-pc-mingw32 := 1
389 CFG_UNIXY_i686-pc-mingw32 :=
390 CFG_PATH_MUNGE_i686-pc-mingw32 :=
391 CFG_LDPATH_i686-pc-mingw32 :=$(CFG_LDPATH_i686-pc-mingw32):$(PATH)
392 CFG_RUN_i686-pc-mingw32=PATH="$(CFG_LDPATH_i686-pc-mingw32):$(1)" $(2)
393 CFG_RUN_TARG_i686-pc-mingw32=$(call CFG_RUN_i686-pc-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
395 # i586-mingw32msvc configuration
396 CC_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-gcc
397 CXX_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-g++
398 CPP_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-cpp
399 AR_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-ar
400 CFG_LIB_NAME_i586-mingw32msvc=$(1).dll
401 CFG_STATIC_LIB_NAME_i586-mingw32msvc=$(1).lib
402 CFG_LIB_GLOB_i586-mingw32msvc=$(1)-*.dll
403 CFG_LIB_DSYM_GLOB_i586-mingw32msvc=$(1)-*.dylib.dSYM
404 CFG_CFLAGS_i586-mingw32msvc := -march=i586 -m32 $(CFLAGS)
405 CFG_GCCISH_CFLAGS_i586-mingw32msvc := -Wall -Werror -g -march=i586 -m32 $(CFLAGS)
406 CFG_GCCISH_CXXFLAGS_i586-mingw32msvc := -fno-rtti $(CXXFLAGS)
407 CFG_GCCISH_LINK_FLAGS_i586-mingw32msvc := -shared -g -m32
408 CFG_GCCISH_DEF_FLAG_i586-mingw32msvc :=
409 CFG_GCCISH_PRE_LIB_FLAGS_i586-mingw32msvc :=
410 CFG_GCCISH_POST_LIB_FLAGS_i586-mingw32msvc :=
411 CFG_DEF_SUFFIX_i586-mingw32msvc := .mingw32.def
412 CFG_LLC_FLAGS_i586-mingw32msvc :=
413 CFG_INSTALL_NAME_i586-mingw32msvc =
414 CFG_LIBUV_LINK_FLAGS_i586-mingw32msvc := -L$(CFG_MINGW32_CROSS_PATH)/i586-mingw32msvc/lib -lws2_32 -lpsapi -liphlpapi
415 CFG_EXE_SUFFIX_i586-mingw32msvc := .exe
416 CFG_WINDOWSY_i586-mingw32msvc := 1
417 CFG_UNIXY_i586-mingw32msvc :=
418 CFG_PATH_MUNGE_i586-mingw32msvc := $(strip perl -i.bak -p \
419 -e 's@\\(\S)@/\1@go;' \
420 -e 's@^/([a-zA-Z])/@\1:/@o;')
421 CFG_LDPATH_i586-mingw32msvc :=
422 CFG_RUN_i586-mingw32msvc=
423 CFG_RUN_TARG_i586-mingw32msvc=
425 # i686-w64-mingw32 configuration
426 CROSS_PREFIX_i686-w64-mingw32=i686-w64-mingw32-
427 CC_i686-w64-mingw32=gcc
428 CXX_i686-w64-mingw32=g++
429 CPP_i686-w64-mingw32=gcc -E
430 AR_i686-w64-mingw32=ar
431 CFG_LIB_NAME_i686-w64-mingw32=$(1).dll
432 CFG_STATIC_LIB_NAME_i686-w64-mingw32=$(1).lib
433 CFG_LIB_GLOB_i686-w64-mingw32=$(1)-*.dll
434 CFG_LIB_DSYM_GLOB_i686-w64-mingw32=$(1)-*.dylib.dSYM
435 CFG_CFLAGS_i586-w64-mingw32 := -march=i586 -m32 -D_WIN32_WINNT=0x0600 $(CFLAGS)
436 CFG_GCCISH_CFLAGS_i686-w64-mingw32 := -Wall -Werror -g -m32 -D_WIN32_WINNT=0x0600 $(CFLAGS)
437 CFG_GCCISH_CXXFLAGS_i686-w64-mingw32 := -fno-rtti $(CXXFLAGS)
438 CFG_GCCISH_LINK_FLAGS_i686-w64-mingw32 := -shared -g -m32
439 CFG_GCCISH_DEF_FLAG_i686-w64-mingw32 :=
440 CFG_GCCISH_PRE_LIB_FLAGS_i686-w64-mingw32 :=
441 CFG_GCCISH_POST_LIB_FLAGS_i686-w64-mingw32 :=
442 CFG_DEF_SUFFIX_i686-w64-mingw32 := .mingw32.def
443 CFG_LLC_FLAGS_i686-w64-mingw32 :=
444 CFG_INSTALL_NAME_i686-w64-mingw32 =
445 CFG_LIBUV_LINK_FLAGS_i686-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
446 CFG_EXE_SUFFIX_i686-w64-mingw32 := .exe
447 CFG_WINDOWSY_i686-w64-mingw32 := 1
448 CFG_UNIXY_i686-w64-mingw32 :=
449 CFG_PATH_MUNGE_i686-w64-mingw32 :=
450 CFG_LDPATH_i686-w64-mingw32 :=$(CFG_LDPATH_i686-w64-mingw32):$(PATH)
451 CFG_RUN_i686-w64-mingw32=PATH="$(CFG_LDPATH_i686-w64-mingw32):$(1)" $(2)
452 CFG_RUN_TARG_i686-w64-mingw32=$(call CFG_RUN_i686-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
453 RUSTC_CROSS_FLAGS_i686-w64-mingw32 :=
455 # x86_64-w64-mingw32 configuration
456 CROSS_PREFIX_x86_64-w64-mingw32=x86_64-w64-mingw32-
457 CC_x86_64-w64-mingw32=gcc
458 CXX_x86_64-w64-mingw32=g++
459 CPP_x86_64-w64-mingw32=gcc -E
460 AR_x86_64-w64-mingw32=ar
461 CFG_LIB_NAME_x86_64-w64-mingw32=$(1).dll
462 CFG_STATIC_LIB_NAME_x86_64-w64-mingw32=$(1).lib
463 CFG_LIB_GLOB_x86_64-w64-mingw32=$(1)-*.dll
464 CFG_LIB_DSYM_GLOB_x86_64-w64-mingw32=$(1)-*.dylib.dSYM
465 CFG_CFLAGS_x86_64-w64-mingw32 := -m64 -D_WIN32_WINNT=0x0600 $(CFLAGS)
466 CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -Werror -g -m64 -D_WIN32_WINNT=0x0600 $(CFLAGS)
467 CFG_GCCISH_CXXFLAGS_x86_64-w64-mingw32 := -fno-rtti $(CXXFLAGS)
468 CFG_GCCISH_LINK_FLAGS_x86_64-w64-mingw32 := -shared -g -m64
469 CFG_GCCISH_DEF_FLAG_x86_64-w64-mingw32 :=
470 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-w64-mingw32 :=
471 CFG_GCCISH_POST_LIB_FLAGS_x86_64-w64-mingw32 :=
472 CFG_DEF_SUFFIX_x86_64-w64-mingw32 := .mingw32.def
473 CFG_LLC_FLAGS_x86_64-w64-mingw32 :=
474 CFG_INSTALL_NAME_x86_64-w64-mingw32 =
475 CFG_LIBUV_LINK_FLAGS_x86_64-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
476 CFG_EXE_SUFFIX_x86_64-w64-mingw32 := .exe
477 CFG_WINDOWSY_x86_64-w64-mingw32 := 1
478 CFG_UNIXY_x86_64-w64-mingw32 :=
479 CFG_PATH_MUNGE_x86_64-w64-mingw32 :=
480 CFG_LDPATH_x86_64-w64-mingw32 :=$(CFG_LDPATH_x86_64-w64-mingw32):$(PATH)
481 CFG_RUN_x86_64-w64-mingw32=PATH="$(CFG_LDPATH_x86_64-w64-mingw32):$(1)" $(2)
482 CFG_RUN_TARG_x86_64-w64-mingw32=$(call CFG_RUN_x86_64-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
483 RUSTC_CROSS_FLAGS_x86_64-w64-mingw32 :=
485 # x86_64-unknown-freebsd configuration
486 CC_x86_64-unknown-freebsd=$(CC)
487 CXX_x86_64-unknown-freebsd=$(CXX)
488 CPP_x86_64-unknown-freebsd=$(CPP)
489 AR_x86_64-unknown-freebsd=$(AR)
490 CFG_LIB_NAME_x86_64-unknown-freebsd=lib$(1).so
491 CFG_STATIC_LIB_NAME_x86_64-unknown-freebsd=lib$(1).a
492 CFG_LIB_GLOB_x86_64-unknown-freebsd=lib$(1)-*.so
493 CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd=$(1)-*.dylib.dSYM
494 CFG_CFLAGS_x86_64-unknown-freebsd := -I/usr/local/include $(CFLAGS)
495 CFG_GCCISH_CFLAGS_x86_64-unknown-freebsd := -Wall -Werror -g -fPIC -I/usr/local/include $(CFLAGS)
496 CFG_GCCISH_LINK_FLAGS_x86_64-unknown-freebsd := -shared -fPIC -g -pthread -lrt
497 CFG_GCCISH_DEF_FLAG_x86_64-unknown-freebsd := -Wl,--export-dynamic,--dynamic-list=
498 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-whole-archive
499 CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-no-whole-archive
500 CFG_DEF_SUFFIX_x86_64-unknown-freebsd := .bsd.def
501 CFG_LLC_FLAGS_x86_64-unknown-freebsd :=
502 CFG_INSTALL_NAME_x86_64-unknown-freebsd =
503 CFG_LIBUV_LINK_FLAGS_x86_64-unknown-freebsd := -pthread -lkvm
504 CFG_EXE_SUFFIX_x86_64-unknown-freebsd :=
505 CFG_WINDOWSY_x86_64-unknown-freebsd :=
506 CFG_UNIXY_x86_64-unknown-freebsd := 1
507 CFG_PATH_MUNGE_x86_64-unknown-freebsd :=
508 CFG_LDPATH_x86_64-unknown-freebsd :=
509 CFG_RUN_x86_64-unknown-freebsd=$(2)
510 CFG_RUN_TARG_x86_64-unknown-freebsd=$(call CFG_RUN_x86_64-unknown-freebsd,,$(2))
513 # The -Qunused-arguments sidesteps spurious warnings from clang
515 ifeq ($$(CFG_USING_CLANG),1)
516 ifneq ($(findstring clang,$$(shell $(CC_$(1)) -v)),)
517 CFG_GCCISH_CFLAGS_$(1) += -Qunused-arguments
518 CFG_GCCISH_CXXFLAGS_$(1) += -Qunused-arguments
523 $(foreach target,$(CFG_TARGET),\
524 $(eval $(call FILTER_FLAGS,$(target))))
527 ifeq ($(CFG_CCACHE_CPP2),1)
532 ifdef CFG_CCACHE_BASEDIR
533 CCACHE_BASEDIR=$(CFG_CCACHE_BASEDIR)
534 export CCACHE_BASEDIR
537 FIND_COMPILER = $(word 1,$(1:ccache=))
539 define CFG_MAKE_TOOLCHAIN
540 # Prepend the tools with their prefix if cross compiling
541 ifneq ($(CFG_BUILD),$(1))
542 CC_$(1)=$(CROSS_PREFIX_$(1))$(CC_$(1))
543 CXX_$(1)=$(CROSS_PREFIX_$(1))$(CXX_$(1))
544 CPP_$(1)=$(CROSS_PREFIX_$(1))$(CPP_$(1))
545 AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
546 RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(CXX_$(1))) \
547 -C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
549 RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
552 CFG_COMPILE_C_$(1) = $$(CC_$(1)) \
553 $$(CFG_GCCISH_CFLAGS) \
554 $$(CFG_GCCISH_CFLAGS_$(1)) \
555 $$(CFG_DEPEND_FLAGS) \
557 CFG_LINK_C_$(1) = $$(CC_$(1)) \
558 $$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
559 $$(CFG_GCCISH_LINK_FLAGS_$(1)) \
560 $$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
561 $$(call CFG_INSTALL_NAME_$(1),$$(4))
562 CFG_COMPILE_CXX_$(1) = $$(CXX_$(1)) \
563 $$(CFG_GCCISH_CFLAGS) \
564 $$(CFG_GCCISH_CXXFLAGS) \
565 $$(CFG_GCCISH_CFLAGS_$(1)) \
566 $$(CFG_GCCISH_CXXFLAGS_$(1)) \
567 $$(CFG_DEPEND_FLAGS) \
569 CFG_LINK_CXX_$(1) = $$(CXX_$(1)) \
570 $$(CFG_GCCISH_LINK_FLAGS) -o $$(1) \
571 $$(CFG_GCCISH_LINK_FLAGS_$(1)) \
572 $$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
573 $$(call CFG_INSTALL_NAME_$(1),$$(4))
575 ifeq ($$(findstring $(HOST_$(1)),arm mips),)
577 # We're using llvm-mc as our assembler because it supports
578 # .cfi pseudo-ops on mac
579 CFG_ASSEMBLE_$(1)=$$(CPP_$(1)) -E $$(CFG_DEPEND_FLAGS) $$(2) | \
580 $$(LLVM_MC_$$(CFG_BUILD)) \
587 # For the ARM and MIPS crosses, use the toolchain assembler
588 # FIXME: We should be able to use the LLVM assembler
589 CFG_ASSEMBLE_$(1)=$$(CC_$(1)) $$(CFG_GCCISH_CFLAGS_$(1)) \
590 $$(CFG_DEPEND_FLAGS) $$(2) -c -o $$(1)
596 $(foreach target,$(CFG_TARGET),\
597 $(eval $(call CFG_MAKE_TOOLCHAIN,$(target))))