aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2017-09-01 17:59:41 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-09-01 20:08:27 +0200
commit37d6104c0e0ffa7d59426535a7d4a81c560a3efa (patch)
tree71a8f09a36422f04c94f55daf17b7eee0b2f2229
parent17d975ee226c59c164ecdab9c897a35d9604e192 (diff)
Android,Windows: wrap SingleJar in a java_binary
On Unix-like platforms, we can execute deploy jars just like normal binaries, but on Windows we cannot because ".jar" is not an executable extension. Therefore we cannot run SingleJar_deploy.jar in a genrule.cmd. In this change I do the following changes to: //tools/android/BUILD.tools: - add a java_import rule that wraps the SingleJar deploy jar - add a java_binary that runtime-depends on the jar - fix the ":gen_java_lang_extras_jar" genrule to run the java_binary instead of the deploy jar See https://github.com/bazelbuild/bazel/issues/3659 Change-Id: Ie035e721deb696bbd4130b3612695a10dd9c2b4d PiperOrigin-RevId: 167281195
-rw-r--r--tools/android/BUILD.tools63
1 files changed, 46 insertions, 17 deletions
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index 2f43435c60..fde4587543 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -53,6 +53,42 @@ filegroup(
visibility = ["//visibility:public"],
)
+java_import(
+ name = "singlejar_deploy",
+ jars = select({
+ "//src:windows": ["@bazel_tools//tools/jdk:singlejar"],
+ "//src:windows_msvc": ["@bazel_tools//tools/jdk:singlejar"],
+ "//conditions:default": [],
+ }),
+ visibility = ["//visibility:private"],
+)
+
+java_binary(
+ name = "singlejar_javabin",
+ main_class = "com.google.devtools.build.singlejar.SingleJar",
+ runtime_deps = select({
+ "//src:windows": [":singlejar_deploy"],
+ "//src:windows_msvc": [":singlejar_deploy"],
+ "//conditions:default": [],
+ }),
+ visibility = ["//visibility:private"],
+)
+
+gen_java_lang_extras_jar_cmd = """
+ for jar in $(locations @local_jdk//:bootclasspath); do
+ if [[ "$${jar}" == *"/rt.jar" ]]; then
+ $(location %s) \
+ --exclude_build_data \
+ --dont_change_compression \
+ --sources $${jar} \
+ --include_prefixes "java/lang/invoke/" \
+ --include_prefixes "java/lang/annotation/" \
+ --output $@
+ break
+ fi
+ done
+ """
+
# javac needs this Jar to compile lambdas, method references, and type annotations.
# These classes are not part of the android.jar.
genrule(
@@ -60,24 +96,17 @@ genrule(
srcs = [
"@local_jdk//:bootclasspath"
],
- tools = [
- "@bazel_tools//tools/jdk:singlejar",
- ],
+ tools = select({
+ "//src:windows": [":singlejar_javabin"],
+ "//src:windows_msvc": [":singlejar_javabin"],
+ "//conditions:default": ["@bazel_tools//tools/jdk:singlejar"],
+ }),
outs = ["java_lang_extras.jar"],
- cmd = """
- for jar in $(locations @local_jdk//:bootclasspath); do
- if [[ "$${jar}" == *"/rt.jar" ]]; then
- $(location @bazel_tools//tools/jdk:singlejar) \
- --exclude_build_data \
- --dont_change_compression \
- --sources $${jar} \
- --include_prefixes "java/lang/invoke/" \
- --include_prefixes "java/lang/annotation/" \
- --output $@
- break
- fi
- done
- """,
+ cmd = select({
+ "//src:windows": gen_java_lang_extras_jar_cmd % ":singlejar_javabin",
+ "//src:windows_msvc": gen_java_lang_extras_jar_cmd % ":singlejar_javabin",
+ "//conditions:default": gen_java_lang_extras_jar_cmd % "@bazel_tools//tools/jdk:singlejar",
+ }),
visibility = ["//visibility:private"],
)