[GHC] #11559: Building a cross-compiler for MIPS target on Mac OS X host fails

GHC ghc-devs at haskell.org
Mon Feb 8 13:07:22 UTC 2016


#11559: Building a cross-compiler for MIPS target on Mac OS X host fails
-------------------------------------+-------------------------------------
           Reporter:  wereHamster    |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Build System   |           Version:  7.10.3
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Building GHC
  Unknown/Multiple                   |  failed
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 I was able to build a cross-compiling GHC on a Ubuntu 16.04 host with just
 a few changes to the source code (see this article I wrote about it, the
 necessary source code changes are in the GHC/Haskell section:
 https://medium.com/@wereHamster/cross-compiling-for-the-onion-omega-
 1cf8ee80df02)

 Replicating the necessary steps on my Mac OS X laptop didn't work. The
 build system doesn't clearly distinguish between CPP/C/LD flags required
 by the host and target compilers (which in my case are quite different,
 clang for the host and gcc for the target).

 The C/LD flags determined by `--with-curses-includes/libraries` are passed
 to both the host and target compiler. The host has ncurses installed in a
 standard search path (/usr), I used this option to let the build system
 know where a version of ncurses for the target is installed (required for
 the stage2 compiler I believe). The problem here is that the host compiler
 fails to build stage1 libraries/terminfo because it first finds the cross-
 compiled ncurses library in its search path and stops because it is
 incompatible. Maybe it's a peculiarity of clang that it doesn't keep on
 searching when it comes across the first library it can find, even though
 later in the search path there is one which is compatible. I was able to
 get past that by changing some makefile rules and pass the necessary
 options only when building the stage2 terminfo.

 Similar issue is when wrong CPP options are passed to the pre-processor
 during building of stage2. The configure script adds `-m64` to CPP options
 (because the build host is x86_64 darwin). However, these options are then
 passed to the target compiler which doesn't understand `-m64`. I tried to
 track down where exactly that happens but I was not able to find where
 (`rules/build-dependencies.mk` -> `addCFileDeps` is who calls `$(CPP)`
 with the wrong flags).

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11559>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list