summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2017-04-23 11:44:45 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2017-04-23 12:00:58 +0100
commit745032dd02da511067c2939259ed212852187e0f (patch)
treeacbe17d77ef83edc6baf47296c2875cfc6a57977
parentfe37e2c6ab9dae6a522735114fea4dde9509250f (diff)
downloadhaskell-745032dd02da511067c2939259ed212852187e0f.tar.gz
rts: tweak cross-compilation to mingw32
Found the problem on x86_64-linux host where I tried to cross-compile GHC to windows as: $ ./configure --target=i686-w64-mingw32 \ Windres=i686-w64-mingw32-windres \ DllWrap=i686-w64-mingw32-dllwrap As a result build failed as POSIX bits of RTS. For example 'rts/posix/OSMem.c' contains unix-specific mmap() syscalls and constants and thus can't be compiled by i686-w64-mingw32 toolchain. It's caused by the following part of 'rts/ghc.mk': ifeq "$(HostOS_CPP)" "mingw32" ALL_DIRS += win32 else ALL_DIRS += posix endif In our case _CPP variables are defined this way (project.mk): BuildOS_CPP = linux HostOS_CPP = linux TargetOS_CPP = mingw32 RTS should never be built for 'BuildOS' or 'HostOS' as it's always built by ghc-stage1 (targeted at TargetOS). The change is to flip 'HostOS_CPP' to 'TargetOS_CPP' in 'rts/ghc.mk'. Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-rw-r--r--rts/ghc.mk10
1 files changed, 5 insertions, 5 deletions
diff --git a/rts/ghc.mk b/rts/ghc.mk
index b756d942ca..4842c346fe 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -39,7 +39,7 @@ $(eval $(call all-target,rts,$(ALL_RTS_LIBS)))
ALL_DIRS = hooks sm eventlog linker
-ifeq "$(HostOS_CPP)" "mingw32"
+ifeq "$(TargetOS_CPP)" "mingw32"
ALL_DIRS += win32
else
ALL_DIRS += posix
@@ -92,7 +92,7 @@ rts/dist/libs.depend : $$(ghc-pkg_INPLACE) | $$(dir $$@)/.
# These are made from rts/win32/libHS*.def which contain lists of
# all the symbols in those libraries used by the RTS.
#
-ifeq "$(HostOS_CPP)" "mingw32"
+ifeq "$(TargetOS_CPP)" "mingw32"
ALL_RTS_DEF_LIBNAMES = base ghc-prim
ALL_RTS_DEF_LIBS = \
@@ -116,7 +116,7 @@ endif
ifneq "$(BINDIST)" "YES"
ifneq "$(UseSystemLibFFI)" "YES"
-ifeq "$(HostOS_CPP)" "mingw32"
+ifeq "$(TargetOS_CPP)" "mingw32"
rts/dist/build/$(LIBFFI_DLL): libffi/build/inst/bin/$(LIBFFI_DLL)
cp $< $@
else
@@ -147,7 +147,7 @@ rts_dist_$1_CC_OPTS += -fno-omit-frame-pointer -g -O0
endif
ifneq "$$(findstring dyn, $1)" ""
-ifeq "$$(HostOS_CPP)" "mingw32"
+ifeq "$$(TargetOS_CPP)" "mingw32"
rts_dist_$1_CC_OPTS += -DCOMPILING_WINDOWS_DLL
endif
rts_dist_$1_CC_OPTS += -DDYNAMIC
@@ -197,7 +197,7 @@ endif
# Making a shared library for the RTS.
ifneq "$$(findstring dyn, $1)" ""
-ifeq "$$(HostOS_CPP)" "mingw32"
+ifeq "$$(TargetOS_CPP)" "mingw32"
$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) rts/dist/libs.depend rts/dist/build/$$(LIBFFI_DLL)
"$$(RM)" $$(RM_OPTS) $$@
"$$(rts_dist_HC)" -this-unit-id rts -shared -dynamic -dynload deploy \