blob: a67aa0f351de74af55ca7cffcc4a560d1c4eb8b5 [file] [log] [blame]
load("@rules_java//java:defs.bzl", "java_binary", "java_import", "java_library", "java_plugin")
load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test")
load("@rules_shell//shell:sh_binary.bzl", "sh_binary")
load("//rules:min_sdk_version.bzl", "min_sdk_version")
load(":defs.bzl", "android_jar", "run_ijar", "run_singlejar")
package(
default_applicable_licenses = ["//:license"],
default_visibility = ["//visibility:public"],
)
config_setting(
name = "minimal_desugaring",
values = {
"define": "java8_library_desugaring=minimal",
},
)
config_setting(
name = "full_desugaring",
values = {
"define": "java8_library_desugaring=full",
},
)
android_jar(
name = "android_jar",
visibility = ["//visibility:public"],
)
# TODO(b/175833857): This is a stub, should remove.
alias(
name = "merge_manifests",
actual = ":fail",
visibility = ["//visibility:public"],
)
genrule(
name = "gen_fail",
outs = ["fail.sh"],
cmd = "echo 'exit 1' > $@",
executable = 1,
visibility = ["//visibility:public"],
)
sh_binary(
name = "fail",
srcs = [":fail.sh"],
)
java_binary(
name = "bundletool",
main_class = "com.android.tools.build.bundletool.BundleToolMain",
visibility = ["//visibility:public"],
runtime_deps = ["@rules_android_maven//:com_android_tools_build_bundletool"],
)
java_plugin(
name = "compiler_annotation_processor",
generates_api = True,
processor_class = "android.databinding.annotationprocessor.ProcessDataBinding",
visibility = ["//visibility:public"],
deps = [
"//src/tools/java/com/google/devtools/build/android:databinding_exec_jar",
],
)
alias(
name = "zip",
actual = "//toolchains/android:zip",
visibility = ["//visibility:public"],
)
alias(
name = "unzip",
actual = "//toolchains/android:unzip",
visibility = ["//visibility:public"],
)
genrule(
name = "full_desugar_jdk_libs_config_json",
srcs = [
"@rules_android_maven//:com_android_tools_desugar_jdk_libs_configuration_nio",
],
outs = ["full_desugar_jdk_libs_config.json"],
cmd = "unzip -q -c " +
"$(location @rules_android_maven//:com_android_tools_desugar_jdk_libs_configuration_nio) " +
"META-INF/desugar/d8/desugar.json > $@",
visibility = ["//visibility:public"],
)
genrule(
name = "minimal_desugar_jdk_libs_config_json",
srcs = [
"@rules_android_maven//:com_android_tools_desugar_jdk_libs_configuration_minimal",
],
outs = ["minimal_desugar_jdk_libs_config.json"],
cmd = "unzip -q -c " +
"$(location @rules_android_maven//:com_android_tools_desugar_jdk_libs_configuration_minimal) " +
"META-INF/desugar/d8/desugar.json > $@",
)
genrule(
name = "desugar_jdk_libs_json",
srcs = select({
"full_desugaring": [":full_desugar_jdk_libs_config_json"],
"minimal_desugaring": [":minimal_desugar_jdk_libs_config_json"],
"//conditions:default": [":full_desugar_jdk_libs_config_json"],
}),
outs = ["desugar_jdk_libs.json"],
cmd = "cp $< $@",
visibility = ["//visibility:public"],
)
genrule(
name = "minify_desugar_jdk_libs_pgcfg",
srcs = [
"//src/tools/extract_desugar_pgcfg_flags",
":desugar_jdk_libs_json",
],
outs = ["minify_desugar_jdk_libs.pgcfg"],
cmd = "$(location //src/tools/extract_desugar_pgcfg_flags) --input_json $(location :desugar_jdk_libs_json) --output_file $@",
)
_MIN_SDK_VERSION = str(min_sdk_version.DEPOT_FLOOR)
genrule(
name = "build_java8_legacy_dex_params",
outs = ["build_java8_legacy_dex_params.txt"],
cmd = "echo -n --min-api %s > $@" % _MIN_SDK_VERSION,
visibility = ["//visibility:private"],
)
genrule(
name = "desugared_jdk_libs_from_maven_jar",
srcs = select({
"full_desugaring": ["@rules_android_maven//:com_android_tools_desugar_jdk_libs_nio"],
"minimal_desugaring": ["@rules_android_maven//:com_android_tools_desugar_jdk_libs_minimal"],
"//conditions:default": ["@rules_android_maven//:com_android_tools_desugar_jdk_libs_nio"],
}),
outs = ["desugared_jdk_libs_from_maven.jar"],
cmd = "cp $< $@",
)
run_singlejar(
name = "desugar_jdk_libs_all",
srcs = [
":desugared_jdk_libs_from_maven_jar",
"@rules_android_maven//:com_android_tools_desugar_jdk_libs_configuration",
],
out = "desugar_jdk_libs_all.jar",
)
run_singlejar(
name = "bootclasspath",
srcs = [
":android_jar",
":desugar_java8_extra_bootclasspath",
],
out = "android_bootclasspath.jar",
)
genrule(
name = "desugared_jdk_libs_jar",
srcs = [
":bootclasspath",
":desugar_jdk_libs_all",
":full_desugar_jdk_libs_config_json",
],
outs = ["desugared_jdk_libs.jar"],
cmd = "$(location //src/tools/java/com/google/devtools/build/android/r8:core_library_desugar) " +
"--desugar_supported_core_libs " +
"--desugared_lib_config=$(location :full_desugar_jdk_libs_config_json) " +
"--bootclasspath_entry=$(location :bootclasspath) " +
"--min_sdk_version=%d " % min_sdk_version.DEPOT_FLOOR +
"--input=$(location :desugar_jdk_libs_all) --output=$@",
tools = ["//src/tools/java/com/google/devtools/build/android/r8:core_library_desugar"],
)
sh_binary(
name = "build_java8_legacy_dex",
srcs = ["build_java8_legacy_dex.sh"],
data = [
"build_java8_legacy_dex_params",
":d8",
":desugared_jdk_libs_jar",
":minify_desugar_jdk_libs.pgcfg",
":r8",
":tracereferences",
":zip",
"@rules_shell//shell/runfiles",
],
visibility = ["//visibility:public"],
)
genrule(
name = "java8_legacy_dex",
outs = ["java8_legacy.dex.zip"],
cmd = "$(location :build_java8_legacy_dex) --output $@",
tools = [":build_java8_legacy_dex"],
visibility = ["//visibility:public"],
)
genrule(
name = "d8_desugar_params",
outs = ["d8_desugar_params.txt"],
cmd = "echo -n --min_sdk_version " + _MIN_SDK_VERSION + " > $@",
visibility = ["//visibility:private"],
)
genrule(
name = "desugar_min_sdk_version_txt",
outs = ["desugar_min_sdk_version.txt"],
cmd = "echo -n " + _MIN_SDK_VERSION + " > $@",
visibility = ["//visibility:public"],
)
sh_binary(
name = "desugar_java8",
srcs = [":d8_desugar.sh"],
data = [
":d8_desugar_params",
":full_desugar_jdk_libs_config_json",
"//src/tools/java/com/google/devtools/build/android/r8:desugar",
"@rules_shell//shell/runfiles",
],
visibility = ["//visibility:public"],
)
run_ijar(
name = "ijar_desugared_java8_legacy_libs",
jar = ":desugared_jdk_libs.jar",
visibility = ["//visibility:public"],
)
java_import(
name = "desugared_java8_legacy_apis",
constraints = ["android"],
jars = [":ijar_desugared_java8_legacy_libs"],
neverlink = 1,
visibility = ["//visibility:public"],
)
# Flags to make OpenJDK perform reasonably on D8.
_JVM_FLAGS = [
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
# Consistent with what we use for desugar.
"-Xms8g",
"-Xmx8g",
]
java_binary(
name = "d8",
jvm_flags = _JVM_FLAGS,
main_class = "com.android.tools.r8.D8",
visibility = ["//visibility:public"],
runtime_deps = ["@rules_android_maven//:com_android_tools_r8"],
)
java_binary(
name = "r8",
jvm_flags = _JVM_FLAGS,
main_class = "com.android.tools.r8.R8",
visibility = ["//visibility:public"],
runtime_deps = ["@rules_android_maven//:com_android_tools_r8"],
)
java_binary(
name = "tracereferences",
jvm_flags = _JVM_FLAGS,
main_class = "com.android.tools.r8.tracereferences.TraceReferences",
visibility = ["//visibility:public"],
runtime_deps = ["@rules_android_maven//:com_android_tools_r8"],
)
java_binary(
name = "resource_shrinker",
main_class = "com.android.build.shrinker.ResourceShrinkerCli",
visibility = ["//visibility:public"],
runtime_deps = ["@rules_android_maven//:com_android_tools_build_gradle"],
)
alias(
name = "merge_dexzips",
actual = "//src/tools/java/com/google/devtools/build/android/ziputils:reducer",
visibility = ["//visibility:public"],
)
alias(
name = "shuffle_jars",
actual = "//src/tools/java/com/google/devtools/build/android/ziputils:mapper",
visibility = ["//visibility:public"],
)
alias(
name = "zip_filter",
actual = "//src/tools/java/com/google/devtools/build/android:ZipFilterAction",
visibility = ["//visibility:public"],
)
java_binary(
name = "databinding_exec",
main_class = "android.databinding.AndroidDataBinding",
visibility = ["//visibility:public"],
runtime_deps = [
"//src/tools/java/com/google/devtools/build/android:databinding_exec_jar",
],
)
# Defines d8_dexbuilder using @<repo>//:d8_jar_import generated by android_sdk_repository rule
# without needing the SDK repo's name (typically @androidsdk but not required).
java_binary(
name = "d8_dexbuilder",
main_class = "com.google.devtools.build.android.r8.CompatDexBuilder",
visibility = ["//visibility:private"],
runtime_deps = ["//src/tools/java/com/google/devtools/build/android/r8"],
)
alias(
name = "dexbuilder",
actual = ":d8_dexbuilder",
visibility = ["//visibility:public"],
)
alias(
name = "dexbuilder_after_proguard",
actual = ":d8_dexbuilder",
visibility = ["//visibility:public"],
)
alias(
name = "dexsharder",
actual = "//src/tools/java/com/google/devtools/build/android/dexer:DexFileSplitter",
visibility = ["//visibility:public"],
)
java_binary(
name = "d8_dexmerger",
main_class = "com.google.devtools.build.android.r8.DexFileMerger",
visibility = ["//visibility:private"],
runtime_deps = ["//src/tools/java/com/google/devtools/build/android/r8"],
)
java_binary(
name = "global_synthetics_generator",
jvm_flags = [
"-XX:+TieredCompilation",
"-XX:TieredStopAtLevel=1",
# Consistent with what we use for desugar.
"-Xms8g",
"-Xmx8g",
],
main_class = "com.android.tools.r8.GlobalSyntheticsGenerator",
runtime_deps = ["@rules_android_maven//:com_android_tools_r8"],
)
alias(
name = "dexmerger",
actual = ":d8_dexmerger",
visibility = ["//visibility:public"],
)
# Bazel puts this on the bootclasspath of android_* targets to support Java 8
# if requested.
filegroup(
name = "desugar_java8_extra_bootclasspath",
srcs = ["java_base_extras.jar"],
visibility = ["//visibility:public"],
)
# javac needs this Jar to compile lambdas, method references, and type annotations.
# These classes are not part of the android.jar.
run_singlejar(
name = "gen_java_base_extras_jar",
srcs = [
"@rules_java//toolchains:platformclasspath",
],
out = "java_base_extras.jar",
include_prefixes = [
"java/lang/invoke/",
"java/lang/annotation/",
],
visibility = ["//visibility:private"],
)
sh_binary(
name = "dex_list_obfuscator",
srcs = ["dex_list_obfuscator.sh"],
visibility = ["//visibility:public"],
)
# If needed, this file can be regenerated by (validity is 30 * 365 days):
# keytool -genkeypair \
# -alias androiddebugkey \
# -dname "CN=Android Debug, O=Android, C=US" \
# -keystore cica \
# -sigalg SHA256withDSA \
# -validity 10950
filegroup(
name = "debug_keystore",
srcs = ["bazel_debug.keystore"],
visibility = ["//visibility:public"],
)
py_library(
name = "junction_lib",
srcs = ["junction.py"],
visibility = ["//visibility:private"],
)
py_library(
name = "json_worker_wrapper",
srcs = ["json_worker_wrapper.py"],
visibility = ["//visibility:private"],
)
py_binary(
name = "aar_embedded_jars_extractor",
srcs = ["aar_embedded_jars_extractor.py"],
visibility = ["//visibility:public"],
deps = [
":json_worker_wrapper",
":junction_lib",
"@py_absl//absl:app",
],
)
py_binary(
name = "aar_embedded_proguard_extractor",
srcs = ["aar_embedded_proguard_extractor.py"],
visibility = ["//visibility:public"],
deps = [
":json_worker_wrapper",
":junction_lib",
"@py_absl//absl:app",
],
)
py_binary(
name = "aar_native_libs_zip_creator",
srcs = [
"aar_native_libs_zip_creator.py",
],
visibility = ["//visibility:public"],
deps = [
":json_worker_wrapper",
":junction_lib",
"@py_absl//absl:app",
],
)
py_binary(
name = "aar_resources_extractor",
srcs = ["aar_resources_extractor.py"],
visibility = ["//visibility:public"],
deps = [
":json_worker_wrapper",
":junction_lib",
"@py_absl//absl:app",
],
)
py_test(
name = "aar_native_libs_zip_creator_test",
srcs = ["aar_native_libs_zip_creator_test.py"],
deps = [":aar_native_libs_zip_creator"],
)
py_test(
name = "aar_embedded_jars_extractor_test",
srcs = ["aar_embedded_jars_extractor_test.py"],
deps = [":aar_embedded_jars_extractor"],
)
py_test(
name = "aar_embedded_proguard_extractor_test",
srcs = ["aar_embedded_proguard_extractor_test.py"],
deps = [":aar_embedded_proguard_extractor"],
)
py_test(
name = "aar_resources_extractor_test",
srcs = ["aar_resources_extractor_test.py"],
deps = [":aar_resources_extractor"],
)
py_test(
name = "junction_test",
srcs = ["junction_test.py"],
deps = [":junction_lib"],
# TODO: This test was migrated from Bazel and is missing some
# Bazel-intrinsic test deps.
tags = ["manual"],
)
java_binary(
name = "apkdeployer",
main_class = "com.android.tools.deployer.DeployerRunner",
visibility = ["//visibility:public"],
runtime_deps = [
"@rules_android_maven//:com_android_tools_apkdeployer_apkdeployer",
],
)
java_library(
name = "auto_service_lib",
exports = [
"@rules_android_maven//:com_google_auto_service_auto_service",
"@rules_android_maven//:com_google_auto_service_auto_service_annotations",
],
)
java_library(
name = "autovalue_lib",
exports = [
":auto_service_lib",
"@rules_android_maven//:com_google_auto_auto_common",
],
)
java_plugin(
name = "autovalue_plugin",
processor_class = "com.google.auto.value.processor.AutoValueProcessor",
deps = [
"@rules_android_maven//:com_google_auto_value_auto_value",
],
)
java_plugin(
name = "auto_annotation_plugin",
processor_class = "com.google.auto.value.processor.AutoAnnotationProcessor",
deps = [
"@rules_android_maven//:com_google_auto_value_auto_value",
],
)
java_plugin(
name = "auto_builder_plugin",
processor_class = "com.google.auto.value.processor.AutoBuilderProcessor",
deps = [
"@rules_android_maven//:com_google_auto_value_auto_value",
],
)
java_library(
name = "auto_value_api",
exports = [
"@rules_android_maven//:com_google_auto_value_auto_value_annotations",
],
)
java_library(
name = "autovalue",
exported_plugins = [
":autovalue_plugin",
":auto_annotation_plugin",
":auto_builder_plugin",
],
visibility = ["//src/tools/java/com/google/devtools/build/android:__subpackages__"],
exports = [
":auto_value_api",
],
)
java_library(
name = "error_prone_annotations",
exports = [
"@rules_android_maven//:com_google_errorprone_error_prone_annotations",
"@rules_android_maven//:com_google_errorprone_error_prone_type_annotations",
],
)
java_library(
name = "error_prone",
exports = [
":error_prone_annotations",
"@rules_android_maven//:com_google_errorprone_error_prone_check_api",
"@rules_android_maven//:com_google_errorprone_error_prone_core",
],
)
genrule(
name = "desugar_globals",
outs = ["desugar.globals"],
cmd = "$(JAVA) -Dcom.android.tools.r8.disableLambdaMethodAnnotations -jar $(location :global_synthetics_generator_deploy.jar) --min-api {} --output $@".format(min_sdk_version.DEPOT_FLOOR),
toolchains = ["//tools/jdk:current_host_java_runtime"],
tools = [":global_synthetics_generator_deploy.jar"],
visibility = ["//visibility:public"],
)
genrule(
name = "desugar_globals_dex_archive",
srcs = [":desugar.globals"],
outs = ["desugar_globals.zip"],
cmd = """
$(JAVA) -jar $(location :d8_deploy.jar) --no-desugaring --globals $(location :desugar.globals) --output $(@)
""",
toolchains = ["//tools/jdk:current_host_java_runtime"],
tools = [":d8_deploy.jar"],
visibility = ["//visibility:public"],
)
genrule(
name = "desugar_globals_classes",
outs = ["desugar_globals_classes.zip"],
cmd = "$(JAVA) -Dcom.android.tools.r8.disableLambdaMethodAnnotations -jar $(location :global_synthetics_generator_deploy.jar) --min-api {} --classfile --output $@".format(min_sdk_version.DEPOT_FLOOR),
toolchains = ["//tools/jdk:current_host_java_runtime"],
tools = [":global_synthetics_generator_deploy.jar"],
visibility = ["//visibility:public"],
)
genrule(
name = "desugar_globals_jar",
srcs = [":desugar_globals_classes.zip"],
outs = ["desugar_globals.jar"],
cmd = """
tmp=$$(mktemp -d)
unzip $(location :desugar_globals_classes.zip) -d $${tmp}
rm $${tmp}/kind
rm $${tmp}/compilerinfo
mv $${tmp}/com/android/tools/r8/RecordTag.global $${tmp}/com/android/tools/r8/RecordTag.class
mv $${tmp}/com/android/tools/r8/DesugarMethodHandlesLookup.global $${tmp}/com/android/tools/r8/DesugarMethodHandlesLookup.class
mv $${tmp}/com/android/tools/r8/DesugarVarHandle.global $${tmp}/com/android/tools/r8/DesugarVarHandle.class
mv $${tmp}'/com/android/tools/r8/DesugarVarHandle$$$$ExternalSyntheticBackportWithForwarding0.global' $${tmp}'/com/android/tools/r8/DesugarVarHandle$$$$ExternalSyntheticBackportWithForwarding0.class'
out=$$(pwd)/$(@)
cd $${tmp}
zip -r $${out} .
""",
visibility = ["//visibility:public"],
)