// Copyright 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 "system_security_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["system_security_license"],
}

rust_defaults {
    name: "libkeystore2_defaults",
    crate_name: "keystore2",
    srcs: ["src/lib.rs"],
    defaults: [
        "keymint_use_latest_hal_aidl_rust",
    ],

    rustlibs: [
        "android.hardware.security.secureclock-V1-rust",
        "android.hardware.security.sharedsecret-V1-rust",
        "android.os.permissions_aidl-rust",
        "android.security.apc-rust",
        "android.security.authorization-rust",
        "android.security.compat-rust",
        "android.security.maintenance-rust",
        "android.security.metrics-rust",
        "android.security.remoteprovisioning-rust",
        "android.system.keystore2-V2-rust",
        "libanyhow",
        "libbinder_rs",
        "libkeystore2_aaid-rust",
        "libkeystore2_apc_compat-rust",
        "libkeystore2_crypto_rust",
        "libkeystore2_km_compat",
        "libkeystore2_selinux",
        "libkeystore2_vintf_rust",
        "liblazy_static",
        "liblibc",
        "liblog_event_list",
        "liblog_rust",
        "librand",
        "librustutils",
        "libserde",
        "libserde_cbor",
        "libthiserror",
    ],
    shared_libs: [
        "libcutils",
    ],
    features: [
        "watchdog",
    ],
}

rust_library {
    name: "libkeystore2",
    defaults: ["libkeystore2_defaults"],
    rustlibs: [
        "liblibsqlite3_sys",
        "librusqlite",
    ],
}

rust_library {
    name: "libkeystore2_test_utils",
    crate_name: "keystore2_test_utils",
    srcs: ["test_utils/lib.rs"],
    defaults: ["keymint_use_latest_hal_aidl_rust"],
    rustlibs: [
        "android.system.keystore2-V2-rust",
        "libbinder_rs",
        "libkeystore2_selinux",
        "liblog_rust",
        "libnix",
        "librand",
        "libserde",
        "libserde_cbor",
    ],
}

rust_library {
    name: "libkeystore2_with_test_utils",
    defaults: ["libkeystore2_defaults"],
    features: [
        "keystore2_blob_test_utils",
    ],
    rustlibs: [
        "liblibsqlite3_sys",
        "librusqlite",
        "libkeystore2_test_utils",
    ],
}

rust_test {
    name: "keystore2_test_utils_test",
    srcs: ["test_utils/lib.rs"],
    defaults: ["keymint_use_latest_hal_aidl_rust"],
    test_suites: ["general-tests"],
    require_root: true,
    auto_gen_config: true,
    compile_multilib: "first",
    rustlibs: [
        "android.system.keystore2-V2-rust",
        "libbinder_rs",
        "libkeystore2_selinux",
        "liblog_rust",
        "libnix",
        "librand",
        "libserde",
        "libserde_cbor",
    ],
}

rust_test {
    name: "keystore2_test",
    crate_name: "keystore2",
    test_suites: ["general-tests"],
    auto_gen_config: true,
    compile_multilib: "first",
    defaults: ["libkeystore2_defaults"],
    rustlibs: [
        "libandroid_logger",
        "libkeystore2_test_utils",
        "liblibsqlite3_sys",
        "libnix",
        "librusqlite",
        "libkeystore2_with_test_utils",
    ],
    // The test should always include watchdog.
    features: [
        "watchdog",
        "keystore2_blob_test_utils",
    ],
}

rust_defaults {
    name: "keystore2_defaults",
    srcs: ["src/keystore2_main.rs"],
    rustlibs: [
        "libandroid_logger",
        "libbinder_rs",
        "liblog_rust",
    ],
    init_rc: ["keystore2.rc"],

    // In S, keystore2 is the only process using dynamically linked Rust from
    // /system. As a result, the usual savings from sharing libraries don't
    // apply.
    // Remove `prefer_rlib: true` once we have several processes, once a space
    // calculation shows net RAM savings, or once we have automatic variant
    // selection available in the build system.
    prefer_rlib: true,

    vintf_fragments: ["android.system.keystore2-service.xml"],

    required: ["keystore_cli_v2"],
}

rust_binary {
    name: "keystore2",
    defaults: ["keystore2_defaults"],
    rustlibs: [
        "libkeystore2",
        "liblegacykeystore-rust",
        "librusqlite",
    ],
    afdo: true,
}
