Skip to content

Commit 6820ed4

Browse files
committed
Fix up mingw64 target.
1 parent cd9069c commit 6820ed4

File tree

6 files changed

+125
-49
lines changed

6 files changed

+125
-49
lines changed

mk/platform.mk

Lines changed: 67 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ CFG_LIB_NAME_i686-apple-darwin=lib$(1).dylib
257257
CFG_STATIC_LIB_NAME_i686-apple-darwin=lib$(1).a
258258
CFG_LIB_GLOB_i686-apple-darwin=lib$(1)-*.dylib
259259
CFG_LIB_DSYM_GLOB_i686-apple-darwin=lib$(1)-*.dylib.dSYM
260-
CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -Werror -g -fPIC -m32 -arch i386
260+
CFG_GCCISH_CFLAGS_i686-apple-darwin := -Wall -g -fPIC -m32 -arch i386
261261
CFG_GCCISH_CXXFLAGS_i686-apple-darwin := -fno-rtti
262262
CFG_GCCISH_LINK_FLAGS_i686-apple-darwin := -dynamiclib -pthread -framework CoreServices -m32
263263
CFG_GCCISH_DEF_FLAG_i686-apple-darwin := -Wl,-exported_symbols_list,
@@ -302,10 +302,11 @@ CFG_RUN_TARG_arm-linux-androideabi=
302302
RUSTC_FLAGS_arm-linux-androideabi :=--android-cross-path=$(CFG_ANDROID_CROSS_PATH)
303303

304304
# arm-unknown-linux-gnueabihf configuration
305-
CC_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc
306-
CXX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-g++
307-
CPP_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-gcc -E
308-
AR_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-ar
305+
CROSS_PREFIX_arm-unknown-linux-gnueabihf=arm-linux-gnueabihf-
306+
CC_arm-unknown-linux-gnueabihf=gcc
307+
CXX_arm-unknown-linux-gnueabihf=g++
308+
CPP_arm-unknown-linux-gnueabihf=gcc -E
309+
AR_arm-unknown-linux-gnueabihf=ar
309310
CFG_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).so
310311
CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabihf=lib$(1).a
311312
CFG_LIB_GLOB_arm-unknown-linux-gnueabihf=lib$(1)-*.so
@@ -324,15 +325,17 @@ CFG_WINDOWSY_arm-unknown-linux-gnueabihf :=
324325
CFG_UNIXY_arm-unknown-linux-gnueabihf := 1
325326
CFG_PATH_MUNGE_arm-unknown-linux-gnueabihf := true
326327
CFG_LDPATH_arm-unknown-linux-gnueabihf :=
327-
CFG_RUN_arm-unknown-linux-gnueabihf=
328-
CFG_RUN_TARG_arm-unknown-linux-gnueabihf=
329-
RUSTC_FLAGS_arm-unknown-linux-gnueabihf := --linker=$(CC_arm-unknown-linux-gnueabihf)
328+
CFG_RUN_arm-unknown-linux-gnueabihf=$(2)
329+
CFG_RUN_TARG_arm-unknown-linux-gnueabihf=$(call CFG_RUN_arm-unknown-linux-gnueabihf,,$(2))
330+
RUSTC_FLAGS_arm-unknown-linux-gnueabihf :=
331+
RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabihf := --linker=$(CROSS_PREFIX_arm-unknown-linux-gnueabihf)$(CC_arm-unknown-linux-gnueabihf)
330332

