Resolve labels in java_toolchain_default relative to java_tools repo
Usecase for `java_toolchain_default` is:
```
load("@remote_java_tools_linux//:java_toolchain_default.bzl", "java_toolchain_default)
java_toolchain_default(
name = "mytoolchain",
javabuilder = ["//:VanillaJavaBuilder"],
)
```
In order to make the use easier, we need to resolve labels relatively to current repo. Otherwise the user would need to specify `javabuilder = ["@remote_java_tools_linux//:VanillaJavaBuilder"]`.
Closes #12408.
PiperOrigin-RevId: 340635441
diff --git a/src/test/shell/bazel/bazel_java_tools_test.sh b/src/test/shell/bazel/bazel_java_tools_test.sh
index ff7f1a3..45729fc 100755
--- a/src/test/shell/bazel/bazel_java_tools_test.sh
+++ b/src/test/shell/bazel/bazel_java_tools_test.sh
@@ -212,4 +212,28 @@
bazel build @local_java_tools//:ijar_cc_binary || fail "ijar failed to build"
}
+
+function test_java_toolchain_default() {
+ local java_tools_rlocation=$(rlocation io_bazel/src/java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip)
+ local java_tools_zip_file_url="file://${java_tools_rlocation}"
+ if "$is_windows"; then
+ java_tools_zip_file_url="file:///${java_tools_rlocation}"
+ fi
+ cat > WORKSPACE <<EOF
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+http_archive(
+ name = "local_java_tools",
+ urls = ["${java_tools_zip_file_url}"]
+)
+EOF
+ cat > BUILD <<EOF
+load("@local_java_tools//:java_toolchain_default.bzl", "java_toolchain_default")
+java_toolchain_default(
+ name = "vanilla",
+ javabuilder = ["//:VanillaJavaBuilder"],
+)
+EOF
+ bazel build //:vanilla || fail "java_toolchain_default target failed to build"
+}
+
run_suite "Java tools archive tests"
diff --git a/tools/jdk/BUILD.java_tools b/tools/jdk/BUILD.java_tools
index 97406e0..8e13b4b 100644
--- a/tools/jdk/BUILD.java_tools
+++ b/tools/jdk/BUILD.java_tools
@@ -19,7 +19,7 @@
java_toolchain_default(
name = "toolchain",
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = [
# In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
# G1 collector and having compact strings enabled.
@@ -30,14 +30,14 @@
"--patch-module=jdk.compiler=$(location :jdk_compiler_jar)",
] + JDK9_JVM_OPTS,
tools = [
- ":java_compiler_jar",
- ":jdk_compiler_jar",
+ "//:java_compiler_jar",
+ "//:jdk_compiler_jar",
],
)
java_toolchain_default(
name = "toolchain_hostjdk8",
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = ["-Xbootclasspath/p:$(location :javac_jar)"],
source_version = "8",
target_version = "8",
@@ -47,7 +47,7 @@
# TODO(cushon): consider if/when we should increment this?
java_toolchain_default(
name = "legacy_toolchain",
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = [
# override the javac in the JDK.
"--patch-module=java.compiler=$(location :java_compiler_jar)",
@@ -56,15 +56,15 @@
source_version = "8",
target_version = "8",
tools = [
- ":java_compiler_jar",
- ":jdk_compiler_jar",
+ "//:java_compiler_jar",
+ "//:jdk_compiler_jar",
],
)
# Needed for openbsd / JVM8
java_toolchain_default(
name = "legacy_toolchain_jvm8",
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = ["-Xbootclasspath/p:$(location :javac_jar)"],
source_version = "8",
target_version = "8",
@@ -87,7 +87,7 @@
java_toolchain_default(
name = "toolchain_vanilla",
forcibly_disable_header_compilation = True,
- javabuilder = [":vanillajavabuilder"],
+ javabuilder = ["//:vanillajavabuilder"],
jvm_opts = [],
source_version = "",
target_version = "",
@@ -99,7 +99,7 @@
(
java_toolchain_default(
name = "toolchain_java%d" % release,
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = [
# override the javac in the JDK.
"--patch-module=java.compiler=$(location :java_compiler_jar)",
@@ -108,14 +108,14 @@
source_version = "%s" % release,
target_version = "%s" % release,
tools = [
- ":java_compiler_jar",
- ":jdk_compiler_jar",
+ "//:java_compiler_jar",
+ "//:jdk_compiler_jar",
],
),
# Needed for openbsd / JVM8
java_toolchain_default(
name = "toolchain_java%d_jvm8" % release,
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = [
"-Xbootclasspath/p:$(location :javac_jar)",
],
@@ -129,7 +129,7 @@
# A toolchain that targets java 11.
java_toolchain_default(
name = "toolchain_jdk_11",
- javac = [":javac_jar"],
+ javac = ["//:javac_jar"],
jvm_opts = [
# In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
# G1 collector and having compact strings enabled.
@@ -142,8 +142,8 @@
source_version = "11",
target_version = "11",
tools = [
- ":java_compiler_jar",
- ":jdk_compiler_jar",
+ "//:java_compiler_jar",
+ "//:jdk_compiler_jar",
],
)
@@ -168,8 +168,8 @@
# platform.
java_toolchain_default(
name = "prebuilt_toolchain",
- ijar = [":ijar_prebuilt_binary"],
- javac = [":javac_jar"],
+ ijar = ["//:ijar_prebuilt_binary"],
+ javac = ["//:javac_jar"],
jvm_opts = [
# In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using
# G1 collector and having compact strings enabled.
@@ -179,10 +179,10 @@
"--patch-module=java.compiler=$(location :java_compiler_jar)",
"--patch-module=jdk.compiler=$(location :jdk_compiler_jar)",
] + JDK9_JVM_OPTS,
- singlejar = [":prebuilt_singlejar"],
+ singlejar = ["//:prebuilt_singlejar"],
tools = [
- ":java_compiler_jar",
- ":jdk_compiler_jar",
+ "//:java_compiler_jar",
+ "//:jdk_compiler_jar",
],
)
diff --git a/tools/jdk/java_toolchain_default.bzl b/tools/jdk/java_toolchain_default.bzl
index cce05dd..cddc614 100644
--- a/tools/jdk/java_toolchain_default.bzl
+++ b/tools/jdk/java_toolchain_default.bzl
@@ -61,11 +61,43 @@
target_version = "8",
)
+_LABEL_LISTS = [
+ "bootclasspath",
+ "extclasspath",
+ "javac",
+ "tools",
+ "javabuilder",
+ "singlejar",
+ "genclass",
+ "resourcejar",
+ "ijar",
+ "header_compiler",
+ "header_compiler_direct",
+ "package_configuration",
+]
+
+_LABELS = [
+ "timezone_data",
+ "oneversion",
+ "oneversion_whitelist",
+ "jacocorunner",
+ "proguard_allowlister",
+ "java_runtime",
+]
+
+# Converts values to labels, so that they are resolved relative to this java_tools repository
+def _to_label(k, v):
+ if k in _LABELS and type(v) == type(Label("//a")):
+ return Label(v)
+ if k in _LABEL_LISTS and type(v) == type([Label("//a")]):
+ return [Label(label) for label in v]
+ return v
+
def java_toolchain_default(name, **kwargs):
"""Defines a java_toolchain with appropriate defaults for Bazel."""
toolchain_args = dict(_BASE_TOOLCHAIN_CONFIGURATION)
- toolchain_args.update(kwargs)
+ toolchain_args.update({k: _to_label(k, v) for k, v in kwargs.items()})
native.java_toolchain(
name = name,
**toolchain_args