@@ -68,11 +68,15 @@ let
69 # TODO check if this posible fix for segfaults works or not.
69 # TODO check if this posible fix for segfaults works or not.
70 targetLibffi =
70 targetLibffi =
71+ # on native platforms targetPlatform.{libffi, gmp} do not exist; thus fall back
72+ # to the non-targetPlatform version in those cases.
73+ let targetLibffi = targetPackages.libffi or libffi; in
74+ # we need to set `dontDisableStatic` for musl for libffi to work.
71 if stdenv.targetPlatform.isMusl
75 if stdenv.targetPlatform.isMusl
72− then targetPackages.libffi.overrideAttrs (old: { dontDisableStatic = true; })
76+ then targetLibffi.overrideAttrs (old: { dontDisableStatic = true; })
73− else if targetPlatform != hostPlatform
77+ else targetLibffi;
74− then targetPackages.libffi
79+ targetGmp = targetPackages.gmp or gmp;
77 # TODO(@Ericson2314) Make unconditional
81 # TODO(@Ericson2314) Make unconditional
78 targetPrefix = stdenv.lib.optionalString
82 targetPrefix = stdenv.lib.optionalString
@@ -195,16 +199,14 @@ in let configured-src = stdenv.mkDerivation (rec {
198− # TODO(@Ericson2314): Always pass "--target" and always prefix.
199− configurePlatforms = [ "build" "host" ]
202+ configurePlatforms = [ "build" "host" "target" ];
200− ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
201 # `--with` flags for libraries needed for RTS linker
203 # `--with` flags for libraries needed for RTS linker
202 configureFlags = [
204 configureFlags = [
203 "--datadir=$doc/share/doc/ghc"
205 "--datadir=$doc/share/doc/ghc"
204 "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
206 "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
205 ] ++ stdenv.lib.optionals (targetLibffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetLibffi.dev}/include" "--with-ffi-libraries=${targetLibffi.out}/lib"
207 ] ++ stdenv.lib.optionals (targetLibffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetLibffi.dev}/include" "--with-ffi-libraries=${targetLibffi.out}/lib"
206 ] ++ stdenv.lib.optional (!enableIntegerSimple) [
208 ] ++ stdenv.lib.optional (!enableIntegerSimple) [
207− "--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
209+ "--with-gmp-includes=${targetGmp.dev}/include" "--with-gmp-libraries=${targetGmp.out}/lib"
208 ] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
210 ] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
209 "--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
211 "--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
210 ] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
212 ] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [