Skip to content

Commit

Permalink
auto merge of #9254 : vadimcn/rust/fix-mingw-v4, r=brson
Browse files Browse the repository at this point in the history
Fix Rust build on mingw v4.0
See #9246 for details.
  • Loading branch information
bors committed Sep 18, 2013
2 parents 7dd9344 + e6832e6 commit adb638f
Show file tree
Hide file tree
Showing 11 changed files with 44 additions and 3 deletions.
2 changes: 1 addition & 1 deletion mk/llvm.mk
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ LLVM_STAMP_$(1) = $$(CFG_LLVM_BUILD_DIR_$(1))/llvm-auto-clean-stamp

$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
@$$(call E, make: llvm)
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV)
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV_$(1))
$$(Q)touch $$(LLVM_CONFIG_$(1))
endif

Expand Down
3 changes: 2 additions & 1 deletion mk/platform.mk
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ AR_i686-pc-mingw32=$(AR)
CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600
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
CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti
CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g -m32
CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 :=
Expand All @@ -361,6 +361,7 @@ CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
CFG_INSTALL_NAME_i686-pc-mingw32 =
CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lWs2_32 -lpsapi -liphlpapi
CFG_LLVM_BUILD_ENV_i686-pc-mingw32 := CPATH=$(CFG_SRC_DIR)src/etc/mingw-fix-include
CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
CFG_WINDOWSY_i686-pc-mingw32 := 1
CFG_UNIXY_i686-pc-mingw32 :=
Expand Down
2 changes: 1 addition & 1 deletion mk/rt.mk
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
# working under these assumptions).

# Hack for passing flags into LIBUV, see below.
LIBUV_FLAGS_i386 = -m32 -fPIC
LIBUV_FLAGS_i386 = -m32 -fPIC -I$(S)src/etc/mingw-fix-include
LIBUV_FLAGS_x86_64 = -m64 -fPIC
ifeq ($(OSTYPE_$(1)), linux-androideabi)
LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99
Expand Down
6 changes: 6 additions & 0 deletions src/etc/mingw-fix-include/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
The purpose of these headers is to fix issues with mingw v4.0, as described in #9246.

This works by adding this directory to GCC include search path before mingw system headers directories,
so we can intercept their inclusions and add missing definitions without having to modify files in mingw/include.

Once mingw fixes all 3 issues mentioned in #9246, this directory and all references to it from rust/mk/* may be removed.
8 changes: 8 additions & 0 deletions src/etc/mingw-fix-include/bits/c++config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef _FIX_CXXCONFIG_H
#define _FIX_CXXCONFIG_H 1

#define _GLIBCXX_HAVE_FENV_H 1

#include_next <bits/c++config.h>

#endif
8 changes: 8 additions & 0 deletions src/etc/mingw-fix-include/winbase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef _FIX_WINBASE_H
#define _FIX_WINBASE_H 1

#define NTDDK_VERSION NTDDI_VERSION

#include_next <winbase.h>

#endif
12 changes: 12 additions & 0 deletions src/etc/mingw-fix-include/winsock2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef _FIX_WINSOCK2_H
#define _FIX_WINSOCK2_H 1

#include_next <winsock2.h>

typedef struct pollfd {
SOCKET fd;
short events;
short revents;
} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD;

#endif
1 change: 1 addition & 0 deletions src/test/run-pass/extern-pass-TwoU64s-ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// except according to those terms.

// Test that we ignore modes when calling extern functions.
// xfail-fast #9205

#[deriving(Eq)]
struct TwoU64s {
Expand Down
1 change: 1 addition & 0 deletions src/test/run-pass/extern-pass-TwoU64s.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// xfail-fast This works standalone on windows but not with check-fast.
// possibly because there is another test that uses this extern fn but gives it
// a different signature
// xfail-fast #9205

#[deriving(Eq)]
struct TwoU64s {
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/extern-return-TwoU64s.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// xfail-fast #9205

struct TwoU64s {
one: u64, two: u64
}
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/struct-return.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// xfail-fast #9205

pub struct Quad { a: u64, b: u64, c: u64, d: u64 }
pub struct Floats { a: f64, b: u8, c: f64 }

Expand Down

0 comments on commit adb638f

Please sign in to comment.