bazel: fix java toolchain regression

By changing the default toolchain to JDK8, we broke the default Java
toolchain, which assumes JDK9.

Instead, set `host_java_toolchain` manually for our build of bazel,
and set `java_toolchain` to run the java tests with the build JDK as
well.

Fixes https://github.com/NixOS/nixpkgs/issues/54289
wip/yesman
Philip Patsch 5 years ago committed by Profpatsch
parent 7e6662a275
commit 5c6892e1a2
  1. 19
      pkgs/development/tools/build-managers/bazel/default.nix
  2. 2
      pkgs/top-level/all-packages.nix

@ -1,10 +1,11 @@
{ stdenv, callPackage, lib, fetchurl, fetchpatch, runCommand, makeWrapper
, jdk, zip, unzip, bash, writeCBin, coreutils
, zip, unzip, bash, writeCBin, coreutils
, which, python, perl, gawk, gnused, gnutar, gnugrep, gzip, findutils
# Apple dependencies
, cctools, clang, libcxx, CoreFoundation, CoreServices, Foundation
# Allow to independently override the jdks used to build and run respectively
, buildJdk ? jdk, runJdk ? jdk
, buildJdk, runJdk
, buildJdkName
# Always assume all markers valid (don't redownload dependencies).
# Also, don't clean up environment variables.
, enableNixHacks ? false
@ -53,6 +54,9 @@ let
#
[ bash coreutils findutils gawk gnugrep gnutar gnused gzip which unzip ];
# Java toolchain used for the build and tests
javaToolchain = "@bazel_tools//tools/jdk:toolchain_host${buildJdkName}";
in
stdenv.mkDerivation rec {
@ -177,11 +181,6 @@ stdenv.mkDerivation rec {
substituteInPlace scripts/bootstrap/compile.sh \
--replace /bin/sh ${customBash}/bin/bash
# We only build with JDK8 for now, since JDK11 does not compile bazel
substituteInPlace tools/jdk/default_java_toolchain.bzl \
--replace '"jvm_opts": JDK9_JVM_OPTS' \
'"jvm_opts": JDK8_JVM_OPTS'
# add nix environment vars to .bazelrc
cat >> .bazelrc <<EOF
build --experimental_distdir=${distDir}
@ -191,6 +190,7 @@ stdenv.mkDerivation rec {
build --linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt="-Wl,/g')"
build --host_linkopt="-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt="-Wl,/g')"
build --host_javabase='@local_jdk//:jdk'
build --host_java_toolchain='${javaToolchain}'
EOF
# add the same environment vars to compile.sh
@ -199,6 +199,7 @@ stdenv.mkDerivation rec {
-e "/\$command \\\\$/a --linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --linkopt=\"-Wl,/g')\" \\\\" \
-e "/\$command \\\\$/a --host_linkopt=\"-Wl,$(echo $NIX_LDFLAGS | sed -e 's/ /" --host_linkopt=\"-Wl,/g')\" \\\\" \
-e "/\$command \\\\$/a --host_javabase='@local_jdk//:jdk' \\\\" \
-e "/\$command \\\\$/a --host_java_toolchain='${javaToolchain}' \\\\" \
-i scripts/bootstrap/compile.sh
# --experimental_strict_action_env (which will soon become the
@ -268,7 +269,9 @@ stdenv.mkDerivation rec {
export TEST_TMPDIR=$(pwd)
hello_test () {
$out/bin/bazel test --test_output=errors \
$out/bin/bazel test \
--test_output=errors \
--java_toolchain='${javaToolchain}' \
examples/cpp:hello-success_test \
examples/java-native/src/test/java/com/example/myproject:hello
}

@ -8282,6 +8282,8 @@ in
bazel = callPackage ../development/tools/build-managers/bazel {
inherit (darwin) cctools;
inherit (darwin.apple_sdk.frameworks) CoreFoundation CoreServices Foundation;
buildJdk = jdk8;
buildJdkName = "jdk8";
runJdk = jdk11;
};

Loading…
Cancel
Save