// Copyright (C) 2010 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: ["frameworks_native_libs_ui_license"],
}

// Added automatically by a large-scale-change
// See: http://go/android-license-faq
license {
    name: "frameworks_native_libs_ui_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_defaults {
    name: "libui-defaults",
    clang: true,
    cflags: [
        "-Wall",
        "-Werror",
    ],
    cppflags: [
        "-Wextra",
    ],

    sanitize: {
        integer_overflow: true,
        misc_undefined: ["bounds"],
    },

}

cc_library_static {
    name: "libui-types",
    vendor_available: true,
    host_supported: true,
    target: {
        windows: {
            enabled: true,
        },
    },

    defaults: [
        "libui-defaults",
    ],

    apex_available: [
        "//apex_available:anyapex",
        "//apex_available:platform",
    ],
    min_sdk_version: "apex_inherit",

    shared_libs: [
        "libbase",
        "libutils",
    ],

    static_libs: [
        "libarect",
        "libmath",
    ],

    srcs: [
        "ColorSpace.cpp",
        "Rect.cpp",
        "Region.cpp",
        "Transform.cpp",
    ],

    export_include_dirs: [
        "include",
        "include_mock",
        "include_private",
        "include_types",
    ],

    export_static_lib_headers: [
        "libarect",
        "libmath",
    ],

}

cc_library_shared {
    name: "libui",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    double_loadable: true,

    clang: true,
    cflags: [
        "-Wall",
        "-Werror",
    ],
    cppflags: [
        "-Wextra",
    ],

    sanitize: {
        integer_overflow: true,
        misc_undefined: ["bounds"],
    },

    srcs: [
        "DebugUtils.cpp",
        "DeviceProductInfo.cpp",
        "DisplayMode.cpp",
        "DynamicDisplayInfo.cpp",
        "Fence.cpp",
        "FenceTime.cpp",
        "FrameStats.cpp",
        "Gralloc.cpp",
        "Gralloc2.cpp",
        "Gralloc3.cpp",
        "Gralloc4.cpp",
        "GraphicBuffer.cpp",
        "GraphicBufferAllocator.cpp",
        "GraphicBufferMapper.cpp",
        "HdrCapabilities.cpp",
        "PixelFormat.cpp",
        "PublicFormat.cpp",
        "StaticDisplayInfo.cpp",
    ],

    include_dirs: [
        "frameworks/native/include",
    ],
    export_include_dirs: [
        "include",
        "include_private",
    ],

    defaults: [
        "libui-defaults",
        // Uncomment the following line to enable VALIDATE_REGIONS traces
        //defaults: ["libui-validate-regions-defaults"],
    ],

    shared_libs: [
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.allocator@3.0",
        "android.hardware.graphics.allocator@4.0",
        "android.hardware.graphics.common-V3-ndk",
        "android.hardware.graphics.common@1.2",
        "android.hardware.graphics.mapper@2.0",
        "android.hardware.graphics.mapper@2.1",
        "android.hardware.graphics.mapper@3.0",
        "android.hardware.graphics.mapper@4.0",
        "libbase",
        "libcutils",
        "libgralloctypes",
        "libhidlbase",
        "libsync",
        "libutils",
        "liblog",
    ],

    export_shared_lib_headers: [
        "android.hardware.graphics.common@1.2",
        "android.hardware.graphics.common-V3-ndk",
        "android.hardware.graphics.mapper@4.0",
        "libgralloctypes",
    ],

    static_libs: [
        "libarect",
        "libgrallocusage",
        "libmath",
    ],

    whole_static_libs: [
        "libui-types",
    ],

    // bufferhub is not used when building libgui for vendors
    target: {
        vendor: {
            cflags: ["-DLIBUI_IN_VNDK"],
            exclude_srcs: [
            ],
            exclude_header_libs: [
            ],
            exclude_shared_libs: [
            ],
        },
    },

    header_libs: [
        "libbase_headers",
        "libnativebase_headers",
        "libnativewindow_headers",
        "libhardware_headers",
        "libui_headers",
    ],

    export_static_lib_headers: [
        "libarect",
        "libmath",
    ],

    export_header_lib_headers: [
        "libbase_headers",
        "libnativebase_headers",
        "libnativewindow_headers",
        "libhardware_headers",
        "libui_headers",
    ],
    min_sdk_version: "29",

    pgo: {
        sampling: true,
        profile_file: "libui/libui.profdata",
    },
}

cc_library_headers {
    name: "libui_headers",
    export_include_dirs: ["include"],
    vendor_available: true,
    target: {
        vendor: {
            cflags: ["-DLIBUI_IN_VNDK"],
            override_export_include_dirs: ["include_vndk"],
        },
    },
    header_libs: [
        "libnativewindow_headers",
        "libmath_headers",
    ],
    export_header_lib_headers: [
        "libnativewindow_headers",
        "libmath_headers",
    ],
    min_sdk_version: "29",
}

// defaults to enable VALIDATE_REGIONS traces
cc_defaults {
    name: "libui-validate-regions-defaults",
    shared_libs: ["libutilscallstack"],
    cflags: ["-DVALIDATE_REGIONS"],
}

subdirs = [
    "tests",
    "tools",
]

filegroup {
    name: "libui_host_common",
    srcs: [
        "Rect.cpp",
        "Region.cpp",
        "PixelFormat.cpp",
        "Transform.cpp",
    ],
}
