//
// Copyright (C) 2018 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.
//

soong_config_module_type
{
    name:"CS_01_cc_defaults",
    module_type:"cc_defaults",
    config_namespace:"libhdr",
    bool_variables:["CS01"],
    properties:["cflags",
                "srcs",
                "header_libs",
                "static_libs",
                "shared_libs",
    ],
}

CS_01_cc_defaults
{
    name:"CS_01_defaults",
    soong_config_variables:{
        CS01:{
            cflags: [
                "-Wno-unused-function",
                "-DLOG_TAG=\"libhdrTest\"",
                "-DUSE_FULL_ST2094_40",
            ],
            srcs: [
                "CS_01_libhdrTest.cpp",
                "wcgTestVector.cpp",
                "hdrTestVector.cpp",
                "hdr10pTestVector.cpp",
            ],
            header_libs: [
                "libsystem_headers",
                "libexynos_headers",
                "libhdr_header",
                "libhdrinterface_header_default",
            ],
            static_libs: [
                "libgtest",
            ],
            shared_libs: [
                "liblog",
                "libutils",
                "libcutils",
                "libxml2",
                "libpng",
                "libhdr_plugin",
            ],
        }
    }
}

cc_test {
    name: "CS_01_libhdrTest",
    defaults: [
        "CS_01_defaults",
    ],
    proprietary: true,
}

soong_config_module_type
{
    name:"CS_04_cc_defaults",
    module_type:"cc_defaults",
    config_namespace:"libhdr",
    bool_variables:["CS04"],
    properties:["cflags",
                "srcs",
                "header_libs",
                "static_libs",
                "shared_libs",
    ],
}

CS_04_cc_defaults
{
    name:"CS_04_defaults",
    soong_config_variables:{
        CS04:{
            cflags: [
                "-Wno-unused-function",
                "-DLOG_TAG=\"hdrdrvTest\"",
                "-DUSE_FULL_ST2094_40",
            ],
            srcs: [
                "CS_04_hdrdrvTest.cpp",
                "VendorVideoAPI_hdrTest.cpp",
                "wcgTestVector.cpp",
                "hdrTestVector.cpp",
                "hdr10pTestVector.cpp",
            ],
            header_libs: [
                "android.hardware.graphics.composer@2.1-command-buffer",
                "android.hardware.graphics.composer@2.2-command-buffer",
                "android.hardware.graphics.composer@2.3-command-buffer",
                "android.hardware.graphics.composer@2.4-command-buffer",
                "libhdrinterface_header_default_test",
                "libhdr_header_test",
            ],
            static_libs: [
                "android.hardware.graphics.allocator-V1-ndk",
                "android.hardware.graphics.allocator@2.0",
                "android.hardware.graphics.allocator@3.0",
                "android.hardware.graphics.allocator@4.0",
                "android.hardware.graphics.common@1.1",
                "android.hardware.graphics.composer@2.1",
                "android.hardware.graphics.composer@2.1-vts",
                "android.hardware.graphics.composer@2.2",
                "android.hardware.graphics.composer@2.2-vts",
                "android.hardware.graphics.composer@2.3",
                "android.hardware.graphics.composer@2.3-vts",
                "android.hardware.graphics.composer@2.4",
                "android.hardware.graphics.composer@2.4-vts",
                "android.hardware.graphics.composer3-V1-ndk",
                "android.hardware.graphics.mapper@2.0-vts",
                "android.hardware.graphics.mapper@2.1-vts",
                "android.hardware.graphics.mapper@3.0-vts",
                "android.hardware.graphics.mapper@4.0-vts",
                "libaidlcommonsupport",
                "libgtest",
                "librenderengine",
                "libshaders",
                "libtonemap",
            ],
            shared_libs: [
                "libEGL",
                "libGLESv1_CM",
                "libGLESv2",
                "libbase",
                "libbinder_ndk",
                "libfmq",
                "libgui",
                "libhidlbase",
                "libprocessgroup",
                "libsync",
                "libui",
                "android.hardware.common-V2-ndk",
                "android.hardware.graphics.mapper@2.0",
                "android.hardware.graphics.mapper@2.1",
                "android.hardware.graphics.mapper@3.0",
                "android.hardware.graphics.mapper@4.0",
                "liblog",
                "libutils",
                "libcutils",
                "libxml2",
                "libpng",
                "libhdr_plugin_test",
            ],
        }
    }
}

cc_test {
    name: "CS_04_hdrdrvTest",
    defaults: [
        "VtsHalTargetTestDefaults",
        // Needed for librenderengine
        "skia_deps",
        "CS_04_defaults",
    ],
    disable_framework: true,
    test_suites: [
        "device-tests",
    ],
}