331333
# arm-unknown-linux-gnueabi configuration
332-
CC_arm-unknown-linux-gnueabi=arm-linux-gnueabi-gcc
333-
CXX_arm-unknown-linux-gnueabi=arm-linux-gnueabi-g++
334-
CPP_arm-unknown-linux-gnueabi=arm-linux-gnueabi-gcc -E
335-
AR_arm-unknown-linux-gnueabi=arm-linux-gnueabi-ar
334+
CROSS_PREFIX_arm-unknown-linux-gnueabi=arm-linux-gnueabi-
335+
CC_arm-unknown-linux-gnueabi=gcc
336+
CXX_arm-unknown-linux-gnueabi=g++
337+
CPP_arm-unknown-linux-gnueabi=gcc -E
338+
AR_arm-unknown-linux-gnueabi=ar
336339
CFG_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).so
337340
CFG_STATIC_LIB_NAME_arm-unknown-linux-gnueabi=lib$(1).a
338341
CFG_LIB_GLOB_arm-unknown-linux-gnueabi=lib$(1)-*.so
@@ -351,9 +354,10 @@ CFG_WINDOWSY_arm-unknown-linux-gnueabi :=
351354
CFG_UNIXY_arm-unknown-linux-gnueabi := 1
352355
CFG_PATH_MUNGE_arm-unknown-linux-gnueabi := true
353356
CFG_LDPATH_arm-unknown-linux-gnueabi :=
354-
CFG_RUN_arm-unknown-linux-gnueabi=
355-
CFG_RUN_TARG_arm-unknown-linux-gnueabi=
356-
RUSTC_FLAGS_arm-unknown-linux-gnueabi := --linker=$(CC_arm-unknown-linux-gnueabi)
357+
CFG_RUN_arm-unknown-linux-gnueabi=$(2)
358+
CFG_RUN_TARG_arm-unknown-linux-gnueabi=$(call CFG_RUN_arm-unknown-linux-gnueabi,,$(2))
359+
RUSTC_FLAGS_arm-unknown-linux-gnueabi :=
360+
RUSTC_CROSS_FLAGS_arm-unknown-linux-gnueabi := --linker=$(CROSS_PREFIX_arm-unknown-linux-gnueabi)$(CC_arm-unknown-linux-gnueabi)
357361

358362
# mips-unknown-linux-gnu configuration
359363
CC_mips-unknown-linux-gnu=mips-linux-gnu-gcc
@@ -399,7 +403,7 @@ CFG_GCCISH_PRE_LIB_FLAGS_i686-pc-mingw32 :=
399403
CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
400404
CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
401405
CFG_INSTALL_NAME_i686-pc-mingw32 =
402-
CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lWs2_32 -lpsapi -liphlpapi
406+
CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lws2_32 -lpsapi -liphlpapi
403407
CFG_LLVM_BUILD_ENV_i686-pc-mingw32 := CPATH=$(CFG_SRC_DIR)src/etc/mingw-fix-include
404408
CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
405409
CFG_WINDOWSY_i686-pc-mingw32 := 1
@@ -437,31 +441,61 @@ CFG_LDPATH_i586-mingw32msvc :=
437441
CFG_RUN_i586-mingw32msvc=
438442
CFG_RUN_TARG_i586-mingw32msvc=
439443

