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

#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

#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 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Building GHC | Unknown/Multiple failed | Test Case: Blocked By: | Blocking: Related Tickets: #10456 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by thomie): * related: => #10456 Comment: The second issue sounds like #10456, which has an in-progress patch in Phab:D998. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11559#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC