diff --git a/mk/llvm.mk b/mk/llvm.mk index 9e024ffa9f4..9de04bed598 100644 --- a/mk/llvm.mk +++ b/mk/llvm.mk @@ -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 diff --git a/mk/platform.mk b/mk/platform.mk index ac6cf3c5451..c2fe8e98e45 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -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 := diff --git a/mk/rt.mk b/mk/rt.mk index 35ee42f9cb4..daaf313e01b 100644 --- a/mk/rt.mk +++ b/mk/rt.mk @@ -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 diff --git a/src/etc/mingw-fix-include/README.txt b/src/etc/mingw-fix-include/README.txt new file mode 100644 index 00000000000..876db17a248 --- /dev/null +++ b/src/etc/mingw-fix-include/README.txt @@ -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. diff --git a/src/etc/mingw-fix-include/bits/c++config.h b/src/etc/mingw-fix-include/bits/c++config.h new file mode 100644 index 00000000000..4520779e275 --- /dev/null +++ b/src/etc/mingw-fix-include/bits/c++config.h @@ -0,0 +1,8 @@ +#ifndef _FIX_CXXCONFIG_H +#define _FIX_CXXCONFIG_H 1 + +#define _GLIBCXX_HAVE_FENV_H 1 + +#include_next + +#endif diff --git a/src/etc/mingw-fix-include/winbase.h b/src/etc/mingw-fix-include/winbase.h new file mode 100644 index 00000000000..3be26d1cb34 --- /dev/null +++ b/src/etc/mingw-fix-include/winbase.h @@ -0,0 +1,8 @@ +#ifndef _FIX_WINBASE_H +#define _FIX_WINBASE_H 1 + +#define NTDDK_VERSION NTDDI_VERSION + +#include_next + +#endif diff --git a/src/etc/mingw-fix-include/winsock2.h b/src/etc/mingw-fix-include/winsock2.h new file mode 100644 index 00000000000..36b58dcd1ee --- /dev/null +++ b/src/etc/mingw-fix-include/winsock2.h @@ -0,0 +1,12 @@ +#ifndef _FIX_WINSOCK2_H +#define _FIX_WINSOCK2_H 1 + +#include_next + +typedef struct pollfd { + SOCKET fd; + short events; + short revents; +} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD; + +#endif