aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--WORKSPACE8
-rw-r--r--tools/android/BUILD13
-rw-r--r--tools/android/BUILD.tools98
-rw-r--r--tools/android/build_java8_legacy_dex.sh34
4 files changed, 147 insertions, 6 deletions
diff --git a/WORKSPACE b/WORKSPACE
index 644cb899ee..5831252d20 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -91,6 +91,14 @@ new_local_repository(
build_file = "./third_party/googleapis/BUILD",
)
+http_archive(
+ name = "desugar_jdk_libs",
+ url = "https://github.com/google/desugar_jdk_libs/archive/91c7bd26d3ae32be7cc548d83ce173e8f88a7b94.zip",
+ # Computed using "shasum -a 256 <zip>"
+ sha256 = "3aa43733e16e94c24c98edcf6732df43f8a6ef2bed589b412b00e3003d0c3179",
+ strip_prefix = "desugar_jdk_libs-91c7bd26d3ae32be7cc548d83ce173e8f88a7b94",
+)
+
# OpenJDK distributions used to create a version of Bazel bundled with the OpenJDK.
http_file(
name = "openjdk_linux",
diff --git a/tools/android/BUILD b/tools/android/BUILD
index 4f1eb3c08c..e22f55d794 100644
--- a/tools/android/BUILD
+++ b/tools/android/BUILD
@@ -179,6 +179,14 @@ py_test(
],
)
+genrule(
+ name = "desugar_jdk_libs",
+ srcs = ["@desugar_jdk_libs"],
+ outs = ["desugar_jdk_libs.jar"],
+ cmd = "cp $< $@",
+ visibility = ["//visibility:private"],
+)
+
filegroup(
name = "srcs",
srcs = glob(["**"]) + ["//tools/android/emulator:srcs"],
@@ -192,7 +200,10 @@ filegroup(
"*_test.py",
"*_test.sh",
],
- ) + ["//tools/android/emulator:embedded_tools"],
+ ) + [
+ ":desugar_jdk_libs.jar",
+ "//tools/android/emulator:embedded_tools",
+ ],
)
# Exported for AndroidSdkRepositoryTest to use it instead of mocking it out.
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index 4a12571b60..92ffa8701b 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -129,26 +129,114 @@ genrule(
visibility = ["//visibility:private"],
)
-filegroup(
+java_import(
name = "desugared_java8_legacy_apis",
- srcs = [], # TODO(b/70681189): Populate with ijars
+ jars = [":ijar_desugared_java8_legacy_libs"],
+ neverlink = 1,
visibility = ["//visibility:public"],
)
+genrule(
+ name = "ijar_desugared_java8_legacy_libs",
+ srcs = ["desugared_java8_legacy_libs"],
+ outs = ["desugared_java8_legacy_libs-ijar.jar"],
+ cmd = "$(location //third_party/ijar) $< $@",
+ tools = ["//third_party/ijar"],
+ visibility = ["//visibility:private"],
+)
+
sh_binary(
name = "build_java8_legacy_dex",
- srcs = ["fail.sh"],
+ srcs = ["build_java8_legacy_dex.sh"],
+ data = [":java8_legacy_dex"],
visibility = ["//visibility:public"],
)
genrule(
name = "java8_legacy_dex",
+ srcs = ["desugared_java8_legacy_libs"],
outs = ["java8_legacy.dex.zip"],
- cmd = "$(location :build_java8_legacy_dex) --output $@",
- tools = [":build_java8_legacy_dex"],
+ cmd = """$(location :dexer) --dex "--output=$@" $<""",
+ tools = [":dexer"],
visibility = ["//visibility:public"],
)
+filegroup(
+ name = "desugared_java8_legacy_libs",
+ srcs = ["desugared_java8_legacy_libs.jar"],
+ visibility = ["//visibility:private"],
+)
+
+genrule(
+ name = "desugar_java8_legacy_libs",
+ srcs = ["desugar_jdk_libs.jar"],
+ outs = ["desugared_java8_legacy_libs.jar"],
+ cmd = """
+ classpath=()
+ for j in $(locations //tools/jdk:bootclasspath); do
+ classpath+=("--classpath_entry")
+ classpath+=("$${j}")
+ done
+ $(location :desugar_java8) \
+ --input $< \
+ --output $@ \
+ "$${classpath[@]}" \
+ --core_library --allow_empty_bootclasspath \
+ --nobest_effort_tolerate_missing_deps \
+ --noemit_dependency_metadata_as_needed \
+ --nodesugar_try_with_resources_if_needed \
+ --desugar_supported_core_libs \
+ --rewrite_core_library_prefix java/lang/Double8 \
+ --rewrite_core_library_prefix java/lang/Integer8 \
+ --rewrite_core_library_prefix java/lang/Long8 \
+ --rewrite_core_library_prefix java/lang/Math8 \
+ --rewrite_core_library_prefix java/time/ \
+ --rewrite_core_library_prefix java/util/stream/ \
+ --rewrite_core_library_prefix java/util/function/ \
+ --rewrite_core_library_prefix java/util/Arrays8 \
+ --rewrite_core_library_prefix java/util/Comparators \
+ --rewrite_core_library_prefix java/util/DoubleSummaryStatistics \
+ --rewrite_core_library_prefix java/util/IntSummaryStatistics \
+ --rewrite_core_library_prefix java/util/LinkedHashSet8 \
+ --rewrite_core_library_prefix java/util/LongSummaryStatistics \
+ --rewrite_core_library_prefix java/util/Objects \
+ --rewrite_core_library_prefix java/util/Optional \
+ --rewrite_core_library_prefix java/util/PrimitiveIterator \
+ --rewrite_core_library_prefix java/util/SortedSet\$$1 \
+ --rewrite_core_library_prefix java/util/Spliterator \
+ --rewrite_core_library_prefix java/util/StringJoiner \
+ --rewrite_core_library_prefix java/util/TimeZone8 \
+ --rewrite_core_library_prefix java/util/Tripwire \
+ --retarget_core_library_member "java/util/Arrays#stream->java/util/Arrays8" \
+ --retarget_core_library_member "java/util/Arrays#spliterator->java/util/Arrays8" \
+ --retarget_core_library_member "java/util/LinkedHashSet#spliterator->java/util/LinkedHashSet8" \
+ --emulate_core_library_interface java/util/Collection \
+ --emulate_core_library_interface java/util/Map \
+ --emulate_core_library_interface java/util/Map\$$Entry \
+ --emulate_core_library_interface java/util/Iterator \
+ --emulate_core_library_interface java/util/Comparator \
+ --dont_rewrite_core_library_invocation "java/util/Iterator#remove" """,
+ tools = [
+ ":desugar_java8",
+ "//tools/jdk:bootclasspath",
+ ],
+ visibility = ["//visibility:private"],
+)
+
+# No-one should depend on this but :desugared_java8_legacy_libs above
+exports_files(["desugar_jdk_libs.jar"],
+ visibility = ["//visibility:private"],
+)
+
+# Mirrors @<repo>//:dx_binary generated by android_sdk_repository rule without
+# needing the SDK repo's name (typically @androidsdk but not required).
+java_binary(
+ name = "dexer",
+ main_class = "com.android.dx.command.Main",
+ runtime_deps = ["//external:android/dx_jar_import"],
+ visibility = ["//visibility:private"],
+)
+
alias(
name = "IdlClass",
actual = "//src/tools/android/java/com/google/devtools/build/android/idlclass:IdlClass",
diff --git a/tools/android/build_java8_legacy_dex.sh b/tools/android/build_java8_legacy_dex.sh
new file mode 100644
index 0000000000..7ceaea8a4c
--- /dev/null
+++ b/tools/android/build_java8_legacy_dex.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Copyright 2018 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+
+set -eu
+
+android_jar=
+binary_jar=
+dest=
+while [[ "$#" -gt 0 ]]; do
+ arg="$1"; shift;
+ case "${arg}" in
+ --binary) binary_jar="$1"; shift ;;
+ --binary=*) binary_jar="${arg:9}" ;;
+ --output) dest="$1"; shift ;;
+ --output=*) dest="${arg:9}" ;;
+ --android_jar) android_jar="$1"; shift ;;
+ --android_jar=*) android_jar="${arg:14}" ;;
+ *) echo "Unknown flag: ${arg}"; exit 1 ;;
+ esac
+done
+
+# TODO(b/77339644): Support minification
+cp "$(dirname "$0")/java8_legacy.dex.zip" "${dest}"