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

package {
    default_applicable_licenses: ["system_tools_hidl_license"],
}

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

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

// This configuration is inherited by all hidl-gen-generated modules.
cc_defaults {
    name: "hidl-module-defaults",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra-semi",
    ],
    tidy_checks: [
        // _hidl_cb and addOnewayTask are stuck because of the legacy ABI
        "-performance-unnecessary-value-param",
    ],
    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,
        },
    },
}

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

cc_library_host_static {
    name: "libhidl-gen-ast",
    defaults: ["hidl-gen-defaults"],
    srcs: [
        "AST.cpp",
        "Coordinator.cpp",
        "generateCpp.cpp",
        "generateCppAdapter.cpp",
        "generateCppImpl.cpp",
        "generateDependencies.cpp",
        "generateFormattedHidl.cpp",
        "generateInheritanceHierarchy.cpp",
        "generateJava.cpp",
        "generateJavaImpl.cpp",
        "generateVts.cpp",
        "hidl-gen_l.ll",
        "hidl-gen_y.yy",
    ],
    shared_libs: [
        "libbase",
        "libjsoncpp",
    ],
    static_libs: [
        "libcrypto",
        "libhidl-gen",
        "libhidl-gen-hash",
        "libhidl-gen-host-utils",
        "libhidl-gen-utils",
    ],
    export_shared_lib_headers: ["libbase"],
    export_static_lib_headers: [
        "libhidl-gen-hash",
        "libhidl-gen-utils",
    ],
    export_include_dirs: ["."], // for tests
    yacc: {
        gen_location_hh: true,
        gen_position_hh: true,
    },
}

cc_binary_host {
    name: "hidl-gen",
    defaults: ["hidl-gen-defaults"],
    srcs: ["main.cpp"],
    static_libs: [
        "libbase",
        "libcrypto",
        "libhidl-gen",
        "libhidl-gen-ast",
        "libhidl-gen-hash",
        "libhidl-gen-host-utils",
        "libhidl-gen-utils",
        "libjsoncpp",
        "liblog",
    ],
}