// Copyright (C) 2025 The Android Open Source Project
//
// 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
// limitations under the License.

package {
    // See: http://go/android-license-faq
    default_applicable_licenses: ["Android-Apache-2.0"],
}

java_genrule_host {
    name: "otatools_package_dep_jars",
    tools: ["soong_zip"],
    compile_multilib: "first",
    cmd: "mkdir -p $(genDir)/framework && " +
        "cp $(in) $(genDir)/framework && " +
        "$(location soong_zip) -o $(out) -C $(genDir) -D $(genDir)/framework",
    srcs: [
        ":apksigner",
        ":boot_signer",
        ":signapk",
        ":verity_signer",
    ],
    out: ["otatools_package_dep_jars.zip"],
}

cc_genrule {
    name: "otatools_package_dep_libs",
    host_supported: true,
    device_supported: false,
    compile_multilib: "first",
    tools: ["soong_zip"],
    cmd: "mkdir -p $(genDir)/$$CC_MULTILIB &&" +
        "cp $(in) $(genDir)/$$CC_MULTILIB && " +
        "$(location soong_zip) -o $(out) -C $(genDir) -D $(genDir)/$$CC_MULTILIB",
    srcs: [
        ":libbase",
        ":libbrillo",
        ":libbrillo-stream",
        ":libc++",
        "//external/libchrome:libchrome",
        ":libconscrypt_openjdk_jni",
        ":libcrypto",
        ":libcrypto_utils",
        ":libcutils",
        ":libevent",
        ":libext2_blkid",
        ":libext2_com_err",
        ":libext2_e2p",
        ":libext2_quota",
        ":libext2_uuid",
        ":libext2fs",
        ":libext4_utils",
        ":libfec",
        ":libhidl-gen-utils",
        ":libhidlmetadata",
        ":libicui18n",
        ":libicuuc",
        ":liblog",
        ":liblp",
        ":liblz4",
        ":libpcre2",
        ":libprocessgroup",
        ":libprotobuf-cpp-lite",
        ":libselinux",
        ":libsparse",
        ":libsqlite",
        ":libsquashfs_utils",
        ":libssl",
        ":libz",
        ":libziparchive",
    ],
    out: ["otatools_package_dep_libs.zip"],
}

cc_genrule {
    name: "otatools_package_dep_bins",
    host_supported: true,
    device_supported: false,
    compile_multilib: "first",
    tools: [
        "apksigner",
        "boot_signer",
        "merge_zips",
        "signapk",
        "verity_signer",
    ],
    cmd: "mkdir -p $(genDir)/bin && " +
        "cp $(in) $(genDir)/bin && " +
        "cp $(location apksigner) $(location boot_signer) $(location merge_zips) $(location signapk) $(location verity_signer) $(genDir)/bin && " +
        "$(location :soong_zip) -o $(out) -C $(genDir) -D $(genDir)/bin",
    srcs: [
        ":aapt2",
        ":add_img_to_target_files",
        ":apex_compression_tool",
        ":apexd_host",
        ":apexer",
        ":append2simg",
        ":avbtool",
        ":blk_alloc_to_base_fs",
        ":brillo_update_payload",
        ":brotli",
        ":bsdiff",
        ":build_image",
        ":build_super_image",
        ":build_verity_metadata",
        ":build_verity_tree",
        ":care_map_generator",
        ":check_ota_package_signature",
        ":check_target_files_signatures",
        ":check_target_files_vintf",
        ":checkvintf",
        ":create_brick_ota",
        ":deapexer",
        ":debugfs_static",
        ":delta_generator",
        ":e2fsck",
        ":e2fsdroid",
        ":fc_sort",
        ":fec",
        ":fs_config",
        ":fsck.erofs",
        ":fsck.f2fs",
        ":generate_verity_key",
        ":host_init_verifier",
        ":img2simg",
        ":img_from_target_files",
        ":initrd_bootconfig",
        ":lpmake",
        ":lpunpack",
        ":lz4",
        ":make_f2fs",
        ":make_f2fs_casefold",
        ":merge_ota",
        ":merge_target_files",
        "//device/generic/goldfish:mk_combined_img",
        ":mkbootfs",
        ":mkbootimg",
        ":mke2fs",
        ":mkf2fsuserimg",
        ":mkfs.erofs",
        ":mksquashfs",
        ":mksquashfsimage",
        ":mkuserimg_mke2fs",
        ":ota_extractor",
        ":ota_from_target_files",
        ":repack_bootimg",
        ":resize2fs",
        ":secilc",
        ":sefcontext_compile",
        ":sgdisk",
        ":shflags",
        ":sign_apex",
        ":sign_target_files_apks",
        ":sign_virt_apex",
        ":simg2img",
        ":sload_f2fs",
        ":soong_zip",
        ":toybox",
        ":tune2fs",
        ":unpack_bootimg",
        ":update_device",
        ":validate_target_files",
        ":verity_verifier",
        ":zip2zip",
        ":zipalign",
        ":zucchini",
    ] + select(soong_config_variable("otatools", "use_build_mixed_kernels_ramdisk"), {
        true: [":build_mixed_kernels_ramdisk_host"],
        default: [],
    }) + select(soong_config_variable("otatools", "use_bootable_deprecated_ota_applypatch"), {
        true: [
            ":imgdiff",
            ":update_host_simulator",
        ],
        default: [],
    }),
    out: ["otatools_package_dep_bins.zip"],
}

java_genrule_host {
    name: "otatools-package",
    tools: ["merge_zips"],
    compile_multilib: "first",
    cmd: "$(location merge_zips) $(out) $(in)",
    srcs: [
        ":otatools_package_cert_files",
        ":otatools_package_dep_bins",
        ":otatools_package_dep_jars",
        ":otatools_package_dep_libs",
        ":otatools_package_releasetools",
    ],
    out: ["otatools.zip"],
    dist: {
        targets: [
            "droidcore",
            "otatools-package",
        ],
    },
}

otatools_package_cert_files {
    name: "otatools_package_cert_files",
}