444+
# i686-w64-mingw32 configuration
445+
CROSS_PREFIX_i686-w64-mingw32=i686-w64-mingw32-
446+
CC_i686-w64-mingw32=gcc
447+
CXX_i686-w64-mingw32=g++
448+
CPP_i686-w64-mingw32=gcc -E
449+
AR_i686-w64-mingw32=ar
450+
CFG_LIB_NAME_i686-w64-mingw32=$(1).dll
451+
CFG_STATIC_LIB_NAME_i686-w64-mingw32=$(1).lib
452+
CFG_LIB_GLOB_i686-w64-mingw32=$(1)-*.dll
453+
CFG_LIB_DSYM_GLOB_i686-w64-mingw32=$(1)-*.dylib.dSYM
454+
CFG_GCCISH_CFLAGS_i686-w64-mingw32 := -Wall -g -m32 -D_WIN32_WINNT=0x0600
455+
CFG_GCCISH_CXXFLAGS_i686-w64-mingw32 := -fno-rtti
456+
CFG_GCCISH_LINK_FLAGS_i686-w64-mingw32 := -shared -g -m32
457+
CFG_GCCISH_DEF_FLAG_i686-w64-mingw32 :=
458+
CFG_GCCISH_PRE_LIB_FLAGS_i686-w64-mingw32 :=
459+
CFG_GCCISH_POST_LIB_FLAGS_i686-w64-mingw32 :=
460+
CFG_DEF_SUFFIX_i686-w64-mingw32 := .mingw32.def
461+
CFG_INSTALL_NAME_i686-w64-mingw32 =
462+
CFG_LIBUV_LINK_FLAGS_i686-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
463+
CFG_EXE_SUFFIX_i686-w64-mingw32 := .exe
464+
CFG_WINDOWSY_i686-w64-mingw32 := 1
465+
CFG_UNIXY_i686-w64-mingw32 :=
466+
CFG_PATH_MUNGE_i686-w64-mingw32 :=
467+
CFG_LDPATH_i686-w64-mingw32 :=$(CFG_LDPATH_i686-w64-mingw32):$(PATH)
468+
CFG_RUN_i686-w64-mingw32=PATH="$(CFG_LDPATH_i686-w64-mingw32):$(1)" $(2)
469+
CFG_RUN_TARG_i686-w64-mingw32=$(call CFG_RUN_i686-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
470+
RUSTC_CROSS_FLAGS_i686-w64-mingw32 := --linker=$(CROSS_PREFIX_i686-w64-mingw32)$(CC_i686-w64-mingw32)
471+
440472
# x86_64-w64-mingw32 configuration
441-
CC_x86_64-w64-mingw32=$(CC)
442-
CXX_x86_64-w64-mingw32=$(CXX)
443-
CPP_x86_64-w64-mingw32=$(CPP)
444-
AR_x86_64-w64-mingw32=$(AR)
473+
CROSS_PREFIX_x86_64-w64-mingw32=x86_64-w64-mingw32-
474+
CC_x86_64-w64-mingw32=gcc
475+
CXX_x86_64-w64-mingw32=g++
476+
CPP_x86_64-w64-mingw32=gcc -E
477+
AR_x86_64-w64-mingw32=ar
445478
CFG_LIB_NAME_x86_64-w64-mingw32=$(1).dll
446479
CFG_STATIC_LIB_NAME_x86_64-w64-mingw32=$(1).lib
447480
CFG_LIB_GLOB_x86_64-w64-mingw32=$(1)-*.dll
448481
CFG_LIB_DSYM_GLOB_x86_64-w64-mingw32=$(1)-*.dylib.dSYM
449-
CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -Werror -g -m64 -D_WIN32_WINNT=0x0600
482+
CFG_GCCISH_CFLAGS_x86_64-w64-mingw32 := -Wall -g -m64 -D_WIN32_WINNT=0x0600
450483
CFG_GCCISH_CXXFLAGS_x86_64-w64-mingw32 := -fno-rtti
451-
CFG_GCCISH_LINK_FLAGS_x86_64-w64-mingw32 := -shared -fPIC -g -m64
484+
CFG_GCCISH_LINK_FLAGS_x86_64-w64-mingw32 := -shared -g -m64
452485
CFG_GCCISH_DEF_FLAG_x86_64-w64-mingw32 :=
453486
CFG_GCCISH_PRE_LIB_FLAGS_x86_64-w64-mingw32 :=
454487
CFG_GCCISH_POST_LIB_FLAGS_x86_64-w64-mingw32 :=
455488
CFG_DEF_SUFFIX_x86_64-w64-mingw32 := .mingw32.def
456489
CFG_INSTALL_NAME_x86_64-w64-mingw32 =
457-
CFG_LIBUV_LINK_FLAGS_x86_64-w64-mingw32 := -lWs2_32 -lpsapi -liphlpapi
490+
CFG_LIBUV_LINK_FLAGS_x86_64-w64-mingw32 := -lws2_32 -lpsapi -liphlpapi
458491
CFG_EXE_SUFFIX_x86_64-w64-mingw32 := .exe
459492
CFG_WINDOWSY_x86_64-w64-mingw32 := 1
460493
CFG_UNIXY_x86_64-w64-mingw32 :=
461494
CFG_PATH_MUNGE_x86_64-w64-mingw32 :=
462495
CFG_LDPATH_x86_64-w64-mingw32 :=$(CFG_LDPATH_x86_64-w64-mingw32):$(PATH)
463496
CFG_RUN_x86_64-w64-mingw32=PATH="$(CFG_LDPATH_x86_64-w64-mingw32):$(1)" $(2)
464497
CFG_RUN_TARG_x86_64-w64-mingw32=$(call CFG_RUN_x86_64-w64-mingw32,$(HLIB$(1)_H_$(CFG_BUILD)),$(2))
498+
RUSTC_CROSS_FLAGS_x86_64-w64-mingw32 := --linker=$(CROSS_PREFIX_x86_64-w64-mingw32)$(CC_x86_64-w64-mingw32)
465499

466500
# x86_64-unknown-freebsd configuration
467501
CC_x86_64-unknown-freebsd=$(CC)
@@ -499,6 +533,16 @@ ifdef CFG_CCACHE_BASEDIR
499533
endif
500534

501535
define CFG_MAKE_TOOLCHAIN
536+
# Prepend the tools with their prefix if cross compiling
537+
ifneq ($(CFG_BUILD),$(1))
538+
CC_$(1)=$(CROSS_PREFIX_$(1))$(CC_$(1))
539+
CXX_$(1)=$(CROSS_PREFIX_$(1))$(CXX_$(1))
540+
CPP_$(1)=$(CROSS_PREFIX_$(1))$(CPP_$(1))
541+
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
542+
543+
RUSTC_FLAGS_$(1)=$(RUSTC_CROSS_FLAGS_$(1))
544+
endif
545+
502546
CFG_COMPILE_C_$(1) = $$(CC_$(1)) \
503547
$$(CFG_GCCISH_CFLAGS) \
504548
$$(CFG_GCCISH_CFLAGS_$(1)) \

mk/rt.mk

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,37 @@
2424
# working under these assumptions).
2525

2626
# Hack for passing flags into LIBUV, see below.
27-
LIBUV_FLAGS_i386 = -m32 -fPIC -I$(S)src/etc/mingw-fix-include
28-
LIBUV_FLAGS_x86_64 = -m64 -fPIC
29-
ifeq ($(OSTYPE_$(1)), linux-androideabi)
30-
LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99
31-
else ifeq ($(OSTYPE_$(1)), apple-darwin)
32-
ifeq ($(HOST_$(1)), arm)
33-
IOS_SDK := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
34-
LIBUV_FLAGS_arm := -fPIC -std=gnu99 -I$(IOS_SDK)/usr/include -I$(IOS_SDK)/usr/include/c++/4.2.1
35-
else
36-
LIBUV_FLAGS_arm := -fPIC -std=gnu99
37-
endif
27+
define DEF_LIBUV_FLAGS
28+
ifeq ($(HOST_$(1)), i386)
29+
ifneq (,$(findstring mingw32,$(OSTYPE_$(1))))
30+
# Don't add -fPIC since it's ignored for this target
31+
# and it will just cause the build to fail due to -Werror
32+
LIBUV_FLAGS_$(1) = -m32 -I$(S)src/etc/mingw-fix-include
33+
else
34+
LIBUV_FLAGS_$(1) = -m32 -fPIC -I$(S)src/etc/mingw-fix-include
35+
endif
36+
else ifeq ($(HOST_$(1)), x86_64)
37+
ifneq (,$(findstring mingw32,$(OSTYPE_$(1))))
38+
# Don't add -fPIC since it's ignored for this target
39+
# and it will just cause the build to fail due to -Werror
40+
LIBUV_FLAGS_$(1) = -m64
41+
else
42+
LIBUV_FLAGS_$(1) = -m64 -fPIC
43+
endif
44+
else ifeq ($(HOST_$(1)), arm)
45+
ifeq ($(OSTYPE_$(1)), apple-darwin)
46+
IOS_SDK := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
47+
LIBUV_FLAGS_$(1) = -fPIC -std=gnu99 -I$(IOS_SDK)/usr/include -I$(IOS_SDK)/usr/include/c++/4.2.1
48+
else
49+
LIBUV_FLAGS_$(1) = -fPIC -std=gnu99
50+
endif
51+
else ifeq ($(HOST_$(1)), mips)
52+
LIBUV_FLAGS_$(1) = -fPIC -mips32r2 -msoft-float -mabi=32
3853
else
39-
LIBUV_FLAGS_arm = -fPIC -std=gnu99
54+
LIBUV_FLAGS_$(1) = -fPIC -std=gnu99
4055
endif
41-
LIBUV_FLAGS_mips = -fPIC -mips32r2 -msoft-float -mabi=32
56+
endef
57+
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_LIBUV_FLAGS,$(t))))
4258

