//
// Copyright (C) 2020 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"],
}

cc_defaults {
    name: "odrefresh-defaults",
    host_supported: true,
    defaults: ["art_defaults"],
    srcs: [
        "odrefresh.cc",
        "odr_fs_utils.cc",
        "odr_metrics.cc",
        "odr_metrics_record.cc",
    ],
    local_include_dirs: ["include"],
    header_libs: ["dexoptanalyzer_headers"],
    generated_sources: [
        "apex-info-list",
        "art-apex-cache-info",
        "art-odrefresh-operator-srcs",
    ],
    shared_libs: [
        "libartpalette",
        "libbase",
        "libdexfile",
        "liblog",
    ],
    static_libs: ["libxml2"],
    target: {
        android: {
            // Use the 32-bit version of odrefresh on devices.
            compile_multilib: "prefer32",
        },
        host: {
            shared_libs: [
                // Both these libraries for libxml2 on host for code derived from apex-info-list.
                "libicui18n",
                "libicuuc",
            ],
        },
    },
    tidy: true,
    tidy_flags: [
        "-format-style=file",
        "-header-filter=(art/odrefresh/|system/apex/)",
    ],
}

cc_library_headers {
    name: "odrefresh_headers",
    export_include_dirs: ["include"],
    host_supported: true,
    stl: "none",
    system_shared_libs: [],
    min_sdk_version: "29", // As part of mainline modules(APEX), it should support at least 29(Q).
    sdk_version: "minimum", // The minimum sdk version required by users of this module.
    apex_available: [
        "//apex_available:platform", // For odsign.
    ],
    visibility: ["//visibility:public"],
}

gensrcs {
    name: "art-odrefresh-operator-srcs",
    cmd: "$(location generate_operator_out) art/odrefresh $(in) > $(out)",
    tools: ["generate_operator_out"],
    srcs: [
        "odr_metrics.h",
    ],
    output_extension: "operator_out.cc",
}

art_cc_binary {
    name: "odrefresh",
    defaults: ["odrefresh-defaults"],
    required: [
        "dexoptanalyzer",
        "dex2oat",
    ],
    shared_libs: [
        "libart",
        "libartbase",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
}

art_cc_binary {
    name: "odrefreshd",
    defaults: [
        "art_debug_defaults",
        "odrefresh-defaults",
    ],
    required: [
        "dexoptanalyzerd",
        "dex2oatd",
    ],
    shared_libs: [
        "libartd",
        "libartbased",
    ],
    apex_available: [
        "com.android.art.debug",
        // TODO(b/183882457): This binary doesn't go into com.android.art, but
        // apex_available lists need to be the same for internal libs to avoid
        // stubs, and this depends on libartd.
        "com.android.art",
    ],
}

cc_library_static {
    name: "libodrstatslog",
    defaults: ["art_defaults"],
    host_supported: true,
    export_include_dirs: ["include"],

    local_include_dirs: ["include"],
    shared_libs: ["libartbase"],
    target: {
        android: {
            generated_headers: ["statslog_odrefresh.h"],
            generated_sources: ["statslog_odrefresh.cpp"],
            srcs: [
                "odr_metrics_record.cc",
                "odr_statslog_android.cc",
            ],
            shared_libs: ["libstatssocket"],
        },
        host: {
            srcs: ["odr_statslog_host.cc"],
        },
    },
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
}

art_cc_test {
    name: "art_odrefresh_tests",
    defaults: [
        "art_gtest_defaults",
    ],
    generated_sources: ["art-odrefresh-operator-srcs"],
    header_libs: ["odrefresh_headers"],
    srcs: [
        "odr_artifacts_test.cc",
        "odr_fs_utils.cc",
        "odr_fs_utils_test.cc",
        "odr_metrics.cc",
        "odr_metrics_test.cc",
        "odr_metrics_record.cc",
        "odr_metrics_record_test.cc",
        "odrefresh_test.cc",
    ],
    shared_libs: ["libbase"],
}

genrule {
    name: "statslog_odrefresh.h",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_odrefresh.h --module art --namespace art,metrics,statsd",
    out: [
        "statslog_odrefresh.h",
    ],
}

genrule {
    name: "statslog_odrefresh.cpp",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_odrefresh.cpp --module art --namespace art,metrics,statsd --importHeader statslog_odrefresh.h",
    out: [
        "statslog_odrefresh.cpp",
    ],
}

xsd_config {
    name: "art-apex-cache-info",
    srcs: ["CacheInfo.xsd"],
    package_name: "com.android.art",
    api_dir: "schema",
    gen_writer: true,
}
