[commit: ghc] master: rts: tweak cross-compilation to mingw32 (745032d)

git at git.haskell.org git at git.haskell.org
Sun Apr 23 12:55:07 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/745032dd02da511067c2939259ed212852187e0f/ghc

>---------------------------------------------------------------

commit 745032dd02da511067c2939259ed212852187e0f
Author: Sergei Trofimovich <slyfox at gentoo.org>
Date:   Sun Apr 23 11:44:45 2017 +0100

    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 at gentoo.org>


>---------------------------------------------------------------

745032dd02da511067c2939259ed212852187e0f
 rts/ghc.mk | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/rts/ghc.mk b/rts/ghc.mk
index b756d94..4842c34 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 \



More information about the ghc-commits mailing list