# Actions for Android rules.

load("@rules_java//java:defs.bzl", "java_binary", "java_library")

package(default_visibility = ["//visibility:public"])

filegroup(
    name = "embedded_tools",
    srcs = [
        "BUILD.tools",
        "//src/tools/android/java/com/google/devtools/build/android/desugar:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/desugar/scan:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/dexer:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/idlclass:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/incrementaldeployment:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/junctions:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/proto:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/r8:embedded_tools",
        "//src/tools/android/java/com/google/devtools/build/android/ziputils:embedded_tools",
    ],
)

java_binary(
    name = "all_android_tools",
    create_executable = 0,
    runtime_deps = [
        ":android_builder_lib",
        "//src/main/java/com/google/devtools/build/lib/worker:work_request_handlers",
        "//src/tools/android/java/com/google/devtools/build/android/desugar/dependencies",
        "//src/tools/android/java/com/google/devtools/build/android/desugar/io",
        "//src/tools/android/java/com/google/devtools/build/android/desugar/langmodel",
        "//src/tools/android/java/com/google/devtools/build/android/desugar/scan",
        "//src/tools/android/java/com/google/devtools/build/android/dexer:dexerdeps",
        "//src/tools/android/java/com/google/devtools/build/android/idlclass:idlclass_lib",
        "//src/tools/android/java/com/google/devtools/build/android/r8:dexerdeps",
        "//src/tools/android/java/com/google/devtools/build/android/ziputils:ziputils_lib",
    ],
)

# Used by //src/test/shell/bazel/android:android_integration_test
java_binary(
    name = "ResourceProcessorBusyBox",
    main_class = "com.google.devtools.build.android.ResourceProcessorBusyBox",
    runtime_deps = [
        ":android_builder_lib",
    ],
)

java_binary(
    name = "ZipFilterAction",
    # Memory consumption of SingleJar is about 250 bytes per entry in the output file. Unfortunately,
    # the JVM tends to kill the process with an OOM long before we're at the limit. In the most
    # recent example, 400 MB of memory was enough for about 500,000 entries.
    jvm_flags = ["-Xmx1600m"],
    main_class = "com.google.devtools.build.android.ZipFilterAction",
    visibility = ["//visibility:private"],
    runtime_deps = [":android_builder_lib"],
)

java_library(
    name = "android_builder_lib",
    srcs = glob(
        [
            "*.java",
            "xml/*.java",
            "aapt2/*.java",
        ],
        exclude = ["DependencyInfo.java"],
    ),
    javacopts = [
        "--add-exports=java.xml/com.sun.org.apache.xerces.internal.dom=ALL-UNNAMED",
    ],
    exports = [
        # Separated out to avoid a dependency cycle with resources/, but it logically belongs here.
        ":dependency_info",
    ],
    deps = [
        ":android_common_30_1_3",
        ":dependency_info",
        "//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:libSingleJar",
        "//src/java_tools/singlejar/java/com/google/devtools/build/zip",
        "//src/main/java/com/google/devtools/build/lib/worker",
        "//src/main/java/com/google/devtools/build/lib/worker:work_request_handlers",
        "//src/main/java/com/google/devtools/common/options",
        "//src/main/protobuf:worker_protocol_java_proto",
        "//src/tools/android/java/com/google/devtools/build/android/junctions",
        "//src/tools/android/java/com/google/devtools/build/android/proto:resources_java_proto",
        "//src/tools/android/java/com/google/devtools/build/android/proto:serialize_format_java_pb",
        "//src/tools/android/java/com/google/devtools/build/android/resources",
        "//src/tools/android/java/com/google/devtools/build/android/ziputils:ziputils_lib",
        "//third_party:asm",
        "//third_party:auto_value",
        "//third_party:guava",
        "//third_party:jsr305",
        "//third_party/java/android_databinding:exec",
        "//third_party/java/aosp_gradle_core:aosp_gradle_core_30_1_3",
        "//third_party/java/jcommander",
        "//third_party/protobuf:protobuf_java",
    ],
)

java_library(
    name = "dependency_info",
    srcs = ["DependencyInfo.java"],
    visibility = [":__subpackages__"],
    deps = [
        "//third_party:auto_value",
    ],
)

filegroup(
    name = "srcs",
    srcs = glob(["**"]) + [
        "//src/tools/android/java/com/google/devtools/build/android/desugar:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/dexer:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/idlclass:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/incrementaldeployment:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/junctions:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/proto:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/r8:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/resources:srcs",
        "//src/tools/android/java/com/google/devtools/build/android/ziputils:srcs",
    ],
    visibility = ["//src:__pkg__"],
)

java_import(
    name = "android_common_30_1_3",
    jars = [
        "@maven_android//:com_android_signflinger_file",
        "@maven_android//:com_android_tools_analytics_library_protos_file",
        "@maven_android//:com_android_tools_analytics_library_shared_file",
        "@maven_android//:com_android_tools_analytics_library_tracker_file",
        "@maven_android//:com_android_tools_annotations_file",
        "@maven_android//:com_android_tools_build_apksig_file",
        "@maven_android//:com_android_tools_build_apkzlib_file",
        "@maven_android//:com_android_tools_build_builder_file",
        "@maven_android//:com_android_tools_build_builder_model_file",
        "@maven_android//:com_android_tools_build_manifest_merger_file",
        "@maven_android//:com_android_tools_common_file",
        "@maven_android//:com_android_tools_ddms_ddmlib_file",
        "@maven_android//:com_android_tools_dvlib_file",
        "@maven_android//:com_android_tools_layoutlib_layoutlib_api_file",
        "@maven_android//:com_android_tools_repository_file",
        "@maven_android//:com_android_tools_sdk_common_file",
        "@maven_android//:com_android_tools_sdklib_file",
        "@maven_android//:com_android_zipflinger_file",
    ],
    runtime_deps = [
        "@maven_android//:org_ow2_asm_asm",
        "@maven_android//:org_ow2_asm_asm_commons",
        "@maven_android//:org_ow2_asm_asm_tree",
        "@maven_android//:org_ow2_asm_asm_util",
    ],
    deps = [
        "@maven_android//:org_glassfish_jaxb_jaxb_runtime",
        "@maven_android//:org_jetbrains_kotlin_kotlin_stdlib_jdk7",
    ],
)
