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

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

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

// This configuration is inherited by all hidl-gen-java modules
java_defaults {
    name: "hidl-java-module-defaults",
    // TODO(b/68433855): allow HIDL java to build in the PDK
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
}

//
// 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",
        "DocComment.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",
        "generateCppAdapter.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",
    ],
}