//
// 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 {
    default_team: "trendy_team_virtualization",
    default_applicable_licenses: ["Android-Apache-2.0"],
}

soong_config_module_type {
    name: "avf_flag_aware_rust_defaults",
    module_type: "rust_defaults",
    config_namespace: "ANDROID",
    bool_variables: [
        "release_avf_enable_device_assignment",
        "release_avf_enable_dice_changes",
        "release_avf_enable_llpvm_changes",
        "release_avf_enable_multi_tenant_microdroid_vm",
        "release_avf_enable_remote_attestation",
        "release_avf_enable_vendor_modules",
        "release_avf_enable_virt_cpufreq",
    ],
    properties: [
        "cfgs",
    ],
}

avf_flag_aware_rust_defaults {
    name: "avf_build_flags_rust",
    soong_config_variables: {
        release_avf_enable_device_assignment: {
            cfgs: ["device_assignment"],
        },
        release_avf_enable_dice_changes: {
            cfgs: ["dice_changes"],
        },
        release_avf_enable_llpvm_changes: {
            cfgs: ["llpvm_changes"],
        },
        release_avf_enable_multi_tenant_microdroid_vm: {
            cfgs: ["multi_tenant"],
        },
        release_avf_enable_remote_attestation: {
            cfgs: ["remote_attestation"],
        },
        release_avf_enable_vendor_modules: {
            cfgs: ["vendor_modules"],
        },
        release_avf_enable_virt_cpufreq: {
            cfgs: ["virt_cpufreq"],
        },
    },
}

soong_config_module_type {
    name: "avf_flag_aware_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "ANDROID",
    bool_variables: [
        "release_avf_enable_dice_changes",
        "release_avf_enable_virt_cpufreq",
    ],
    properties: [
        "cflags",
    ],
}

avf_flag_aware_cc_defaults {
    name: "avf_build_flags_cc",
    soong_config_variables: {
        release_avf_enable_dice_changes: {
            cflags: ["-DAVF_OPEN_DICE_CHANGES=1"],
        },
        release_avf_enable_virt_cpufreq: {
            cflags: ["-DAVF_ENABLE_VIRT_CPUFREQ=1"],
        },
    },
}

genrule_defaults {
    name: "dts_to_dtb",
    tools: ["dtc"],
    cmd: "FILES=($(in)) && $(location dtc) -@ -I dts -O dtb $${FILES[-1]} -o $(out)",
}

// This is a temporary workaround until b/309090563 is implemented.
aconfig_declarations {
    name: "avf_aconfig_flags",
    package: "com.android.system.virtualmachine.flags",
    srcs: [
        "avf_flags.aconfig",
    ],
}

java_aconfig_library {
    name: "avf_aconfig_flags_java",
    aconfig_declarations: "avf_aconfig_flags",
    sdk_version: "module_current",
    apex_available: ["com.android.virt"],
}