4359
# when we're doing a snapshot build, we intentionally degrade as many
4460
# features in libuv and the runtime as possible, to ease portability.
@@ -222,15 +238,15 @@ $$(LIBUV_MAKEFILE_$(1)): $$(LIBUV_DEPS)
222238
ifdef CFG_WINDOWSY_$(1)
223239
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS)
224240
$$(Q)$$(MAKE) -C $$(S)src/libuv -f Makefile.mingw \
225-
CC="$$(CC) $$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
241+
CC="$$(CC_$(1)) $$(CFG_GCCISH_CFLAGS_$(1)) $$(LIBUV_FLAGS_$(1)) $$(SNAP_DEFINES)" \
226242
AR="$$(AR_$(1))" \
227243
V=$$(VERBOSE)
228244
$$(Q)cp $$(S)src/libuv/libuv.a $$@
229245
else
230246
$$(LIBUV_LIB_$(1)): $$(LIBUV_DEPS) $$(LIBUV_MAKEFILE_$(1))
231247
$$(Q)$$(MAKE) -C $$(@D) \
232-
CFLAGS="$$(CFG_GCCISH_CFLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1))) $$(SNAP_DEFINES)" \
233-
LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS) $$(LIBUV_FLAGS_$$(HOST_$(1)))" \
248+
CFLAGS="$$(CFG_GCCISH_CFLAGS_$(1)) $$(LIBUV_FLAGS_$(1)) $$(SNAP_DEFINES)" \
249+
LDFLAGS="$$(CFG_GCCISH_LINK_FLAGS_$(1)) $$(LIBUV_FLAGS_$(1))" \
234250
CC="$$(CC_$(1))" \
235251
CXX="$$(CXX_$(1))" \
236252
AR="$$(AR_$(1))" \

