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


cc_library_headers {
    name: "libdvr_headers",
    export_include_dirs: ["include"],
    vendor_available: true,
}

cflags = [
    "-DLOG_TAG=\"libdvr\"",
    "-DTRACE=0",
    "-Wall",
    "-Werror",
]

srcs = [
    "dvr_api.cpp",
    "dvr_buffer.cpp",
    "dvr_buffer_queue.cpp",
    "dvr_configuration_data.cpp",
    "dvr_display_manager.cpp",
    "dvr_hardware_composer_client.cpp",
    "dvr_performance.cpp",
    "dvr_pose.cpp",
    "dvr_surface.cpp",
    "dvr_vsync.cpp",
]

static_libs = [
    "libbroadcastring",
    "libvrsensor",
    "libdisplay",
    "libvirtualtouchpadclient",
    "libvr_hwc-impl",
    "libvr_hwc-binder",
    "libgrallocusage",
    "libperformance",
]

shared_libs = [
    "android.hardware.graphics.bufferqueue@1.0",
    "android.hidl.token@1.0-utils",
    "libbase",
    "libbufferhubqueue",
    "libbinder",
    "liblog",
    "libcutils",
    "libutils",
    "libnativewindow",
    "libgui",
    "libui",
    "libpdx_default_transport",
]

cc_library_shared {
    name: "libdvr",
    owner: "google",
    cflags: cflags,
    header_libs: ["libdvr_headers"],
    export_header_lib_headers: ["libdvr_headers"],
    srcs: srcs,
    static_libs: static_libs,
    shared_libs: shared_libs,
    version_script: "exported_apis.lds",
}

// Also build a static libdvr for linking into tests. The linker script
// restricting function access in the shared lib makes it inconvenient to use in
// test code.
cc_library_static {
    name: "libdvr_static",
    owner: "google",
    cflags: cflags,
    header_libs: ["libdvr_headers"],
    export_header_lib_headers: ["libdvr_headers"],
    srcs: srcs,
    static_libs: static_libs,
    shared_libs: shared_libs,
}

subdirs = [
    "tests",
]
