//
// Copyright (C) 2017 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_applicable_licenses: ["device_google_cuttlefish_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
// See: http://go/android-license-faq
license {
    name: "device_google_cuttlefish_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-MIT",
    ],
    // large-scale-change unable to identify any license_text files
}

cc_library_headers {
    name: "cuttlefish_common_headers",
    vendor_available: true,
    product_available: true,
    export_include_dirs: ["."],
    host_supported: true,
    apex_available: [
        "//apex_available:platform",
        "com.android.virt",
    ],
    target: {
        windows: {
            enabled: true,
        },
    },
}

cc_defaults {
    name: "cuttlefish_base",
    gnu_extensions: false,
    header_libs: [
        "cuttlefish_common_headers",
    ],
    target: {
        host: {
            cflags: ["-DCUTTLEFISH_HOST"],
            compile_multilib: "64",
        },
        linux: {
            host_ldlibs: ["-lrt"],
        },
        // We don't need Darwin host-side builds
        darwin: {
            enabled: false,
        },
    },
    cflags: ["-Werror", "-Wall", "-D_FILE_OFFSET_BITS=64"],
    apex_available: [
        "//apex_available:platform",
        "com.android.virt",
    ],
}

soong_config_module_type {
    name: "cf_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "cvdhost",
    bool_variables: ["enforce_mac80211_hwsim"],
    properties: ["cflags"],
}

// This is the customization layer driven by soong config variables.
cf_cc_defaults {
    name: "cvd_cc_defaults",
    soong_config_variables: {
        // PRODUCT_ENFORCE_MAC80211_HWSIM sets this
        enforce_mac80211_hwsim: {
            cflags: ["-DENFORCE_MAC80211_HWSIM=true"],
            conditions_default: {
                cflags: [],
            }
        },
    }
}
// Defaults for cuttlefish modules that are available only in the guest OS (i.e. cuttlefish running
// in a guest VM).
cc_defaults {
    name: "cuttlefish_guest_only",
    vendor: true,
    defaults: ["cuttlefish_base"],
}

// Same as cuttlefish_guest_only, but modules are placed in /product partition.
cc_defaults {
    name: "cuttlefish_guest_product_only",
    product_specific: true,
    defaults: ["cuttlefish_base"],
}

// Defaults for cuttlefish modules that are available only in the host-side OS. Here "host" includes
// both (1) non-Android OS like gLinux or Ubuntu, and (2) Android OS that is capable of running
// guest VM(s) in it. Note that, in the context of the Android build systm - Soong - (1) is called
// as "host" and (2) is called as "target". But here, the term "host" is in the context of VMs. If a
// module is for the host-side VM (either Android or non-Android), "cuttlefish_host" shall be used.
cc_defaults {
    name: "cuttlefish_host",
    host_supported: true, // this "host" means (1)
    device_supported: true, // this is for (2)
    vendor_available: true,
    defaults: ["cuttlefish_base", "cvd_cc_defaults"],
}

// Same as "cuttlefish_host", but only for non-Android OS.
cc_defaults {
    name: "cuttlefish_buildhost_only",
    host_supported: true,
    device_supported: false,
    defaults: ["cuttlefish_base"],
}

cc_defaults {
  name: "cuttlefish_recovery_available",
  recovery_available : true
}

cc_defaults {
  name: "enabled_on_p_and_later",
  enabled: true
}

cc_defaults {
  name: "enabled_on_q_and_later",
  enabled: true
}

cc_defaults {
  name: "enabled_on_q_internal_and_later",
  enabled: true
}

cc_defaults {
    name: "cuttlefish_libicuuc",
    target: {
        host: {
            shared_libs: [
                "libicuuc",
            ],
        },
    },
}

cc_defaults {
    name: "cuttlefish_health_storage",
    defaults: ["enabled_on_q_and_later"],
}

java_test_host {
    name: "tombstone_transmit_tests",

    libs: ["tradefed"],

    srcs:  ["tests/src/**/TombstoneTransmitTest.java"],

    test_config: "tests/tombstone-transmit-tests.xml",

    test_suites: ["general-tests"],
}

filegroup {
    name: "cf_dtb",
    srcs: ["dtb.img"],
}
