// 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 = [
    "test"
]

libvintf_flags = [
    "-Wall",
    "-Werror",
]

cc_library {
    name: "libvintf",
    host_supported: true,
    cflags: libvintf_flags,
    shared_libs: [
        "libbase",
        "liblog",
        "libselinux",
        "libtinyxml2",
    ],
    export_include_dirs: ["include"],
    local_include_dirs: ["include/vintf"],

    srcs: [
        "parse_string.cpp",
        "parse_xml.cpp",
        "CompatibilityMatrix.cpp",
        "HalManifest.cpp",
        "HalInterface.cpp",
        "KernelConfigParser.cpp",
        "KernelConfigTypedValue.cpp",
        "RuntimeInfo.cpp",
        "ManifestHal.cpp",
        "MatrixHal.cpp",
        "MatrixKernel.cpp",
        "TransportArch.cpp",
        "VintfObject.cpp",
        "XmlFile.cpp",
        "utils.cpp",
    ],

    target: {
        host: {
            srcs: [
                "RuntimeInfo-host.cpp"
            ],
            cflags: [
                "-DLIBVINTF_HOST",
            ],
        },
        android: {
            shared_libs: [
                "libcutils",
                "libutils",
                "libz"
            ],
            srcs: [
                "RuntimeInfo-target.cpp"
            ],
            cflags: ["-DLIBVINTF_TARGET"],
        },
    }
}

cc_binary {
    name: "vintf",
    cflags: libvintf_flags,
    shared_libs: [
        "libvintf",
    ],
    srcs: [
        "main.cpp"
    ],
}

cc_binary_host {
    name: "assemble_vintf",
    cflags: libvintf_flags,
    shared_libs: [
        "libvintf",
        "libbase",
    ],
    srcs: [
        "assemble_vintf.cpp"
    ],
}

cc_library {
    name: "libvintftest",
    host_supported: true,
    shared_libs: [
        "libbase",
        "liblog",
        "libselinux",
        "libtinyxml2",
    ],
    export_include_dirs: ["include/vintf", "include", "test", "."],
    local_include_dirs: ["include/vintf", "test", "."],

    srcs: [
        "parse_string.cpp",
        "parse_xml.cpp",
        "CompatibilityMatrix.cpp",
        "HalManifest.cpp",
        "HalInterface.cpp",
        "KernelConfigTypedValue.cpp",
        "RuntimeInfo.cpp",
        "ManifestHal.cpp",
        "MatrixHal.cpp",
        "MatrixKernel.cpp",
        "TransportArch.cpp",
        "VintfObject.cpp",
        "XmlFile.cpp",
        "test/RuntimeInfo-fake.cpp",
        "test/utils-fake.cpp",
    ],

    target: {
        android: {
            shared_libs: [
                "libcutils",
                "libutils",
                "libz"
            ],
            cflags: ["-DLIBVINTF_TARGET"],
        },
    }
}
