//
// 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"],
}

cc_defaults {
    name: "artd_defaults",
    defaults: ["art_defaults"],
    srcs: [
        "artd.cc",
        "file_utils.cc",
        "path_utils.cc",
    ],
    header_libs: [
        "art_cmdlineparser_headers",
        "profman_headers",
    ],
    shared_libs: [
        "libartservice",
        "libarttools", // Contains "libc++fs".
        "libbase",
        "libbinder_ndk",
        "libselinux",
    ],
    static_libs: [
        "artd-aidl-ndk",
        "libfstab",
    ],
}

art_cc_binary {
    name: "artd",
    defaults: ["artd_defaults"],
    srcs: [
        "artd_main.cc",
    ],
    shared_libs: [
        "libart",
        "libartbase",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
}

art_cc_defaults {
    name: "art_artd_tests_defaults",
    defaults: ["artd_defaults"],
    shared_libs: [
        "libz", // libziparchive dependency; must be repeated here since it's a static lib.
    ],
    static_libs: [
        "libgmock",
        "libziparchive",
    ],
    srcs: [
        "artd_test.cc",
        "file_utils_test.cc",
        "path_utils_test.cc",
    ],
    data: [
        ":art-gtest-jars-Main",
        ":art-gtest-jars-Nested",
    ],
}

// Version of ART gtest `art_artd_tests` bundled with the ART APEX on target.
//
// This test requires the full libbinder_ndk implementation on host, which is
// not available as a prebuilt on the thin master-art branch. Hence it won't
// work there, and there's a conditional in Android.gtest.mk to exclude it from
// test-art-host-gtest.
art_cc_test {
    name: "art_artd_tests",
    defaults: [
        "art_gtest_defaults",
        "art_artd_tests_defaults",
    ],
}

// Standalone version of ART gtest `art_artd_tests`, not bundled with the ART
// APEX on target.
art_cc_test {
    name: "art_standalone_artd_tests",
    defaults: [
        "art_standalone_gtest_defaults",
        "art_artd_tests_defaults",
    ],
    test_config_template: "art_standalone_artd_tests.xml",
}
