Merge pull request #192639 from ylecornec/ylecornec/buildBazelPackage-tests

main
Sandro 2 years ago committed by GitHub
commit 23d0060889
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 84
      pkgs/build-support/build-bazel-package/default.nix
  2. 23
      pkgs/development/tools/verible/default.nix

@ -13,8 +13,10 @@ args@{
, bazel ? bazelPkg
, bazelFlags ? []
, bazelBuildFlags ? []
, bazelTestFlags ? []
, bazelFetchFlags ? []
, bazelTarget
, bazelTestTargets ? []
, buildAttrs
, fetchAttrs
@ -50,13 +52,33 @@ let
fArgs = removeAttrs args [ "buildAttrs" "fetchAttrs" "removeRulesCC" ];
fBuildAttrs = fArgs // buildAttrs;
fFetchAttrs = fArgs // removeAttrs fetchAttrs [ "sha256" ];
in stdenv.mkDerivation (fBuildAttrs // {
inherit name bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget;
bazelCmd = { cmd, additionalFlags, targets }:
lib.optionalString (targets != [ ]) ''
# See footnote called [USER and BAZEL_USE_CPP_ONLY_TOOLCHAIN variables]
BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
USER=homeless-shelter \
bazel \
--batch \
--output_base="$bazelOut" \
--output_user_root="$bazelUserRoot" \
${cmd} \
--curses=no \
-j $NIX_BUILD_CORES \
"''${copts[@]}" \
"''${host_copts[@]}" \
"''${linkopts[@]}" \
"''${host_linkopts[@]}" \
$bazelFlags \
${lib.strings.concatStringsSep " " additionalFlags} \
${lib.strings.concatStringsSep " " targets}
'';
in
stdenv.mkDerivation (fBuildAttrs // {
inherit name bazelFlags bazelBuildFlags bazelTestFlags bazelFetchFlags bazelTarget bazelTestTargets;
deps = stdenv.mkDerivation (fFetchAttrs // {
name = "${name}-deps.tar.gz";
inherit bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget;
inherit bazelFlags bazelBuildFlags bazelTestFlags bazelFetchFlags bazelTarget bazelTestTargets;
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ fFetchAttrs.impureEnvVars or [];
@ -77,14 +99,7 @@ in stdenv.mkDerivation (fBuildAttrs // {
buildPhase = fFetchAttrs.buildPhase or ''
runHook preBuild
# Bazel computes the default value of output_user_root before parsing the
# flag. The computation of the default value involves getting the $USER
# from the environment. I don't have that variable when building with
# sandbox enabled. Code here
# https://github.com/bazelbuild/bazel/blob/9323c57607d37f9c949b60e293b573584906da46/src/main/cpp/startup_options.cc#L123-L124
#
# On macOS Bazel will use the system installed Xcode or CLT toolchain instead of the one in the PATH unless we pass BAZEL_USE_CPP_ONLY_TOOLCHAIN
# See footnote called [USER and BAZEL_USE_CPP_ONLY_TOOLCHAIN variables].
# We disable multithreading for the fetching phase since it can lead to timeouts with many dependencies/threads:
# https://github.com/bazelbuild/bazel/issues/6502
BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
@ -97,7 +112,8 @@ in stdenv.mkDerivation (fBuildAttrs // {
--loading_phase_threads=1 \
$bazelFlags \
$bazelFetchFlags \
$bazelTarget
${bazelTarget} \
${lib.strings.concatStringsSep " " bazelTestTargets}
runHook postBuild
'';
@ -189,7 +205,7 @@ in stdenv.mkDerivation (fBuildAttrs // {
# the wrappers are expecting will not be set. So instead of relying on the
# wrappers picking them up, pass them in explicitly via `--copt`, `--linkopt`
# and related flags.
#
copts=()
host_copts=()
linkopts=()
@ -209,23 +225,29 @@ in stdenv.mkDerivation (fBuildAttrs // {
done
fi
BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
USER=homeless-shelter \
bazel \
--batch \
--output_base="$bazelOut" \
--output_user_root="$bazelUserRoot" \
build \
--curses=no \
-j $NIX_BUILD_CORES \
"''${copts[@]}" \
"''${host_copts[@]}" \
"''${linkopts[@]}" \
"''${host_linkopts[@]}" \
$bazelFlags \
$bazelBuildFlags \
$bazelTarget
${
bazelCmd {
cmd = "test";
additionalFlags =
["--test_output=errors"] ++ bazelTestFlags;
targets = bazelTestTargets;
}
}
${
bazelCmd {
cmd = "build";
additionalFlags = bazelBuildFlags;
targets = [bazelTarget];
}
}
runHook postBuild
'';
})
# [USER and BAZEL_USE_CPP_ONLY_TOOLCHAIN variables]:
# Bazel computes the default value of output_user_root before parsing the
# flag. The computation of the default value involves getting the $USER
# from the environment. Code here :
# https://github.com/bazelbuild/bazel/blob/9323c57607d37f9c949b60e293b573584906da46/src/main/cpp/startup_options.cc#L123-L124
#
# On macOS Bazel will use the system installed Xcode or CLT toolchain instead of the one in the PATH unless we pass BAZEL_USE_CPP_ONLY_TOOLCHAIN.

@ -31,11 +31,15 @@ buildBazelPackage rec {
./remove-unused-deps.patch
];
bazelFlags = [ "--//bazel:use_local_flex_bison" ];
bazelFlags = [
"--//bazel:use_local_flex_bison"
"--javabase=@bazel_tools//tools/jdk:remote_jdk11"
"--host_javabase=@bazel_tools//tools/jdk:remote_jdk11"
];
fetchAttrs = {
# Fixed output derivation hash after bazel fetch
sha256 = "sha256-XoLdlEeoDJlyWlnXZADHOKu06zKHgHJfgey8UhOt+LM=";
sha256 = "sha256-45PINJ7VtL5Jl/nAQNkiSCt8wUwtytNfgeNMZaz3Y9U=";
};
nativeBuildInputs = [
@ -45,14 +49,23 @@ buildBazelPackage rec {
];
postPatch = ''
patchShebangs bazel/build-version.py \
common/util/create_version_header.sh \
patchShebangs\
bazel/build-version.py \
bazel/sh_test_with_runfiles_lib.sh \
common/lsp/dummy-ls_test.sh \
common/parser/move_yacc_stack_symbols.sh \
common/parser/record_syntax_error.sh
common/parser/record_syntax_error.sh \
common/tools/patch_tool_test.sh \
common/tools/verible-transform-interactive.sh \
common/tools/verible-transform-interactive-test.sh \
common/util/create_version_header.sh \
kythe-browse.sh \
verilog/tools
'';
removeRulesCC = false;
bazelTarget = ":install-binaries";
bazelTestTargets = [ "//..." ];
bazelBuildFlags = [
"-c opt"
];

Loading…
Cancel
Save