rts: tweak cross-compilation to mingw32
authorSergei Trofimovich <slyfox@gentoo.org>
Sun, 23 Apr 2017 10:44:45 +0000 (11:44 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sun, 23 Apr 2017 11:00:58 +0000 (12:00 +0100)
commit745032dd02da511067c2939259ed212852187e0f
treeacbe17d77ef83edc6baf47296c2875cfc6a57977
parentfe37e2c6ab9dae6a522735114fea4dde9509250f
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>
rts/ghc.mk