GHC should pass --target to CC when available
Currently GHC assumes that multi-platform toolchain support is implemented via target-prefixed toolchain binaries (e.g. x86_64-unknown-linux-cc
). However, modern Darwin distributions rather ship with a single clang
binary which is runtime-retargetable via the --target=<triple>
flag. In cases where no --target
flag is provided the toolchain compiles for the native platform of the slice which was executed. Unfortunately, it is hard to predict which slice will be executed as it appears to depend upon whether any process in the parent hierarchy is executed via Rosetta. This means that using an x86-64 cabal install
to invoke an AArch64 ghc
will result in assembler errors as CC tries to compile the AArch64 assembly produced by GHC as x86-64 syntax.
To avoid this we should test whether the toolchain supports --target
and pass it when necessary.