// Copyright (C) 2016 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 = [
    "c2hal",
    "test",
    "utils",
]

cc_defaults {
    name: "hidl-gen-defaults",
    cflags: [
        "-O0",
        "-g",
        "-Wall",
        "-Werror",
    ],
}

// This configuration is inherited by all hidl-gen-generated modules.
cc_defaults {
    name: "hidl-module-defaults",
    cflags: [
        "-Wall",
        "-Werror",
    ],
    product_variables: {
        debuggable: {
            cflags: ["-D__ANDROID_DEBUGGABLE__"]
        },
        treble: {
            cflags: ["-D__ANDROID_TREBLE__"]
        },
    },
}

//
// libhidl-gen-hash
//
cc_library {
    name: "libhidl-gen-hash",
    host_supported: true,
    defaults: ["hidl-gen-defaults"],
    srcs: ["Hash.cpp"],
    local_include_dirs: ["include_hash/hidl-hash"],
    export_include_dirs: ["include_hash"],
    shared_libs: [
        "libbase",
        "libcrypto",
        "libssl",
    ],
}

//
// libhidl-gen
//
cc_library_host_shared {
    name: "libhidl-gen",
    defaults: ["hidl-gen-defaults"],
    srcs: [
        "Annotation.cpp",
        "ArrayType.cpp",
        "CompoundType.cpp",
        "ConstantExpression.cpp",
        "DeathRecipientType.cpp",
        "EnumType.cpp",
        "HandleType.cpp",
        "HidlTypeAssertion.cpp",
        "Interface.cpp",
        "Location.cpp",
        "MemoryType.cpp",
        "Method.cpp",
        "NamedType.cpp",
        "PointerType.cpp",
        "FmqType.cpp",
        "RefType.cpp",
        "ScalarType.cpp",
        "Scope.cpp",
        "StringType.cpp",
        "Type.cpp",
        "TypeDef.cpp",
        "VectorType.cpp",
    ],
    shared_libs: [
        "libbase",
        "liblog",
        "libhidl-gen-hash",
        "libhidl-gen-utils",
    ],
    export_shared_lib_headers: [
        "libbase",
        "libhidl-gen-utils",
    ],
    export_include_dirs: ["."], // for tests
}

//
// libhidl-gen-ast
//

cc_library_host_shared {
    name: "libhidl-gen-ast",
    defaults: ["hidl-gen-defaults"],
    srcs: [
        "Coordinator.cpp",
        "generateCpp.cpp",
        "generateCppImpl.cpp",
        "generateJava.cpp",
        "generateVts.cpp",
        "hidl-gen_y.yy",
        "hidl-gen_l.ll",
        "AST.cpp",
    ],
    shared_libs: [
        "libbase",
        "liblog",
        "libhidl-gen",
        "libhidl-gen-hash",
        "libhidl-gen-utils",
    ],
    export_shared_lib_headers: [
        "libbase",
        "libhidl-gen-utils",
    ],
    export_include_dirs: ["."], // for tests
}

//
// hidl-gen
//
cc_binary_host {
    name: "hidl-gen",
    defaults: ["hidl-gen-defaults"],
    srcs: ["main.cpp"],
    shared_libs: [
        "libbase",
        "liblog",
        "libhidl-gen",
        "libhidl-gen-ast",
        "libhidl-gen-hash",
        "libhidl-gen-utils",
    ],
}
