//
// 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.

subdirs = [
    "common",
    "guest",
    "host",
]

cc_library_headers {
    name: "cuttlefish_common_headers",
    export_include_dirs: ["."],
    host_supported: true,
}

// TODO(b/67435044) Update the include paths and remove this
cc_library_headers {
    name: "cuttlefish_glog",
    export_include_dirs: ["common/libs"],
    host_supported: true,
}

cc_defaults {
    name: "cuttlefish_common",
    gnu_extensions: false,
    header_libs: [
        "cuttlefish_common_headers",
        "cuttlefish_kernel_headers",
    ],
    host_supported: true,
    device_supported: true,
    target: {
        linux: {
            host_ldlibs: ["-lrt"],
            cflags: ["-DCUTTLEFISH_HOST"],
        },
        darwin: {
            enabled: false,
        },
        android: {
            enabled: true,
        },
        windows: {
            enabled: false,
        },
    },
}

cc_defaults {
    name: "cuttlefish_host",
    gnu_extensions: false,
    header_libs: [
        "cuttlefish_common_headers",
        "cuttlefish_kernel_headers",
    ],
    // Build only 64 bit Intel Linux host executables
    device_supported: false,
    compile_multilib: "64",
    target: {
        linux: {
            host_ldlibs: ["-lrt"],
            cflags: ["-DCUTTLEFISH_HOST"],
        },
        darwin: {
            enabled: false,
        },
    },
}

cc_defaults {
    name: "cuttlefish_intel_only",
    target : {
        android_arm: {
            enabled: false,
        },
    },
}

cc_library {
    name: "vsoc_lib",
    srcs: [
        "common/vsoc/lib/compat.cpp",
        "common/vsoc/lib/e2e_test_region_layout.cpp",
        "common/vsoc/lib/fb_bcast_layout.cpp",
        "common/vsoc/lib/gralloc_layout.cpp",
        "common/vsoc/lib/lock_common.cpp",
        "common/vsoc/lib/region_view.cpp",
        "common/vsoc/lib/wifi_exchange_layout.cpp",
        "common/vsoc/lib/wifi_exchange_view.cpp",
    ],
    header_libs: [
        "cuttlefish_glog"
    ],
    static_libs: [
        "libcuttlefish_fs",
        "cuttlefish_auto_resources",
        "libbase",
        "libgflags",
    ],
    shared_libs: [
        "liblog",
    ],
    target: {
        linux: {
            host_ldlibs: ["-lrt"],
            cflags: ["-DCUTTLEFISH_HOST"],
            srcs: [
                "host/vsoc/lib/host_lock.cpp",
                "host/vsoc/lib/region_control.cpp",
                "host/vsoc/lib/region_view.cpp",
            ],
        },
        android: {
            srcs: [
                "guest/vsoc/lib/guest_lock.cpp",
                "guest/vsoc/lib/region_control.cpp",
                "guest/vsoc/lib/region_view.cpp",
            ],
        },
    },
    defaults: ["cuttlefish_common", "cuttlefish_intel_only"],
}

cc_library_host_static {
    name: "libvsoc_gralloc",
    srcs: [
        "host/vsoc/gralloc/gralloc_buffer_region.cpp",
    ],
    header_libs: ["cuttlefish_glog"],
    static_libs: [
        "vsoc_lib",
        "libbase",
    ],
    defaults: ["cuttlefish_host"],
}

cc_test_host {
    name: "circqueue_test",
    srcs: [
        "common/vsoc/lib/circqueue_test.cpp",
    ],
    static_libs: [
        "vsoc_lib",
        "libbase",
    ],
    defaults: ["cuttlefish_host"],
}

cc_test_host {
    name: "lock_test",
    srcs: [
        "common/vsoc/lib/lock_test.cpp",
    ],
    static_libs: [
        "vsoc_lib",
        "libgtest_host",
        "libbase",
        "cuttlefish_auto_resources",
        "libcuttlefish_fs",
    ],
    defaults: ["cuttlefish_host"],
}

cc_test_host {
    name: "vsoc_graphics_test",
    srcs: [
        "common/vsoc/lib/graphics_test.cpp",
    ],
    static_libs: [
        "vsoc_lib",
        "libbase",
    ],
    defaults: ["cuttlefish_host"],
}

cc_binary_host {
    name: "host_region_e2e_test",
    srcs: [
        "host/vsoc/lib/host_region_e2e_test.cpp",
    ],
    static_libs: [
        "vsoc_lib",
        "libgtest_host",
        "libbase",
        "cuttlefish_auto_resources",
        "libcuttlefish_fs",
        "libgflags",
    ],
    defaults: ["cuttlefish_host"],
}
