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

// This native library contains JNI support code for the ART Service Java
// Language library.
cc_defaults {
    name: "libartservice_defaults",
    defaults: ["art_defaults"],
    host_supported: true,
    srcs: [
        "native/service.cc",
    ],
    export_include_dirs: ["native"],
    shared_libs: [
        "libbase",
        "libnativehelper",
    ],
}

cc_library {
    name: "libartservice",
    defaults: ["libartservice_defaults"],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    shared_libs: [
        "libart",
        "libartbase",
        "libarttools", // Contains "libc++fs".
    ],
}

cc_library {
    name: "libartserviced",
    defaults: [
        "libartservice_defaults",
        "art_debug_defaults",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    shared_libs: [
        "libartd",
        "libartbased",
        "libarttools", // Contains "libc++fs".
    ],
}

java_defaults {
    name: "service-art-defaults",
    defaults: [
        "framework-system-server-module-defaults",
    ],
    sdk_version: "system_server_current",
    min_sdk_version: "31",
    srcs: [
        "java/**/*.java",
    ],
    libs: [
        "androidx.annotation_annotation",
        "auto_value_annotations",
        "sdk_module-lib_current_framework-permission-s",
        // TODO(b/256866172): Transitive dependency, for r8 only.
        "framework-statsd.stubs.module_lib",
        // TODO(b/256866172): Transitive dependency, for r8 only. This module
        // always refers to the jar in prebuilts/sdk. We can't use
        // "framework-connectivity.stubs.module_lib" here because it's not
        // available on master-art.
        "sdk_module-lib_current_framework-connectivity",
    ],
    static_libs: [
        "art-statslog-art-java",
        "artd-aidl-java",
        "modules-utils-package-state",
        "modules-utils-shell-command-handler",
        "service-art-proto-java",
    ],
    plugins: [
        "auto_value_plugin",
    ],
}

// Used by tests to allow tests to mock the right classes.
java_library {
    name: "service-art-pre-jarjar",
    defaults: ["service-art-defaults"],
    installable: false,
    visibility: [
        "//visibility:override",
        "//visibility:private",
    ],
}

// Provides the API and implementation of the ART Service class that will be
// loaded by the System Server.
java_sdk_library {
    // This target is named 'service-art' to conform to the naming conventions
    // for JAR files in the System Server.
    name: "service-art",
    defaults: [
        "service-art-defaults",
        "framework-system-server-module-optimize-defaults",
    ],
    permitted_packages: ["com.android.server.art"],
    dex_preopt: {
        profile: "art-profile",
    },
    visibility: [
        "//art:__subpackages__",
        "//frameworks/base/services/core",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    jarjar_rules: "jarjar-rules.txt",
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
}

java_library {
    name: "service-art-proto-java",
    proto: {
        type: "lite",
    },
    srcs: [
        "proto/**/*.proto",
    ],
    sdk_version: "system_server_current",
    min_sdk_version: "31",
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
}

java_library {
    name: "art-statslog-art-java",
    srcs: [
        ":art-statslog-art-java-gen",
    ],
    libs: [
        "framework-statsd.stubs.module_lib",
    ],
    sdk_version: "system_server_current",
    min_sdk_version: "31",
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
}

genrule {
    name: "art-statslog-art-java-gen",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --java $(out) --module art --javaPackage com.android.server.art --javaClass ArtStatsLog",
    out: ["java/com/android/server/art/ArtStatsLog.java"],
}

art_cc_defaults {
    name: "art_libartservice_tests_defaults",
    defaults: ["libartservice_defaults"],
    srcs: [
        "native/service_test.cc",
    ],
    static_libs: [
        "libgmock",
    ],
}

// Version of ART gtest `art_libartservice_tests` bundled with the ART APEX on target.
// TODO(b/192274705): Remove this module when the migration to standalone ART gtests is complete.
art_cc_test {
    name: "art_libartservice_tests",
    defaults: [
        "art_gtest_defaults",
        "art_libartservice_tests_defaults",
    ],
    shared_libs: [
        "libarttools",
    ],
}

// Standalone version of ART gtest `art_libartservice_tests`, not bundled with the ART APEX on
// target.
art_cc_test {
    name: "art_standalone_libartservice_tests",
    defaults: [
        "art_standalone_gtest_defaults",
        "art_libartservice_tests_defaults",
    ],
    static_libs: [
        "libarttools",
    ],
}

android_test {
    name: "ArtServiceTests",

    // Include all test java files.
    srcs: [
        "javatests/**/*.java",
    ],

    // disable the target when prebuilt modules are used
    defaults: [
        "art_module_source_build_java_defaults",
    ],

    static_libs: [
        "androidx.test.ext.junit",
        "androidx.test.ext.truth",
        "androidx.test.runner",
        "artd-aidl-java",
        "framework-annotations-lib",
        // We need ExtendedMockito to mock static methods.
        "mockito-target-extended-minus-junit4",
        "modules-utils-package-state",
        "service-art-pre-jarjar",
        // Statically link against system server to allow us to mock system
        // server APIs. This won't work on master-art, but it's fine because we
        // don't run this test on master-art.
        "services.core",
    ],

    jni_libs: [
        "libartservice",
        // The two libraries below are required by ExtendedMockito.
        "libdexmakerjvmtiagent",
        "libstaticjvmtiagent",
    ],
    compile_multilib: "both",

    // TODO: This module should move to sdk_version: "system_server_current" when possible,
    //   as this will restrict the APIs available to just that expected system API. For now,
    //   a compileOnly / runtimeOnly split for dependencies doesn't exist in the build system
    //   and so it's not possible to enforce.
    min_sdk_version: "31",

    test_suites: ["general-tests"],
    test_config: "ArtServiceTests.xml",
}

filegroup {
    name: "libartservice_protos",
    srcs: [
        "proto/**/*.proto",
    ],
    visibility: [
        "//cts/hostsidetests/compilation",
    ],
}
