Avoid top-level with
in pkgs/build-support/cc-wrapper/default.nix (#295213)
This commit is contained in:
parent
d6cd575b84
commit
e27bcfed1c
1 changed files with 44 additions and 29 deletions
|
@ -55,31 +55,48 @@
|
|||
, includeFortifyHeaders ? null
|
||||
}:
|
||||
|
||||
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);
|
||||
|
@ -98,7 +115,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
|
||||
|
@ -111,7 +128,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
|
||||
|
@ -407,9 +424,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 = ''
|
||||
|
@ -476,7 +493,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
|
||||
|
@ -542,7 +559,7 @@ stdenv.mkDerivation {
|
|||
done
|
||||
''
|
||||
+ optionalString (libcxx.isLLVM or false) ''
|
||||
echo "-isystem ${lib.getDev libcxx}/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
|
||||
|
@ -596,7 +613,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
|
||||
|
@ -701,9 +718,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)
|
||||
(lib.escapeShellArg "-march=${targetPlatform.gcc.arch}"))}
|
||||
export march=${escapeShellArg
|
||||
(optionalString (targetPlatform ? gcc.arch)
|
||||
(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
|
||||
''
|
||||
|
@ -712,8 +729,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);
|
||||
|
||||
|
@ -736,11 +753,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;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue