]> git.lizzy.rs Git - rust.git/blob - mk/platform.mk
Add x64 windows to platform.mk and mingw64 header fixes.
[rust.git] / mk / platform.mk
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.
4 #
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.
10
11
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
15 # i386.
16 define DEF_HOST_VAR
17   HOST_$(1) = $(subst i686,i386,$(word 1,$(subst -, ,$(1))))
18 endef
19 $(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_HOST_VAR,$(t))))
20 $(foreach t,$(CFG_TARGET_TRIPLES),$(info cfg: host for $(t) is $(HOST_$(t))))
21
22 # Ditto for OSTYPE
23 define DEF_OSTYPE_VAR
24   OSTYPE_$(1) = $(subst $(firstword $(subst -, ,$(1)))-,,$(1))
25 endef
26 $(foreach t,$(CFG_TARGET_TRIPLES),$(eval $(call DEF_OSTYPE_VAR,$(t))))
27 $(foreach t,$(CFG_TARGET_TRIPLES),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
28
29 # FIXME: no-omit-frame-pointer is just so that task_start_wrapper
30 # has a frame pointer and the stack walker can understand it. Turning off
31 # frame pointers everywhere is overkill
32 CFG_GCCISH_CFLAGS += -fno-omit-frame-pointer -DUSE_UTF8
33
34 # On Darwin, we need to run dsymutil so the debugging information ends
35 # up in the right place.  On other platforms, it automatically gets
36 # embedded into the executable, so use a no-op command.
37 CFG_DSYMUTIL := true
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   ifdef CFG_PERF
65     ifneq ($(CFG_PERF_WITH_LOGFD),)
66         CFG_PERF_TOOL := $(CFG_PERF) stat -r 3 --log-fd 2
67     else
68         CFG_PERF_TOOL := $(CFG_PERF) stat -r 3
69     endif
70   else
71     ifdef CFG_VALGRIND
72       CFG_PERF_TOOL :=\
73         $(CFG_VALGRIND) --tool=cachegrind --cache-sim=yes --branch-sim=yes
74     else
75       CFG_PERF_TOOL := /usr/bin/time --verbose
76     endif
77   endif
78 endif
79
80 # These flags will cause the compiler to produce a .d file
81 # next to the .o file that lists header deps.
82 CFG_DEPEND_FLAGS = -MMD -MP -MT $(1) -MF $(1:%.o=%.d)
83
84 AR := ar
85
86 CFG_INFO := $(info cfg: using $(CFG_C_COMPILER))
87 ifeq ($(CFG_C_COMPILER),clang)
88   ifeq ($(origin CC),default)
89     CC=clang
90   endif
91   ifeq ($(origin CXX),default)
92     CXX=clang++
93   endif
94   ifeq ($(origin CPP),default)
95     CPP=clang
96   endif
97 else
98 ifeq ($(CFG_C_COMPILER),gcc)
99   ifeq ($(origin CC),default)
100     CC=gcc
101   endif
102   ifeq ($(origin CXX),default)
103     CXX=g++
104   endif
105   ifeq ($(origin CPP),default)
106     CPP=gcc
107   endif
108 else
109 ifeq ($(CFG_C_COMPILER),ccache clang)
110   # The -Qunused-arguments sidesteps spurious warnings from clang
111   ifeq ($(origin CC),default)
112     CC=ccache clang -Qunused-arguments
113   endif
114   ifeq ($(origin CXX),default)
115     CXX=ccache clang++ -Qunused-arguments
116   endif
117   ifeq ($(origin CPP),default)
118     CPP=ccache clang -Qunused-arguments
119   endif
120 else
121 ifeq ($(CFG_C_COMPILER),ccache gcc)
122   ifeq ($(origin CC),default)
123     CC=ccache gcc
124   endif
125   ifeq ($(origin CXX),default)
126     CXX=ccache g++
127   endif
128   ifeq ($(origin CPP),default)
129     CPP=ccache gcc
130   endif
131 else
132   CFG_ERR := $(error please try on a system with gcc or clang)
133 endif
134 endif
135 endif
136 endif
137
138
139 # x86_64-unknown-linux-gnu configuration
140 CC_x86_64-unknown-linux-gnu=$(CC)
141 CXX_x86_64-unknown-linux-gnu=$(CXX)
142 CPP_x86_64-unknown-linux-gnu=$(CPP)
143 AR_x86_64-unknown-linux-gnu=$(AR)
144 CFG_LIB_NAME_x86_64-unknown-linux-gnu=lib$(1).so
145 CFG_LIB_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.so
146 CFG_LIB_DSYM_GLOB_x86_64-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
147 CFG_GCCISH_CFLAGS_x86_64-unknown-linux-gnu := -Wall -Werror -g -fPIC -m64
148 CFG_GCCISH_CXXFLAGS_x86_64-unknown-linux-gnu := -fno-rtti
149 CFG_GCCISH_LINK_FLAGS_x86_64-unknown-linux-gnu := -shared -fPIC -ldl -pthread  -lrt -g -m64
150 CFG_GCCISH_DEF_FLAG_x86_64-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
151 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-whole-archive
152 CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-linux-gnu := -Wl,-no-whole-archive
153 CFG_DEF_SUFFIX_x86_64-unknown-linux-gnu := .linux.def
154 CFG_INSTALL_NAME_x86_64-unknown-linux-gnu =
155 CFG_LIBUV_LINK_FLAGS_x86_64-unknown-linux-gnu =
156 CFG_LLVM_BUILD_ENV_x86_64-unknown-linux-gnu="CXXFLAGS=-fno-omit-frame-pointer"
157 CFG_EXE_SUFFIX_x86_64-unknown-linux-gnu =
158 CFG_WINDOWSY_x86_64-unknown-linux-gnu :=
159 CFG_UNIXY_x86_64-unknown-linux-gnu := 1
160 CFG_PATH_MUNGE_x86_64-unknown-linux-gnu := true
161 CFG_LDPATH_x86_64-unknown-linux-gnu :=
162 CFG_RUN_x86_64-unknown-linux-gnu=$(2)
163 CFG_RUN_TARG_x86_64-unknown-linux-gnu=$(call CFG_RUN_x86_64-unknown-linux-gnu,,$(2))
164
165 # i686-unknown-linux-gnu configuration
166 CC_i686-unknown-linux-gnu=$(CC)
167 CXX_i686-unknown-linux-gnu=$(CXX)
168 CPP_i686-unknown-linux-gnu=$(CPP)
169 AR_i686-unknown-linux-gnu=$(AR)
170 CFG_LIB_NAME_i686-unknown-linux-gnu=lib$(1).so
171 CFG_LIB_GLOB_i686-unknown-linux-gnu=lib$(1)-*.so
172 CFG_LIB_DSYM_GLOB_i686-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
173 CFG_GCCISH_CFLAGS_i686-unknown-linux-gnu := -Wall -Werror -g -fPIC -m32
174 CFG_GCCISH_CXXFLAGS_i686-unknown-linux-gnu := -fno-rtti
175 CFG_GCCISH_LINK_FLAGS_i686-unknown-linux-gnu := -shared -fPIC -ldl -pthread  -lrt -g -m32
176 CFG_GCCISH_DEF_FLAG_i686-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
177 CFG_GCCISH_PRE_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-whole-archive
178 CFG_GCCISH_POST_LIB_FLAGS_i686-unknown-linux-gnu := -Wl,-no-whole-archive
179 CFG_DEF_SUFFIX_i686-unknown-linux-gnu := .linux.def
180 CFG_INSTALL_NAME_i686-unknown-linux-gnu =
181 CFG_LIBUV_LINK_FLAGS_i686-unknown-linux-gnu =
182 CFG_LLVM_BUILD_ENV_i686-unknown-linux-gnu="CXXFLAGS=-fno-omit-frame-pointer"
183 CFG_EXE_SUFFIX_i686-unknown-linux-gnu =
184 CFG_WINDOWSY_i686-unknown-linux-gnu :=
185 CFG_UNIXY_i686-unknown-linux-gnu := 1
186 CFG_PATH_MUNGE_i686-unknown-linux-gnu := true
187 CFG_LDPATH_i686-unknown-linux-gnu :=
188 CFG_RUN_i686-unknown-linux-gnu=$(2)
189 CFG_RUN_TARG_i686-unknown-linux-gnu=$(call CFG_RUN_i686-unknown-linux-gnu,,$(2))
190
191 # x86_64-apple-darwin configuration
192 CC_x86_64-apple-darwin=$(CC)
193 CXX_x86_64-apple-darwin=$(CXX)
194 CPP_x86_64-apple-darwin=$(CPP)
195 AR_x86_64-apple-darwin=$(AR)
196 CFG_LIB_NAME_x86_64-apple-darwin=lib$(1).dylib
197 CFG_LIB_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib
198 CFG_LIB_DSYM_GLOB_x86_64-apple-darwin=lib$(1)-*.dylib.dSYM
199 CFG_GCCISH_CFLAGS_x86_64-apple-darwin := -Wall -Werror -g -fPIC -m64 -arch x86_64
200 CFG_GCCISH_CXXFLAGS_x86_64-apple-darwin := -fno-rtti
201 CFG_GCCISH_LINK_FLAGS_x86_64-apple-darwin := -dynamiclib -pthread  -framework CoreServices -Wl,-no_compact_unwind -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_INSTALL_NAME_x86_64-apple-darwin = -Wl,-install_name,@rpath/$(1)
207 CFG_LIBUV_LINK_FLAGS_x86_64-apple-darwin =
208 CFG_EXE_SUFFIX_x86_64-apple-darwin :=
209 CFG_WINDOWSY_x86_64-apple-darwin :=
210 CFG_UNIXY_x86_64-apple-darwin := 1
211 CFG_PATH_MUNGE_x86_64-apple-darwin := true
212 CFG_LDPATH_x86_64-apple-darwin :=
213 CFG_RUN_x86_64-apple-darwin=$(2)
214 CFG_RUN_TARG_x86_64-apple-darwin=$(call CFG_RUN_x86_64-apple-darwin,,$(2))
215
216 # i686-apple-darwin configuration
217 CC_i686-apple-darwin=$(CC)
218 CXX_i686-apple-darwin=$(CXX)
219 CPP_i686-apple-darwin=$(CPP)
220 AR_i686-apple-darwin=$(AR)
221 CFG_LIB_NAME_i686-apple-darwin=lib$(1).dylib
222 CFG_LIB_GLOB_i686-apple-darwin=lib$(1)-*.dylib
223 CFG_LIB_DSYM_GLOB_i686-apple-darwin=lib$(1)-*.dylib.dSYM
224 CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -Werror -g -fPIC -m32 -arch i386
225 CFG_GCCISH_CXXFLAGS_i686-apple-darwin := -fno-rtti
226 CFG_GCCISH_LINK_FLAGS_i686-apple-darwin := -dynamiclib -pthread  -framework CoreServices -Wl,-no_compact_unwind -m32
227 CFG_GCCISH_DEF_FLAG_i686-apple-darwin := -Wl,-exported_symbols_list,
228 CFG_GCCISH_PRE_LIB_FLAGS_i686-apple-darwin :=
229 CFG_GCCISH_POST_LIB_FLAGS_i686-apple-darwin :=
230 CFG_DEF_SUFFIX_i686-apple-darwin := .darwin.def
231 CFG_INSTALL_NAME_i686-apple-darwin = -Wl,-install_name,@rpath/$(1)
232 CFG_LIBUV_LINK_FLAGS_i686-apple-darwin =
233 CFG_EXE_SUFFIX_i686-apple-darwin :=
234 CFG_WINDOWSY_i686-apple-darwin :=
235 CFG_UNIXY_i686-apple-darwin := 1
236 CFG_PATH_MUNGE_i686-apple-darwin := true
237 CFG_LDPATH_i686-apple-darwin :=
238 CFG_RUN_i686-apple-darwin=$(2)
239 CFG_RUN_TARG_i686-apple-darwin=$(call CFG_RUN_i686-apple-darwin,,$(2))
240
241 # arm-linux-androideabi configuration
242 CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
243 CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
244 CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
245 AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
246 CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
247 CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so
248 CFG_LIB_DSYM_GLOB_arm-linux-androideabi=lib$(1)-*.dylib.dSYM
249 CFG_GCCISH_CFLAGS_arm-linux-androideabi := -Wall -g -fPIC -D__arm__ -DANDROID -D__ANDROID__
250 CFG_GCCISH_CXXFLAGS_arm-linux-androideabi := -fno-rtti
251 CFG_GCCISH_LINK_FLAGS_arm-linux-androideabi := -shared -fPIC -ldl -g -lm -lsupc++ -lgnustl_shared
252 CFG_GCCISH_DEF_FLAG_arm-linux-androideabi := -Wl,--export-dynamic,--dynamic-list=
253 CFG_GCCISH_PRE_LIB_FLAGS_arm-linux-androideabi := -Wl,-whole-archive
254 CFG_GCCISH_POST_LIB_FLAGS_arm-linux-androideabi := -Wl,-no-whole-archive
255 CFG_DEF_SUFFIX_arm-linux-androideabi := .android.def
256 CFG_INSTALL_NAME_arm-linux-androideabi =
257 CFG_LIBUV_LINK_FLAGS_arm-linux-androideabi =
258 CFG_EXE_SUFFIX_arm-linux-androideabi :=
259 CFG_WINDOWSY_arm-linux-androideabi :=
260 CFG_UNIXY_arm-linux-androideabi := 1
261 CFG_PATH_MUNGE_arm-linux-androideabi := true
262 CFG_LDPATH_arm-linux-androideabi :=
263 CFG_RUN_arm-linux-androideabi=
264 CFG_RUN_TARG_arm-linux-androideabi=
265 RUSTC_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH)
266
267 # arm-unknown-linux-gnueabihf configuration
268 CC_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc
269 CXX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-g++
270 CPP_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc -E
271 AR_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-ar
272 CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
273 CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
274 CFG_LIB_DSYM_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.dylib.dSYM
275 CFG_GCCISH_CFLAGS_arm-unknown-linux-gnueabihf := -Wall -g -fPIC
276 CFG_GCCISH_CXXFLAGS_arm-unknown-linux-gnueabihf := -fno-rtti
277 CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-gnueabihf := -shared -fPIC -g
278 CFG_GCCISH_DEF_FLAG_arm-unknown-linux-gnueabihf := -Wl,--export-dynamic,--dynamic-list=
279 CFG_GCCISH_PRE_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-whole-archive
280 CFG_GCCISH_POST_LIB_FLAGS_arm-unknown-linux-gnueabihf := -Wl,-no-whole-archive
281 CFG_DEF_SUFFIX_arm-unknown-linux-gnueabihf := .linux.def
282 CFG_INSTALL_NAME_ar,-unknown-linux-gnueabihf =
283 CFG_LIBUV_LINK_FLAGS_arm-unknown-linux-gnueabihf =
284 CFG_EXE_SUFFIX_arm-unknown-linux-gnueabihf :=
285 CFG_WINDOWSY_arm-unknown-linux-gnueabihf :=
286 CFG_UNIXY_arm-unknown-linux-gnueabihf := 1
287 CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
288 CFG_LDPATH_arm-unknown-linux-gnueabihf :=
289 CFG_RUN_arm-unknown-linux-gnueabihf=
290 CFG_RUN_TARG_arm-unknown-linux-gnueabihf=
291 RUSTC_FLAGS_arm-unknown-linux-gnueabihf := --linker=$(CC_arm-unknown-linux-gnueabihf)
292
293 # mips-unknown-linux-gnu configuration
294 CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
295 CXX_mips-unknown-linux-gnu=mips-linux-gnu-g++
296 CPP_mips-unknown-linux-gnu=mips-linux-gnu-gcc -E
297 AR_mips-unknown-linux-gnu=mips-linux-gnu-ar
298 CFG_LIB_NAME_mips-unknown-linux-gnu=lib$(1).so
299 CFG_LIB_GLOB_mips-unknown-linux-gnu=lib$(1)-*.so
300 CFG_LIB_DSYM_GLOB_mips-unknown-linux-gnu=lib$(1)-*.dylib.dSYM
301 CFG_GCCISH_CFLAGS_mips-unknown-linux-gnu := -Wall -g -fPIC -mips32r2 -msoft-float -mabi=32 -mno-compact-eh
302 CFG_GCCISH_CXXFLAGS_mips-unknown-linux-gnu := -fno-rtti
303 CFG_GCCISH_LINK_FLAGS_mips-unknown-linux-gnu := -shared -fPIC -g -mips32r2 -msoft-float -mabi=32
304 CFG_GCCISH_DEF_FLAG_mips-unknown-linux-gnu := -Wl,--export-dynamic,--dynamic-list=
305 CFG_GCCISH_PRE_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-whole-archive
306 CFG_GCCISH_POST_LIB_FLAGS_mips-unknown-linux-gnu := -Wl,-no-whole-archive
307 CFG_DEF_SUFFIX_mips-unknown-linux-gnu := .linux.def
308 CFG_INSTALL_NAME_mips-unknown-linux-gnu =
309 CFG_LIBUV_LINK_FLAGS_mips-unknown-linux-gnu =
310 CFG_EXE_SUFFIX_mips-unknown-linux-gnu :=
311 CFG_WINDOWSY_mips-unknown-linux-gnu :=
312 CFG_UNIXY_mips-unknown-linux-gnu := 1
313 CFG_PATH_MUNGE_mips-unknown-linux-gnu := true
314 CFG_LDPATH_mips-unknown-linux-gnu :=
315 CFG_RUN_mips-unknown-linux-gnu=
316 CFG_RUN_TARG_mips-unknown-linux-gnu=
317
318 # i686-pc-mingw32 configuration
319 CC_i686-pc-mingw32=$(CC)
320 CXX_i686-pc-mingw32=$(CXX)
321 CPP_i686-pc-mingw32=$(CPP)
322 AR_i686-pc-mingw32=$(AR)
323 CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
324 CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
325 CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
326 CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600
327 CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti
328 CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g -m32
329 CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 :=
330 CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 :=
331 CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
332 CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
333 CFG_INSTALL_NAME_i686-pc-mingw32 =
334 CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lWs2_32 -lpsapi -liphlpapi
335 CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
336 CFG_WINDOWSY_i686-pc-mingw32 := 1
337 CFG_UNIXY_i686-pc-mingw32 :=
338 CFG_PATH_MUNGE_i686-pc-mingw32 :=
339 CFG_LDPATH_i686-pc-mingw32 :=$(CFG_LDPATH_i686-pc-mingw32):$(PATH)
340 CFG_RUN_i686-pc-mingw32=PATH="$(CFG_LDPATH_i686-pc-mingw32):$(1)" $(2)
341 CFG_RUN_TARG_i686-pc-mingw32=$(call CFG_RUN_i686-pc-mingw32,$(HLIB$(1)_H_$(CFG_BUILD_TRIPLE)),$(2))
342
343 # i586-mingw32msvc configuration
344 CC_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-gcc
345 CXX_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-g++
346 CPP_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-cpp
347 AR_i586-mingw32msvc=$(CFG_MINGW32_CROSS_PATH)/bin/i586-mingw32msvc-ar
348 CFG_LIB_NAME_i586-mingw32msvc=$(1).dll
349 CFG_LIB_GLOB_i586-mingw32msvc=$(1)-*.dll
350 CFG_LIB_DSYM_GLOB_i586-mingw32msvc=$(1)-*.dylib.dSYM
351 CFG_GCCISH_CFLAGS_i586-mingw32msvc := -Wall -Werror -g -march=i586 -m32
352 CFG_GCCISH_CXXFLAGS_i586-mingw32msvc := -fno-rtti
353 CFG_GCCISH_LINK_FLAGS_i586-mingw32msvc := -shared -g -m32
354 CFG_GCCISH_DEF_FLAG_i586-mingw32msvc :=
355 CFG_GCCISH_PRE_LIB_FLAGS_i586-mingw32msvc :=
356 CFG_GCCISH_POST_LIB_FLAGS_i586-mingw32msvc :=
357 CFG_DEF_SUFFIX_i586-mingw32msvc := .mingw32.def
358 CFG_INSTALL_NAME_i586-mingw32msvc =
359 CFG_LIBUV_LINK_FLAGS_i586-mingw32msvc := -L$(CFG_MINGW32_CROSS_PATH)/i586-mingw32msvc/lib -lws2_32 -lpsapi -liphlpapi
360 CFG_EXE_SUFFIX_i586-mingw32msvc := .exe
361 CFG_WINDOWSY_i586-mingw32msvc := 1
362 CFG_UNIXY_i586-mingw32msvc :=
363 CFG_PATH_MUNGE_i586-mingw32msvc := $(strip perl -i.bak -p   \
364                              -e 's@\\(\S)@/\1@go;'       \
365                              -e 's@^/([a-zA-Z])/@\1:/@o;')
366 CFG_LDPATH_i586-mingw32msvc :=
367 CFG_RUN_i586-mingw32msvc=
368 CFG_RUN_TARG_i586-mingw32msvc=
369
370 # x86_64-w64-mingw32 configuration
371 CC_x86_64-w64-mingw32=$(CC)
372 CXX_x86_64-w64-mingw32=$(CXX)
373 CPP_x86_64-w64-mingw32=$(CPP)
374 AR_x86_64-w64-mingw32=$(AR)
375 CFG_LIB_NAME_x86_64-w64-mingw32=$(1).dll
376 CFG_LIB_GLOB_x86_64-w64-mingw32=$(1)-*.dll
377 CFG_LIB_DSYM_GLOB_x86_64-w64-mingw32=$(1)-*.dylib.dSYM
378 CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -Werror -g -m64 -D_WIN32_WINNT=0x0600
379 CFG_GCCISH_CXXFLAGS_x86_64-w64-mingw32 := -fno-rtti
380 CFG_GCCISH_LINK_FLAGS_x86_64-w64-mingw32 := -shared -fPIC -g -m64
381 CFG_GCCISH_DEF_FLAG_x86_64-w64-mingw32 :=
382 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-w64-mingw32 :=
383 CFG_GCCISH_POST_LIB_FLAGS_x86_64-w64-mingw32 :=
384 CFG_DEF_SUFFIX_x86_64-w64-mingw32 := .mingw32.def
385 CFG_INSTALL_NAME_x86_64-w64-mingw32 =
386 CFG_LIBUV_LINK_FLAGS_x86_64-w64-mingw32 := -lWs2_32 -lpsapi -liphlpapi
387 CFG_EXE_SUFFIX_x86_64-w64-mingw32 := .exe
388 CFG_WINDOWSY_x86_64-w64-mingw32 := 1
389 CFG_UNIXY_x86_64-w64-mingw32 :=
390 CFG_PATH_MUNGE_x86_64-w64-mingw32 :=
391 CFG_LDPATH_x86_64-w64-mingw32 :=$(CFG_LDPATH_x86_64-w64-mingw32):$(PATH)
392 CFG_RUN_x86_64-w64-mingw32=PATH="$(CFG_LDPATH_x86_64-w64-mingw32):$(1)" $(2)
393 CFG_RUN_TARG_x86_64-w64-mingw32=$(call CFG_RUN_x86_64-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD_TRIPLE)),$(2))
394
395 # x86_64-unknown-freebsd configuration
396 CC_x86_64-unknown-freebsd=$(CC)
397 CXX_x86_64-unknown-freebsd=$(CXX)
398 CPP_x86_64-unknown-freebsd=$(CPP)
399 AR_x86_64-unknown-freebsd=$(AR)
400 CFG_LIB_NAME_x86_64-unknown-freebsd=lib$(1).so
401 CFG_LIB_GLOB_x86_64-unknown-freebsd=lib$(1)-*.so
402 CFG_LIB_DSYM_GLOB_x86_64-unknown-freebsd=$(1)-*.dylib.dSYM
403 CFG_GCCISH_CFLAGS_x86_64-unknown-freebsd := -Wall -Werror -g -fPIC -I/usr/local/include
404 CFG_GCCISH_LINK_FLAGS_x86_64-unknown-freebsd := -shared -fPIC -g -pthread  -lrt
405 CFG_GCCISH_DEF_FLAG_x86_64-unknown-freebsd := -Wl,--export-dynamic,--dynamic-list=
406 CFG_GCCISH_PRE_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-whole-archive
407 CFG_GCCISH_POST_LIB_FLAGS_x86_64-unknown-freebsd := -Wl,-no-whole-archive
408 CFG_DEF_SUFFIX_x86_64-unknown-freebsd := .bsd.def
409 CFG_INSTALL_NAME_x86_64-unknown-freebsd =
410 CFG_LIBUV_LINK_FLAGS_x86_64-unknown-freebsd := -pthread  -lkvm
411 CFG_EXE_SUFFIX_x86_64-unknown-freebsd :=
412 CFG_WINDOWSY_x86_64-unknown-freebsd :=
413 CFG_UNIXY_x86_64-unknown-freebsd := 1
414 CFG_PATH_MUNGE_x86_64-unknown-freebsd :=
415 CFG_LDPATH_x86_64-unknown-freebsd :=
416 CFG_RUN_x86_64-unknown-freebsd=$(2)
417 CFG_RUN_TARG_x86_64-unknown-freebsd=$(call CFG_RUN_x86_64-unknown-freebsd,,$(2))
418
419 ifeq ($(CFG_CCACHE_CPP2),1)
420   CCACHE_CPP2=1
421   export CCACHE_CPP
422 endif
423
424 ifdef CFG_CCACHE_BASEDIR
425   CCACHE_BASEDIR=$(CFG_CCACHE_BASEDIR)
426   export CCACHE_BASEDIR
427 endif
428
429 define CFG_MAKE_TOOLCHAIN
430   CFG_COMPILE_C_$(1) = $$(CC_$(1))  \
431         $$(CFG_GCCISH_CFLAGS)      \
432         $$(CFG_GCCISH_CFLAGS_$(1)) \
433         $$(CFG_DEPEND_FLAGS)       \
434         -c -o $$(1) $$(2)
435   CFG_LINK_C_$(1) = $$(CC_$(1)) \
436         $$(CFG_GCCISH_LINK_FLAGS) -o $$(1)          \
437         $$(CFG_GCCISH_LINK_FLAGS_$(1)))             \
438         $$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2)     \
439         $$(call CFG_INSTALL_NAME_$(1),$$(4))
440   CFG_COMPILE_CXX_$(1) = $$(CXX_$(1)) \
441         $$(CFG_GCCISH_CFLAGS)      \
442         $$(CFG_GCCISH_CXXFLAGS)    \
443         $$(CFG_GCCISH_CFLAGS_$(1)) \
444         $$(CFG_GCCISH_CXXFLAGS_$(1))    \
445         $$(CFG_DEPEND_FLAGS)       \
446         -c -o $$(1) $$(2)
447   CFG_LINK_CXX_$(1) = $$(CXX_$(1)) \
448         $$(CFG_GCCISH_LINK_FLAGS) -o $$(1)             \
449         $$(CFG_GCCISH_LINK_FLAGS_$(1))                 \
450         $$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2)        \
451         $$(call CFG_INSTALL_NAME_$(1),$$(4))
452
453   ifneq ($(1),arm-linux-androideabi)
454
455   # We're using llvm-mc as our assembler because it supports
456   # .cfi pseudo-ops on mac
457   CFG_ASSEMBLE_$(1)=$$(CPP_$(1)) -E $$(CFG_DEPEND_FLAGS) $$(2) | \
458                     $$(LLVM_MC_$$(CFG_BUILD_TRIPLE)) \
459                     -assemble \
460                     -filetype=obj \
461                     -triple=$(1) \
462                     -o=$$(1)
463   else
464
465   # For the Android cross, use the Android assembler
466   # XXX: We should be able to use the LLVM assembler
467   CFG_ASSEMBLE_$(1)=$$(CPP_$(1)) $$(CFG_DEPEND_FLAGS) $$(2) -c -o $$(1)
468
469   endif
470
471 endef
472
473 $(foreach target,$(CFG_TARGET_TRIPLES),\
474   $(eval $(call CFG_MAKE_TOOLCHAIN,$(target))))