// 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: [
        "liblog", // Used by "JNIHelp.h".
        "libnativehelper",
    ],
    target: {
        android: {
            compile_multilib: "first",
        },
    },
}

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

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

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",
        "aconfig-annotations-lib",
        "art-aconfig-flags-java-lib",
        "auto_value_annotations",
        "sdk_module-lib_current_framework-configinfrastructure",
        "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: [
        "android.content.pm.flags-aconfig-java-export",
        "art-statslog-art-java",
        "artd-aidl-java",
        "dexopt_chroot_setup-aidl-java",
        "modules-utils-build",
        "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"],
    },
    aconfig_declarations: [
        "art-aconfig-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` for host.
// TODO(b/192274705): Remove this module when the migration to standalone ART gtests is complete.
art_cc_test {
    name: "art_libartservice_tests",
    device_supported: false,
    defaults: [
        "art_gtest_defaults",
        "art_libartservice_tests_defaults",
    ],
    shared_libs: [
        "libarttools",
        "libbase",
    ],
}

// 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",
        "libbase",
    ],
    test_config_template: ":art-gtests-target-standalone-non-multilib-template",
}

android_test {
    name: "ArtServiceTests",

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

    libs: [
        "sdk_module-lib_current_framework-configinfrastructure",
    ],

    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: "first",

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