// 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 "art_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["art_license"],
}

// Encapsulate the contributions made by the com.android.art to the bootclasspath.
bootclasspath_fragment {
    name: "art-bootclasspath-fragment",
    image_name: "art",
    // Must match the ART_APEX_JARS set in build/make/core/envsetup.mk
    contents: [
        "core-oj",
        "core-libart",
        "okhttp",
        "bouncycastle",
        "apache-xml",
    ],

    api: {
        stub_libs: [
            // Stubs for the core-oj and core-libart. The other modules do not
            // have any public API.
            "art.module.public.api",
        ],
    },
    core_platform_api: {
        stub_libs: [
            // Core platform (aka. module_lib) stubs for all the non-coverage contents.
            "art.module.public.api.stubs.module_lib",
        ],
    },

    // Additional properties to append when coverage is enabled, i.e. when
    // EMMA_INSTRUMENT_FRAMEWORK=true
    coverage: {
        contents: [
            "jacocoagent",
        ],
        api: {
            stub_libs: [
                // Stubs for the jacocoagent.
                "jacoco-stubs",
            ],
        },
    },
    visibility: [
        "//art/build/apex",
        "//art/build/sdk",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],

    hidden_api: {
        blocked: ["hiddenapi/hiddenapi-blocked.txt"],
        max_target_o_low_priority: ["hiddenapi/hiddenapi-max-target-o-low-priority.txt"],
        unsupported_packages: ["hiddenapi/hiddenapi-unsupported-packages.txt"],
    },
}
