diff options
author | John Ericson <git@JohnEricson.me> | 2019-12-30 16:40:43 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-30 16:40:43 -0800 |
commit | cfd013813e97f9bdef009a7d0f891872275e4da2 (patch) | |
tree | 35770778be2b98841be7fac886e182b1ff4de22d /pkgs | |
parent | 66bf75415f4e7a1571d41a2fed11838eb530376b (diff) | |
parent | c1fb358a78862c7ffb90f6f7a319935fb73039b4 (diff) | |
download | nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar.gz nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar.bz2 nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar.lz nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar.xz nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.tar.zst nixpkgs-cfd013813e97f9bdef009a7d0f891872275e4da2.zip |
Merge pull request #74090 from obsidiansystems/ghcjs-cross-without-cc
stdenv, haskell: bonafied GHCJS cross compilation without stdenv.cc
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/build-support/bintools-wrapper/default.nix | 2 | ||||
-rw-r--r-- | pkgs/build-support/cc-wrapper/default.nix | 2 | ||||
-rw-r--r-- | pkgs/development/compilers/ghcjs-ng/default.nix | 4 | ||||
-rw-r--r-- | pkgs/development/haskell-modules/generic-builder.nix | 12 | ||||
-rw-r--r-- | pkgs/development/haskell-modules/hoogle.nix | 5 | ||||
-rw-r--r-- | pkgs/development/interpreters/perl/default.nix | 2 | ||||
-rw-r--r-- | pkgs/stdenv/booter.nix | 13 | ||||
-rw-r--r-- | pkgs/stdenv/cross/default.nix | 8 | ||||
-rw-r--r-- | pkgs/stdenv/generic/default.nix | 16 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 30 | ||||
-rw-r--r-- | pkgs/top-level/release-cross.nix | 5 |
11 files changed, 67 insertions, 32 deletions
diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index c60abdd03e8..84020505a63 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -66,7 +66,7 @@ let else null; expand-response-params = - if buildPackages.stdenv.cc or null != null && buildPackages.stdenv.cc != "/dev/null" + if buildPackages ? stdenv && buildPackages.stdenv.hasCC && buildPackages.stdenv.cc != "/dev/null" then import ../expand-response-params { inherit (buildPackages) stdenv; } else ""; diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 151313847e4..b078bf2fbbd 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -59,7 +59,7 @@ let infixSalt = replaceStrings ["-" "."] ["_" "_"] targetPlatform.config; expand-response-params = - if buildPackages.stdenv.cc or null != null && buildPackages.stdenv.cc != "/dev/null" + if buildPackages.stdenv.hasCC && buildPackages.stdenv.cc != "/dev/null" then import ../expand-response-params { inherit (buildPackages) stdenv; } else ""; diff --git a/pkgs/development/compilers/ghcjs-ng/default.nix b/pkgs/development/compilers/ghcjs-ng/default.nix index 747ea5cf77f..7b6fbc460a9 100644 --- a/pkgs/development/compilers/ghcjs-ng/default.nix +++ b/pkgs/development/compilers/ghcjs-ng/default.nix @@ -1,4 +1,5 @@ { stdenv +, pkgsHostHost , callPackage , fetchgit , ghcjsSrcJson ? null @@ -14,7 +15,6 @@ , pkgconfig , gcc , lib -, nodePackages , ghcjsDepOverrides ? (_:_:{}) , haskell }: @@ -46,7 +46,7 @@ let enableShared = true; - socket-io = nodePackages."socket.io"; + socket-io = pkgsHostHost.nodePackages."socket.io"; # Relics of the old GHCJS build system stage1Packages = []; diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index bf16e534f3e..2ae33138696 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -40,7 +40,7 @@ in # They must be propagated to the environment of any executable linking with the library , libraryFrameworkDepends ? [], executableFrameworkDepends ? [] , homepage ? "https://hackage.haskell.org/package/${pname}" -, platforms ? with stdenv.lib.platforms; unix ++ windows # GHC can cross-compile +, platforms ? with stdenv.lib.platforms; all # GHC can cross-compile , hydraPlatforms ? null , hyperlinkSource ? true , isExecutable ? false, isLibrary ? !isExecutable @@ -131,9 +131,13 @@ let ''; crossCabalFlags = [ - "--with-ghc=${ghc.targetPrefix}ghc" + "--with-ghc=${ghcCommand}" "--with-ghc-pkg=${ghc.targetPrefix}ghc-pkg" - "--with-gcc=${stdenv.cc.targetPrefix}cc" + # Pass the "wrong" C compiler rather than none at all so packages that just + # use the C preproccessor still work, see + # https://github.com/haskell/cabal/issues/6466 for details. + "--with-gcc=${(if stdenv.hasCC then stdenv else buildPackages.stdenv).cc.targetPrefix}cc" + ] ++ optionals stdenv.hasCC [ "--with-ld=${stdenv.cc.bintools.targetPrefix}ld" "--with-ar=${stdenv.cc.bintools.targetPrefix}ar" # use the one that comes with the cross compiler. @@ -156,7 +160,9 @@ let "--libsubdir=\\$abi/\\$libname" (optionalString enableSeparateDataOutput "--datadir=$data/share/${ghc.name}") (optionalString enableSeparateDocOutput "--docdir=${docdir "$doc"}") + ] ++ optionals stdenv.hasCC [ "--with-gcc=$CC" # Clang won't work without that extra information. + ] ++ [ "--package-db=$packageConfDir" (optionalString (enableSharedExecutables && stdenv.isLinux) "--ghc-option=-optl=-Wl,-rpath=$out/lib/${ghc.name}/${pname}-${version}") (optionalString (enableSharedExecutables && stdenv.isDarwin) "--ghc-option=-optl=-Wl,-headerpad_max_install_names") diff --git a/pkgs/development/haskell-modules/hoogle.nix b/pkgs/development/haskell-modules/hoogle.nix index 0bb930a8bb3..0f620d46ccc 100644 --- a/pkgs/development/haskell-modules/hoogle.nix +++ b/pkgs/development/haskell-modules/hoogle.nix @@ -23,7 +23,8 @@ # This will build mmorph and monadControl, and have the hoogle installation # refer to their documentation via symlink so they are not garbage collected. -{ lib, stdenv, hoogle, writeText, ghc +{ lib, stdenv, buildPackages +, hoogle, writeText, ghc , packages }: @@ -53,7 +54,7 @@ let (map (lib.getOutput "doc") packages); in -stdenv.mkDerivation { +buildPackages.stdenv.mkDerivation { name = "hoogle-local-0.1"; buildInputs = [ghc hoogle]; diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix index 89979e18bdc..1f3b63625c0 100644 --- a/pkgs/development/interpreters/perl/default.nix +++ b/pkgs/development/interpreters/perl/default.nix @@ -144,7 +144,7 @@ let substituteInPlace "$out"/lib/perl5/*/*/Config_heavy.pl \ --replace "${libcInc}" /no-such-path \ --replace "${ - if stdenv.cc.cc or null != null then stdenv.cc.cc else "/no-such-path" + if stdenv.hasCC then stdenv.cc.cc else "/no-such-path" }" /no-such-path \ --replace "${stdenv.cc}" /no-such-path \ --replace "$man" /no-such-path diff --git a/pkgs/stdenv/booter.nix b/pkgs/stdenv/booter.nix index 1df05099fbf..51d617354e8 100644 --- a/pkgs/stdenv/booter.nix +++ b/pkgs/stdenv/booter.nix @@ -121,9 +121,16 @@ 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 + # This will blow up if anything uses it, but that's OK. The `if + # buildPackages.stdenv.cc.isClang then ... else ...` would blow up + # everything, so we make sure to avoid that. + buildPackages.stdenv.cc; }; in dfold folder postStage (_: {}) withAllowCustomOverrides diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix index 4e5c4cc2e83..cc49af7de3b 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 compiler provided for this platform" else if crossSystem.useLLVM or false then buildPackages.llvmPackages_8.lldClang else buildPackages.gcc; diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 2f43db9cfc2..befeb450997 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -1,6 +1,15 @@ let lib = import ../../../lib; in lib.makeOverridable ( -{ name ? "stdenv", preHook ? "", initialPath, cc, shell +{ name ? "stdenv", preHook ? "", initialPath + +, # If we don't have a C compiler, we might either have `cc = null` or `cc = + # throw ...`, but if we do have a C compiler we should definiely have `cc != + # null`. + # + # TODO(@Ericson2314): Add assert without creating infinite recursion + hasCC ? cc != null, cc + +, shell , allowedRequisites ? null, extraAttrs ? {}, overrides ? (self: super: {}), config , # The `fetchurl' to use for downloading curl and its dependencies @@ -57,7 +66,8 @@ let ../../build-support/setup-hooks/move-sbin.sh ../../build-support/setup-hooks/move-lib64.sh ../../build-support/setup-hooks/set-source-date-epoch-to-latest.sh - cc + # TODO use lib.optional instead + (if hasCC then cc else null) ]; defaultBuildInputs = extraBuildInputs; @@ -145,7 +155,7 @@ let inherit overrides; - inherit cc; + inherit cc hasCC; } # Propagate any extra attributes. For instance, we use this to diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 221636653ba..d751d907aee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8473,7 +8473,7 @@ in llvmPackages_35 = callPackage ../development/compilers/llvm/3.5 ({ isl = isl_0_14; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; }); @@ -8481,7 +8481,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_39.tools; targetLlvmLibraries = targetPackages.llvmPackages_39.libraries; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; }); @@ -8489,7 +8489,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_4.tools; targetLlvmLibraries = targetPackages.llvmPackages_4.libraries; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; }); @@ -8497,7 +8497,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_5.tools; targetLlvmLibraries = targetPackages.llvmPackages_5.libraries; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' }); @@ -8505,7 +8505,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_6.tools; targetLlvmLibraries = targetPackages.llvmPackages_6.libraries; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { # with gcc-7 on i686: undefined reference to `__divmoddi4' # Failing tests with gcc8. stdenv = overrideCC stdenv (if stdenv.hostPlatform.isi686 then gcc6 else gcc7); @@ -8515,7 +8515,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_7.tools; targetLlvmLibraries = targetPackages.llvmPackages_7.libraries; - } // stdenv.lib.optionalAttrs (buildPackages.stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && buildPackages.stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' }); @@ -8523,7 +8523,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_8.tools; targetLlvmLibraries = targetPackages.llvmPackages_8.libraries; - } // stdenv.lib.optionalAttrs (buildPackages.stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && buildPackages.stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' }); @@ -8531,7 +8531,7 @@ in inherit (stdenvAdapters) overrideCC; buildLlvmTools = buildPackages.llvmPackages_9.tools; targetLlvmLibraries = targetPackages.llvmPackages_9.libraries; - } // stdenv.lib.optionalAttrs (buildPackages.stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && buildPackages.stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' }); @@ -9406,7 +9406,7 @@ in spidermonkey_1_8_5 = callPackage ../development/interpreters/spidermonkey/1.8.5.nix { }; spidermonkey_38 = callPackage ../development/interpreters/spidermonkey/38.nix ({ inherit (darwin) libobjc; - } // (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); spidermonkey_60 = callPackage ../development/interpreters/spidermonkey/60.nix { }; @@ -10787,7 +10787,7 @@ in arrow-cpp = callPackage ../development/libraries/arrow-cpp ({ gtest = gtest.override { static = true; }; - } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = overrideCC stdenv buildPackages.gcc6; # hidden symbol `__divmoddi4' }); @@ -11869,27 +11869,27 @@ in icu58 = callPackage (import ../development/libraries/icu/58.nix fetchurl) ({ nativeBuildRoot = buildPackages.icu58.override { buildRootOnly = true; }; } // - (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); icu59 = callPackage ../development/libraries/icu/59.nix ({ nativeBuildRoot = buildPackages.icu59.override { buildRootOnly = true; }; - } // (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); icu60 = callPackage ../development/libraries/icu/60.nix ({ nativeBuildRoot = buildPackages.icu60.override { buildRootOnly = true; }; - } // (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); icu63 = callPackage ../development/libraries/icu/63.nix ({ nativeBuildRoot = buildPackages.icu63.override { buildRootOnly = true; }; - } // (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); icu64 = callPackage ../development/libraries/icu/64.nix ({ nativeBuildRoot = buildPackages.icu64.override { buildRootOnly = true; }; - } // (stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { + } // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.isi686 && stdenv.cc.isGNU) { stdenv = gcc6Stdenv; # with gcc-7: undefined reference to `__divmoddi4' })); diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 003fb9c4fff..5e392ff1b88 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -135,6 +135,11 @@ in /* Linux on the fuloong */ fuloongminipc = mapTestOnCross lib.systems.examples.fuloongminipc linuxCommon; + /* Javacript */ + ghcjs = mapTestOnCross lib.systems.examples.ghcjs { + haskell.packages.ghcjs.hello = nativePlatforms; + }; + /* Linux on Raspberrypi */ rpi = mapTestOnCross lib.systems.examples.raspberryPi rpiCommon; rpi-musl = mapTestOnCross lib.systems.examples.muslpi rpiCommon; |