// 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: [
        "libarttools", // Contains "libc++fs".
        "libbase",
        "libnativehelper",
    ],
}

cc_library {
    name: "libartservice",
    defaults: ["libartservice_defaults"],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    shared_libs: [
        "libart",
        "libartbase",
    ],
}

cc_library {
    name: "libartserviced",
    defaults: [
        "libartservice_defaults",
        "art_debug_defaults",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    shared_libs: [
        "libartd",
        "libartbased",
    ],
}

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

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

android_test {
    name: "ArtServiceTests",

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

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