src/librustc/driver/driver.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,16 @@ pub fn default_configuration(sess: Session) ->
8585
abi::Mips => (@"big", @"mips", @"32")
8686
};
8787

88+
let fam = match sess.targ_cfg.os {
89+
abi::OsWin32 => @"windows",
90+
_ => @"unix"
91+
};
92+
8893
let mk = attr::mk_name_value_item_str;
8994
return ~[ // Target bindings.
90-
attr::mk_word_item(os::FAMILY.to_managed()),
95+
attr::mk_word_item(fam),
9196
mk(@"target_os", tos),
92-
mk(@"target_family", os::FAMILY.to_managed()),
97+
mk(@"target_family", fam),
9398
mk(@"target_arch", arch),
9499
mk(@"target_endian", end),
95100
mk(@"target_word_size", wordsz),

src/librustuv/uvll.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,5 +724,5 @@ extern {
724724
extern {}
725725

726726
#[cfg(target_os = "win32")]
727-
#[link_args = "-lWs2_32 -lpsapi -liphlpapi"]
727+
#[link_args = "-lws2_32 -lpsapi -liphlpapi"]
728728
extern {}

src/rt/rust_upcall.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,24 @@ typedef int _Unwind_Action;
2525
struct _Unwind_Context;
2626
struct _Unwind_Exception;
2727

28-
#ifdef __SEH__
29-
# define PERSONALITY_FUNC __gxx_personality_seh0
28+
#if __USING_SJLJ_EXCEPTIONS__
29+
# define PERSONALITY_FUNC __gxx_personality_sj0
3030
#else
31-
# ifdef __USING_SJLJ_EXCEPTIONS__
32-
# define PERSONALITY_FUNC __gxx_personality_sjlj
33-
# else
34-
# define PERSONALITY_FUNC __gxx_personality_v0
35-
# endif
31+
# ifdef __SEH__
32+
# define PERSONALITY_FUNC __gxx_personality_seh0
33+
# else
34+
# define PERSONALITY_FUNC __gxx_personality_v0
35+
# endif
36+
#endif
37+
38+
#if __USING_SJLJ_EXCEPTIONS__
39+
void _Unwind_SjLj_Resume(struct _Unwind_Exception* exception_object);
40+
41+
void _Unwind_Resume(struct _Unwind_Exception* exception_object) {
42+
_Unwind_SjLj_Resume(exception_object);
43+
}
44+
#else
45+
extern void _Unnwind_Resume(struct _Unwind_Exception* exception_object);
3646
#endif
3747

3848
_Unwind_Reason_Code

src/rt/rustrt.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ rust_get_test_int
4949
rust_pthread_mutex_t_size
5050
rust_pthread_cond_t_size
5151
rust_crit_section_size
52+
_Unwind_Resume

0 commit comments

Comments
 (0)