diff options
author | 2017-09-01 17:59:41 +0200 | |
---|---|---|
committer | 2017-09-01 20:08:27 +0200 | |
commit | 37d6104c0e0ffa7d59426535a7d4a81c560a3efa (patch) | |
tree | 71a8f09a36422f04c94f55daf17b7eee0b2f2229 | |
parent | 17d975ee226c59c164ecdab9c897a35d9604e192 (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.tools | 63 |
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"], ) |