diff options
author | Vladimír Čunát <v@cunat.cz> | 2024-03-21 09:21:35 +0100 |
---|---|---|
committer | Vladimír Čunát <v@cunat.cz> | 2024-03-21 09:21:50 +0100 |
commit | f373ad52f1fa4187abeb7d1ce1056314bcbc9980 (patch) | |
tree | dcb787fdf37f273ed3df8e74a8032fc92d780120 /pkgs/build-support/cc-wrapper/default.nix | |
parent | 2015f3cc71627e56ba3872e640de267d1723758b (diff) | |
parent | 37550e3dfaccce9cb02e6cb48d9d2c58b372d938 (diff) |
Merge master into haskell-updates
Diffstat (limited to 'pkgs/build-support/cc-wrapper/default.nix')
-rw-r--r-- | pkgs/build-support/cc-wrapper/default.nix | 78 |
1 files changed, 48 insertions, 30 deletions
diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index b47ee454da030..569f6875e1fb5 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -59,31 +59,48 @@ , disableMarch ? false }: -with lib; - assert nativeTools -> !propagateDoc && nativePrefix != ""; -assert !nativeTools -> - cc != null && coreutils != null && gnugrep != null; +assert !nativeTools -> cc != null && coreutils != null && gnugrep != null; assert !(nativeLibc && noLibc); assert (noLibc || nativeLibc) == (libc == null); let - stdenv = stdenvNoCC; + inherit (lib) + attrByPath + concatMapStrings + concatStringsSep + escapeShellArg + getBin + getDev + getLib + getName + getVersion + mapAttrsToList + optional + optionalAttrs + optionals + optionalString + removePrefix + replaceStrings + toList + versionAtLeast + ; + inherit (stdenv) hostPlatform targetPlatform; + stdenv = stdenvNoCC; + includeFortifyHeaders' = if includeFortifyHeaders != null then includeFortifyHeaders else (targetPlatform.libc == "musl" && isGNU); # Prefix for binaries. Customarily ends with a dash separator. # - # TODO(@Ericson2314) Make unconditional, or optional but always true by - # default. - targetPrefix = lib.optionalString (targetPlatform != hostPlatform) - (targetPlatform.config + "-"); + # TODO(@Ericson2314) Make unconditional, or optional but always true by default. + targetPrefix = optionalString (targetPlatform != hostPlatform) (targetPlatform.config + "-"); - ccVersion = lib.getVersion cc; - ccName = lib.removePrefix targetPrefix (lib.getName cc); + ccVersion = getVersion cc; + ccName = removePrefix targetPrefix (getName cc); libc_bin = optionalString (libc != null) (getBin libc); libc_dev = optionalString (libc != null) (getDev libc); @@ -102,7 +119,7 @@ let suffixSalt = replaceStrings ["-" "."] ["_" "_"] targetPlatform.config; expand-response-params = - lib.optionalString ((buildPackages.stdenv.hasCC or false) && buildPackages.stdenv.cc != "/dev/null") (import ../expand-response-params { inherit (buildPackages) stdenv; }); + optionalString ((buildPackages.stdenv.hasCC or false) && buildPackages.stdenv.cc != "/dev/null") (import ../expand-response-params { inherit (buildPackages) stdenv; }); useGccForLibs = useCcForLibs && libcxx == null @@ -115,7 +132,7 @@ let + optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}"; # Analogously to cc_solib and gccForLibs_solib - libcxx_solib = "${lib.getLib libcxx}/lib"; + libcxx_solib = "${getLib libcxx}/lib"; # The following two functions, `isGccArchSupported` and # `isGccTuneSupported`, only handle those situations where a flag @@ -411,9 +428,9 @@ stdenv.mkDerivation { setupHooks = [ ../setup-hooks/role.bash - ] ++ lib.optional (cc.langC or true) ./setup-hook.sh - ++ lib.optional (cc.langFortran or false) ./fortran-hook.sh - ++ lib.optional (targetPlatform.isWindows) (stdenv.mkDerivation { + ] ++ optional (cc.langC or true) ./setup-hook.sh + ++ optional (cc.langFortran or false) ./fortran-hook.sh + ++ optional (targetPlatform.isWindows) (stdenv.mkDerivation { name = "win-dll-hook.sh"; dontUnpack = true; installPhase = '' @@ -480,7 +497,7 @@ stdenv.mkDerivation { # when building e.g. firefox), lld is able to find libgcc_s.so + concatMapStrings (libgcc: '' echo "-L${libgcc}/lib" >> $out/nix-support/cc-ldflags - '') (lib.toList (gccForLibs.libgcc or []))) + '') (toList (gccForLibs.libgcc or []))) ## ## General libc support @@ -546,9 +563,12 @@ stdenv.mkDerivation { done '' + optionalString (libcxx.isLLVM or false) '' - echo "-isystem ${lib.getDev libcxx}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags - echo "-isystem ${lib.getDev libcxx.cxxabi}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags + echo "-isystem ${getDev libcxx}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags echo "-stdlib=libc++" >> $out/nix-support/libcxx-ldflags + '' + # can remove once LLVM9 and LLVM11 are dropped from nixpkgs + + optionalString (libcxx.isLLVM or false && lib.versionOlder (lib.getVersion libcxx) "12" && libcxx ? cxxabi.libName) '' + echo "-isystem ${lib.getDev libcxx.cxxabi}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags echo "-l${libcxx.cxxabi.libName}" >> $out/nix-support/libcxx-ldflags '' @@ -597,7 +617,7 @@ stdenv.mkDerivation { ## Hardening support ## + '' - export hardening_unsupported_flags="${builtins.concatStringsSep " " ccHardeningUnsupportedFlags}" + export hardening_unsupported_flags="${concatStringsSep " " ccHardeningUnsupportedFlags}" '' # Machine flags. These are necessary to support @@ -708,9 +728,9 @@ stdenv.mkDerivation { ## + optionalString isClang '' # Escape twice: once for this script, once for the one it gets substituted into. - export march=${lib.escapeShellArg - (lib.optionalString (targetPlatform ? gcc.arch && !disableMarch) - (lib.escapeShellArg "-march=${targetPlatform.gcc.arch}"))} + export march=${escapeShellArg + (optionalString (targetPlatform ? gcc.arch && !disableMarch) + (escapeShellArg "-march=${targetPlatform.gcc.arch}"))} export defaultTarget=${targetPlatform.config} substituteAll ${./add-clang-cc-cflags-before.sh} $out/nix-support/add-local-cc-cflags-before.sh '' @@ -719,8 +739,8 @@ stdenv.mkDerivation { ## Extra custom steps ## + extraBuildCommands - + lib.strings.concatStringsSep "; " - (lib.attrsets.mapAttrsToList + + concatStringsSep "; " + (mapAttrsToList (name: value: "echo ${toString value} >> $out/nix-support/${name}") nixSupport); @@ -743,11 +763,9 @@ stdenv.mkDerivation { }; meta = - let cc_ = lib.optionalAttrs (cc != null) cc; in - (lib.optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) // - { description = - lib.attrByPath ["meta" "description"] "System C compiler" cc_ - + " (wrapper script)"; + let cc_ = optionalAttrs (cc != null) cc; in + (optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) // + { description = attrByPath ["meta" "description"] "System C compiler" cc_ + " (wrapper script)"; priority = 10; mainProgram = if name != "" then name else ccName; }; |