
#11470: Support changing cross compiler target at runtime -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #11378 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by luite): I'd be happy to help with this. Fortunately there is not all that much information about the target platform hardcoded in GHC anymore. I think a new cross compilation target could be added by pointing GHC to some target-specific `settings` file. This file should also specify how to run TH and GHCi (for example via the external interpreter for general TH and by loading code from another package DB for host-only TH) We would create an `initialize-target` tool that: * queries the toolchain and generates an appropriate `settings` file * (possibly) builds an initial set of packages for the target, similar to what ships with GHC I think this is still reasonably straightforward, and I think it would be a good first step, and would mainly involve separating part of the build system and making sure that all relevant configuration options can indeed be specified by `settings`. This should allow cross compilers to load native code for plugins (the code generator for the target could even be a plugin). For the next step, my main concern would be how to match up the host and target architecture package databases for things like host-only TH. Say a cross compiler needs to run some host-only TH, which means it probably needs to load some code from a host-arch package DB: * Who is responsible for the code to be there? Will `cabal-install` make sure that a host version of a package is built and registered before a target version? * ABI hashes will likely be different between architectures: do we just require transitive version numbers to be the same? Or should there be a way to link hashes between architectures? (if we match on version numbers, i suspect we may lose things like cabal flag settings) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11470#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler