Unverified Commit 23d00608 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

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

parents ab6c14bf 6b1a33be
Loading
Loading
Loading
Loading
+71 −49
Original line number Diff line number Diff line
@@ -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.
+18 −5
Original line number Diff line number Diff line
@@ -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"
  ];