diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2019-11-24 23:07:20 +0000 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2019-11-25 00:12:38 +0000 |
commit | c739c420db5b9d56c335414be1696c57f2dbbb6a (patch) | |
tree | 448e9e0008592b80fa36e8a7edfee2d62fdcc119 | |
parent | 63bd851e9554cdb1bd703a461443723fd057933d (diff) |
Add support for cross compiling to `js-ghcjs`
This platform doesn't have a C compiler, and so relies and the changes
in the previous commit to work.
-rw-r--r-- | lib/systems/doubles.nix | 2 | ||||
-rw-r--r-- | pkgs/stdenv/booter.nix | 9 | ||||
-rw-r--r-- | pkgs/stdenv/cross/default.nix | 8 |
3 files changed, 15 insertions, 4 deletions
diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix index 58cff18e6488..f07e9da33bcb 100644 --- a/lib/systems/doubles.nix +++ b/lib/systems/doubles.nix @@ -27,6 +27,8 @@ let "riscv32-linux" "riscv64-linux" "aarch64-none" "avr-none" "arm-none" "i686-none" "x86_64-none" "powerpc-none" "msp430-none" "riscv64-none" "riscv32-none" + + "js-ghcjs" ]; allParsed = map parse.mkSystemFromString all; diff --git a/pkgs/stdenv/booter.nix b/pkgs/stdenv/booter.nix index 1df05099fbf5..8a5746522049 100644 --- a/pkgs/stdenv/booter.nix +++ b/pkgs/stdenv/booter.nix @@ -121,9 +121,12 @@ stageFuns: let postStage = buildPackages: { __raw = true; stdenv.cc = - if buildPackages.stdenv.cc.isClang or false - then buildPackages.clang - else buildPackages.gcc; + if buildPackages.stdenv.hasCC + then + if buildPackages.stdenv.cc.isClang or false + then buildPackages.clang + else buildPackages.gcc + else buildPackages.stdenv.cc; }; in dfold folder postStage (_: {}) withAllowCustomOverrides diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix index 4e5c4cc2e833..44d412e041b7 100644 --- a/pkgs/stdenv/cross/default.nix +++ b/pkgs/stdenv/cross/default.nix @@ -51,12 +51,18 @@ in lib.init bootStages ++ [ extraBuildInputs = [ ]; # Old ones run on wrong platform allowedRequisites = null; + hasCC = !targetPlatform.isGhcjs; + cc = if crossSystem.useiOSPrebuilt or false then buildPackages.darwin.iosSdkPkgs.clang else if crossSystem.useAndroidPrebuilt or false then buildPackages."androidndkPkgs_${crossSystem.ndkVer}".clang else if targetPlatform.isGhcjs - then null + # Need to use `throw` so tryEval for splicing works, ugh. Using + # `null` or skipping the attribute would cause an eval failure + # `tryEval` wouldn't catch, wrecking accessing previous stages + # when there is a C compiler and everything should be fine. + then throw "no C compile provided for this platform" else if crossSystem.useLLVM or false then buildPackages.llvmPackages_8.lldClang else buildPackages.gcc; |