diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2019-11-30 08:57:52 +0100 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2019-11-30 08:58:01 +0100 |
commit | 9f8441554123a3ba06345454c0d6717e303a79ed (patch) | |
tree | a54b76aeeaaafc8ee054a9e300f41f000ddb26fe /pkgs/build-support | |
parent | 5bdd7a59c072f958af57b2daf134b983c3d4b0af (diff) | |
parent | d14baf7747b0d8e17c0a13db673b28f13e06a349 (diff) | |
download | nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar.gz nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar.bz2 nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar.lz nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar.xz nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.tar.zst nixlib-9f8441554123a3ba06345454c0d6717e303a79ed.zip |
Merge staging-next into staging
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/build-bazel-package/default.nix | 30 | ||||
-rwxr-xr-x | pkgs/build-support/fetchgit/nix-prefetch-git | 1 | ||||
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/build-crate.nix | 27 | ||||
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/default.nix | 15 | ||||
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/install-crate.nix | 22 | ||||
-rw-r--r-- | pkgs/build-support/rust/default.nix | 19 |
6 files changed, 64 insertions, 50 deletions
diff --git a/pkgs/build-support/build-bazel-package/default.nix b/pkgs/build-support/build-bazel-package/default.nix index a1a38484386d..8fa3cc55279b 100644 --- a/pkgs/build-support/build-bazel-package/default.nix +++ b/pkgs/build-support/build-bazel-package/default.nix @@ -4,10 +4,30 @@ , lib }: -args@{ name, bazelFlags ? [], bazelBuildFlags ? [], bazelFetchFlags ? [], bazelTarget, buildAttrs, fetchAttrs, ... }: +args@{ + name +, bazelFlags ? [] +, bazelBuildFlags ? [] +, bazelFetchFlags ? [] +, bazelTarget +, buildAttrs +, fetchAttrs + +# Newer versions of Bazel are moving away from built-in rules_cc and instead +# allow fetching it as an external dependency in a WORKSPACE file[1]. If +# removed in the fixed-output fetch phase, building will fail to download it. +# This can be seen e.g. in #73097 +# +# This option allows configuring the removal of rules_cc in cases where a +# project depends on it via an external dependency. +# +# [1]: https://github.com/bazelbuild/rules_cc +, removeRulesCC ? true +, ... +}: let - fArgs = removeAttrs args [ "buildAttrs" "fetchAttrs" ]; + fArgs = removeAttrs args [ "buildAttrs" "fetchAttrs" "removeRulesCC" ]; fBuildAttrs = fArgs // buildAttrs; fFetchAttrs = fArgs // removeAttrs fetchAttrs [ "sha256" ]; @@ -24,8 +44,12 @@ in stdenv.mkDerivation (fBuildAttrs // { export bazelOut="$(echo ''${NIX_BUILD_TOP}/output | sed -e 's,//,/,g')" export bazelUserRoot="$(echo ''${NIX_BUILD_TOP}/tmp | sed -e 's,//,/,g')" export HOME="$NIX_BUILD_TOP" + export USER="nix" # This is needed for git_repository with https remotes export GIT_SSL_CAINFO="${cacert}/etc/ssl/certs/ca-bundle.crt" + # This is needed for Bazel fetchers that are themselves programs (e.g. + # rules_go using the go toolchain) + export SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt" ''; buildPhase = fFetchAttrs.buildPhase or '' @@ -60,7 +84,7 @@ in stdenv.mkDerivation (fBuildAttrs // { # Remove all built in external workspaces, Bazel will recreate them when building rm -rf $bazelOut/external/{bazel_tools,\@bazel_tools.marker} - rm -rf $bazelOut/external/{rules_cc,\@rules_cc.marker} + ${if removeRulesCC then "rm -rf $bazelOut/external/{rules_cc,\\@rules_cc.marker}" else ""} rm -rf $bazelOut/external/{embedded_jdk,\@embedded_jdk.marker} rm -rf $bazelOut/external/{local_*,\@local_*.marker} diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index 931be1a37007..8020ba46f3f1 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -42,6 +42,7 @@ Options: --url url Any url understood by 'git clone'. --rev ref Any sha1 or references (such as refs/heads/master) --hash h Expected hash. + --branch-name Branch name to check out into --deepClone Clone the entire repository. --no-deepClone Make a shallow clone of just the required ref. --leave-dotGit Keep the .git directories. diff --git a/pkgs/build-support/rust/build-rust-crate/build-crate.nix b/pkgs/build-support/rust/build-rust-crate/build-crate.nix index e0a52e62561b..db187d2ac14a 100644 --- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, echo_build_heading, noisily, makeDeps }: +{ lib, stdenv, echo_build_heading, noisily, makeDeps, rust }: { crateName, dependencies, crateFeatures, crateRenames, libName, release, libPath, @@ -13,17 +13,6 @@ (if release then "-C opt-level=3" else "-C debuginfo=2") (["-C codegen-units=$NIX_BUILD_CORES"] ++ extraRustcOpts); rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}"; - - # Some platforms have different names for rustc. - rustPlatform = - with stdenv.hostPlatform.parsed; - let cpu_ = if cpu.name == "armv7a" then "armv7" - else cpu.name; - vendor_ = vendor.name; - kernel_ = kernel.name; - abi_ = abi.name; - in - "${cpu_}-${vendor_}-${kernel_}-${abi_}"; in '' runHook preBuild norm="" @@ -67,7 +56,7 @@ ${crateFeatures} --out-dir target/bin --emit=dep-info,link -L dependency=target/deps \ $LINK ${deps}$EXTRA_LIB --cap-lints allow \ $BUILD_OUT_DIR $EXTRA_BUILD $EXTRA_FEATURES --color ${colors} \ - ${if stdenv.hostPlatform != stdenv.buildPlatform then "--target ${rustPlatform} -C linker=${stdenv.hostPlatform.config}-gcc" else ""} + ${if stdenv.hostPlatform != stdenv.buildPlatform then "--target ${rust.toRustTarget stdenv.hostPlatform} -C linker=${stdenv.hostPlatform.config}-gcc" else ""} if [ "$crate_name_" != "$crate_name" ]; then mv target/bin/$crate_name_ target/bin/$crate_name fi @@ -91,18 +80,18 @@ echo "$EXTRA_LINK_SEARCH" | while read i; do if [[ ! -z "$i" ]]; then - for lib in $i; do - echo "-L $lib" >> target/link - L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/lib#") + for library in $i; do + echo "-L $library" >> target/link + L=$(echo $library | sed -e "s#$(pwd)/target/build#$lib/lib#") echo "-L $L" >> target/link.final done fi done echo "$EXTRA_LINK" | while read i; do if [[ ! -z "$i" ]]; then - for lib in $i; do - echo "-l $lib" >> target/link - echo "-l $lib" >> target/link.final + for library in $i; do + echo "-l $library" >> target/link + echo "-l $library" >> target/link.final done fi done diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index 6534e21c0f0c..edff3941636c 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -4,7 +4,7 @@ # This can be useful for deploying packages with NixOps, and to share # binary dependencies between projects. -{ lib, stdenv, defaultCrateOverrides, fetchCrate, rustc }: +{ lib, stdenv, defaultCrateOverrides, fetchCrate, rustc, rust }: let # This doesn't appear to be officially documented anywhere yet. @@ -22,9 +22,9 @@ let else extern; in (if lib.lists.any (x: x == "lib") dep.crateType then - " --extern ${name}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib" + " --extern ${name}=${dep.lib}/lib/lib${extern}-${dep.metadata}.rlib" else - " --extern ${name}=${dep.out}/lib/lib${extern}-${dep.metadata}${stdenv.hostPlatform.extensions.sharedLibrary}") + " --extern ${name}=${dep.lib}/lib/lib${extern}-${dep.metadata}${stdenv.hostPlatform.extensions.sharedLibrary}") ) dependencies); echo_build_heading = colors: '' @@ -59,7 +59,7 @@ let ''; configureCrate = import ./configure-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps; }; - buildCrate = import ./build-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps; }; + buildCrate = import ./build-crate.nix { inherit lib stdenv echo_build_heading noisily makeDeps rust; }; installCrate = import ./install-crate.nix; in @@ -96,12 +96,12 @@ stdenv.mkDerivation (rec { buildInputs = (crate.buildInputs or []) ++ buildInputs_; dependencies = builtins.map - (dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; }) + (dep: lib.getLib (dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; })) dependencies_; buildDependencies = builtins.map - (dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; }) + (dep: lib.getLib (dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; })) buildDependencies_; completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies); @@ -160,6 +160,9 @@ stdenv.mkDerivation (rec { }; installPhase = installCrate crateName metadata; + outputs = [ "out" "lib" ]; + outputDev = [ "lib" ]; + } // extraDerivationAttrs )) { rust = rustc; diff --git a/pkgs/build-support/rust/build-rust-crate/install-crate.nix b/pkgs/build-support/rust/build-rust-crate/install-crate.nix index 3b0282621ea1..934c3a031764 100644 --- a/pkgs/build-support/rust/build-rust-crate/install-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/install-crate.nix @@ -1,24 +1,26 @@ crateName: metadata: '' runHook preInstall - mkdir -p $out + # always create $out even if we do not have binaries. We are detecting binary targets during compilation, if those are missing there is no way to only have $lib + mkdir $out if [[ -s target/env ]]; then - cp target/env $out/env + mkdir -p $lib + cp target/env $lib/env fi if [[ -s target/link.final ]]; then - mkdir -p $out/lib - cp target/link.final $out/lib/link + mkdir -p $lib/lib + cp target/link.final $lib/lib/link fi if [[ "$(ls -A target/lib)" ]]; then - mkdir -p $out/lib - cp target/lib/* $out/lib #*/ - for lib in $out/lib/*.so $out/lib/*.dylib; do #*/ - ln -s $lib $(echo $lib | sed -e "s/-${metadata}//") + mkdir -p $lib/lib + cp target/lib/* $lib/lib #*/ + for library in $lib/lib/*.so $lib/lib/*.dylib; do #*/ + ln -s $library $(echo $library | sed -e "s/-${metadata}//") done fi if [[ "$(ls -A target/build)" ]]; then # */ - mkdir -p $out/lib - cp -r target/build/* $out/lib # */ + mkdir -p $lib/lib + cp -r target/build/* $lib/lib # */ fi if [[ -d target/bin ]]; then if [[ "$(ls -A target/bin)" ]]; then diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix index f0f949b22056..1d8e4448674e 100644 --- a/pkgs/build-support/rust/default.nix +++ b/pkgs/build-support/rust/default.nix @@ -1,4 +1,4 @@ -{ stdenv, cacert, git, cargo, rustc, fetchcargo, buildPackages, windows }: +{ stdenv, cacert, git, rust, cargo, rustc, fetchcargo, buildPackages, windows }: { name ? "${args.pname}-${args.version}" , cargoSha256 ? "unset" @@ -46,12 +46,7 @@ let cargoDepsCopy="$sourceRoot/${cargoVendorDir}" ''; - hostConfig = stdenv.hostPlatform.config; - - rustHostConfig = { - x86_64-pc-mingw32 = "x86_64-pc-windows-gnu"; - }.${hostConfig} or hostConfig; - rustTarget = if target == null then rustHostConfig else target; + rustTarget = if target == null then rust.toRustTarget stdenv.hostPlatform else target; ccForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"; cxxForBuild="${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++"; @@ -87,7 +82,7 @@ stdenv.mkDerivation (args // { --subst-var-by vendor "$(pwd)/$cargoDepsCopy" cat >> .cargo/config <<'EOF' - [target."${stdenv.buildPlatform.config}"] + [target."${rust.toRustTarget stdenv.buildPlatform}"] "linker" = "${ccForBuild}" ${stdenv.lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) '' [target."${rustTarget}"] @@ -129,10 +124,10 @@ stdenv.mkDerivation (args // { ( set -x env \ - "CC_${stdenv.buildPlatform.config}"="${ccForBuild}" \ - "CXX_${stdenv.buildPlatform.config}"="${cxxForBuild}" \ - "CC_${stdenv.hostPlatform.config}"="${ccForHost}" \ - "CXX_${stdenv.hostPlatform.config}"="${cxxForHost}" \ + "CC_${rust.toRustTarget stdenv.buildPlatform}"="${ccForBuild}" \ + "CXX_${rust.toRustTarget stdenv.buildPlatform}"="${cxxForBuild}" \ + "CC_${rust.toRustTarget stdenv.hostPlatform}"="${ccForHost}" \ + "CXX_${rust.toRustTarget stdenv.hostPlatform}"="${cxxForHost}" \ cargo build \ ${stdenv.lib.optionalString (buildType == "release") "--release"} \ --target ${rustTarget} \ |