// Copyright (C) 2021 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
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    //   SPDX-license-identifier-MIT
    //   SPDX-license-identifier-Unicode-DFS
    default_applicable_licenses: ["frameworks_base_license"],
}

soong_config_module_type {
    name: "custom_platform_bootclasspath",
    module_type: "platform_bootclasspath",
    config_namespace: "AUTO",
    bool_variables: [
        "car_bootclasspath_fragment",
    ],
    properties: [
        "fragments",
    ],
}

// This module provides access to information Soong has related to the
// whole platform bootclasspath. Currently, that information is provided solely
// through configuration but additional information will be added here.
//
// This will provide support for the following:
// * Hidden API processing for those parts of the bootclasspath that are not
//   part of an APEX.
// * Compatibility checking to ensure that the hidden API bits encoded into the
//   dex files by the modularized hidden API processing is compatible with the
//   runtimes of earlier releases which expect the bits to have been computed
//   over the entirety of the bootclasspath in one go not separately.
// * Dexpreopting apps and other libraries not on the platform bootclasspath.
// * Generating and installing the appropriate files to the device which will
//   allow it to generate the bootclasspath related environment variables
//   dynamically.
//
// This module needs to be present in the build for the above processing to be
// done correctly.
custom_platform_bootclasspath {
    name: "platform-bootclasspath",

    // The bootclasspath_fragments that contribute to the platform
    // bootclasspath.
    fragments: [
        {
            apex: "com.android.adservices",
            module: "com.android.adservices-bootclasspath-fragment",
        },
        {
            apex: "com.android.appsearch",
            module: "com.android.appsearch-bootclasspath-fragment",
        },
        {
            apex: "com.android.art",
            module: "art-bootclasspath-fragment",
        },
        {
            apex: "com.android.btservices",
            module: "com.android.btservices-bootclasspath-fragment",
        },
        {
            apex: "com.android.configinfrastructure",
            module: "com.android.configinfrastructure-bootclasspath-fragment",
        },
        {
            apex: "com.android.conscrypt",
            module: "com.android.conscrypt-bootclasspath-fragment",
        },
        {
            apex: "com.android.crashrecovery",
            module: "com.android.crashrecovery-bootclasspath-fragment",
        },
        {
            apex: "com.android.devicelock",
            module: "com.android.devicelock-bootclasspath-fragment",
        },
        {
            apex: "com.android.healthfitness",
            module: "com.android.healthfitness-bootclasspath-fragment",
        },
        {
            apex: "com.android.i18n",
            module: "i18n-bootclasspath-fragment",
        },
        {
            apex: "com.android.ipsec",
            module: "com.android.ipsec-bootclasspath-fragment",
        },
        {
            apex: "com.android.media",
            module: "com.android.media-bootclasspath-fragment",
        },
        {
            apex: "com.android.mediaprovider",
            module: "com.android.mediaprovider-bootclasspath-fragment",
        },
        {
            apex: "com.android.ondevicepersonalization",
            module: "com.android.ondevicepersonalization-bootclasspath-fragment",
        },
        {
            apex: "com.android.os.statsd",
            module: "com.android.os.statsd-bootclasspath-fragment",
        },
        {
            apex: "com.android.permission",
            module: "com.android.permission-bootclasspath-fragment",
        },
        {
            apex: "com.android.scheduling",
            module: "com.android.scheduling-bootclasspath-fragment",
        },
        {
            apex: "com.android.sdkext",
            module: "com.android.sdkext-bootclasspath-fragment",
        },
        {
            apex: "com.android.tethering",
            module: "com.android.tethering-bootclasspath-fragment",
        },
        {
            apex: "com.android.uwb",
            module: "com.android.uwb-bootclasspath-fragment",
        },
        {
            apex: "com.android.wifi",
            module: "com.android.wifi-bootclasspath-fragment",
        },
        {
            apex: "com.android.virt",
            module: "com.android.virt-bootclasspath-fragment",
        },
    ],

    soong_config_variables: {
        car_bootclasspath_fragment: {
            fragments: [
                // only used for auto
                {
                    apex: "com.android.car.framework",
                    module: "com.android.car.framework-bootclasspath-fragment",
                },
            ],
        },
    },

    // Additional information needed by hidden api processing.
    hidden_api: {
        unsupported: [
            "hiddenapi/hiddenapi-unsupported.txt",
        ],
        removed: [
            ":combined-removed-dex",
        ],
        max_target_r_low_priority: [
            "hiddenapi/hiddenapi-max-target-r-loprio.txt",
        ],
        max_target_q: [
            "hiddenapi/hiddenapi-max-target-q.txt",
        ],
        max_target_p: [
            "hiddenapi/hiddenapi-max-target-p.txt",
        ],
        max_target_o_low_priority: [
            "hiddenapi/hiddenapi-max-target-o.txt",
        ],
        unsupported_packages: [
            "hiddenapi/hiddenapi-unsupported-packages.txt",
        ],
    },

    dists: [
        {
            targets: ["droidcore"],
            tag: "hiddenapi-flags.csv",
        },
        {
            targets: ["droidcore"],
            tag: "hiddenapi-index.csv",
        },
        {
            targets: ["droidcore"],
            tag: "hiddenapi-metadata.csv",
            // Legacy name
            dest: "hiddenapi-unsupported.csv",
        },
    ],

    required: [
        "platform-systemserverclasspath",
    ],
}

genrule { // This module exists to make the srcjar output available to Make.
    name: "platform-bootclasspath.srcjar",
    srcs: [":platform-bootclasspath{.srcjar}"],
    out: ["platform-bootclasspath.srcjar"],
    cmd: "cp $(in) $(out)",
}

platform_systemserverclasspath {
    name: "platform-systemserverclasspath",
}
