diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2018-02-21 20:43:10 +0100 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2018-02-21 20:43:10 +0100 |
commit | b5391b24518a5697f1f0489ace2e44f9c4015b2e (patch) | |
tree | ca3a8244a0fe6f01aa2a25dd48e350ca1559bdc0 /pkgs/build-support | |
parent | 1d15dadbec4f3d0a1f98e877e77518afe9245148 (diff) | |
parent | 4f7650bed0c5bc0142dfe60907b640d0edb7afb8 (diff) |
Merge remote-tracking branch 'upstream/master' into HEAD
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/build-bazel-package/default.nix | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pkgs/build-support/build-bazel-package/default.nix b/pkgs/build-support/build-bazel-package/default.nix new file mode 100644 index 0000000000000..349a7e5aa333b --- /dev/null +++ b/pkgs/build-support/build-bazel-package/default.nix @@ -0,0 +1,78 @@ +{ stdenv, bazel }: + +args@{ name, bazelFlags ? [], bazelTarget, buildAttrs, fetchAttrs, ... }: + +let + fArgs = removeAttrs args [ "buildAttrs" "fetchAttrs" ]; + fBuildAttrs = fArgs // buildAttrs; + fFetchAttrs = fArgs // removeAttrs fetchAttrs [ "sha256" ]; + +in stdenv.mkDerivation (fBuildAttrs // { + inherit name bazelFlags bazelTarget; + + deps = stdenv.mkDerivation (fFetchAttrs // { + name = "${name}-deps"; + inherit bazelFlags bazelTarget; + + nativeBuildInputs = fFetchAttrs.nativeBuildInputs or [] ++ [ bazel ]; + + preHook = fFetchAttrs.preHook or "" + '' + export bazelOut="$NIX_BUILD_TOP/output" + export HOME="$NIX_BUILD_TOP" + ''; + + buildPhase = fFetchAttrs.buildPhase or '' + runHook preBuild + + bazel --output_base="$bazelOut" fetch $bazelFlags $bazelTarget + + runHook postBuild + ''; + + installPhase = fFetchAttrs.installPhase or '' + runHook preInstall + + # Patching markers to make them deterministic + for i in $bazelOut/external/\@*.marker; do + sed -i 's, -\?[0-9][0-9]*$, 1,' "$i" + done + # Patching symlinks to remove build directory reference + find $bazelOut/external -type l | while read symlink; do + ln -sf $(readlink "$symlink" | sed "s,$NIX_BUILD_TOP,NIX_BUILD_TOP,") "$symlink" + done + + cp -r $bazelOut/external $out + + runHook postInstall + ''; + + dontFixup = true; + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = fetchAttrs.sha256; + }); + + nativeBuildInputs = fBuildAttrs.nativeBuildInputs or [] ++ [ (bazel.override { enableNixHacks = true; }) ]; + + preHook = fBuildAttrs.preHook or "" + '' + export bazelOut="$NIX_BUILD_TOP/output" + export HOME="$NIX_BUILD_TOP" + ''; + + preConfigure = '' + mkdir -p $bazelOut/external + cp -r $deps/* $bazelOut/external + chmod -R +w $bazelOut + find $bazelOut -type l | while read symlink; do + ln -sf $(readlink "$symlink" | sed "s,NIX_BUILD_TOP,$NIX_BUILD_TOP,") "$symlink" + done + '' + fBuildAttrs.preConfigure or ""; + + buildPhase = fBuildAttrs.buildPhase or '' + runHook preBuild + + bazel --output_base="$bazelOut" build -j $NIX_BUILD_CORES $bazelFlags $bazelTarget + + runHook postBuild + ''; +}) |