Skip to content

Fix Rust build on mingw v4.0 #9254

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 18, 2013
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mk/llvm.mk
Original file line number Diff line number Diff line change
@@ -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

3 changes: 2 additions & 1 deletion mk/platform.mk
Original file line number Diff line number Diff line change
@@ -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 :=
@@ -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 :=
2 changes: 1 addition & 1 deletion mk/rt.mk
Original file line number Diff line number Diff line change
@@ -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
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
@@ -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 {
1 change: 1 addition & 0 deletions src/test/run-pass/extern-pass-TwoU64s.rs
Original file line number Diff line number Diff line change
@@ -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 {
2 changes: 2 additions & 0 deletions src/test/run-pass/extern-return-TwoU64s.rs
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 2 additions & 0 deletions src/test/run-pass/struct-return.rs
Original file line number Diff line number Diff line change
@@ -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 }