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

// TODO(b/31559095): bionic on host should define this
package {
    default_applicable_licenses: ["frameworks_native_libs_binder_ndk_license"],
}

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

cc_defaults {
    name: "libbinder_ndk_host_user",
    target: {
        host: {
            cflags: [
                "-D__INTRODUCED_IN(n)=",
                "-D__assert(a,b,c)=",
                // We want all the APIs to be available on the host.
                "-D__ANDROID_API__=10000",
            ],
        },
        darwin: {
            enabled: false,
        },
    },
}

cc_library {
    name: "libbinder_ndk",

    defaults: ["libbinder_ndk_host_user"],
    host_supported: true,

    llndk: {
        symbol_file: "libbinder_ndk.map.txt",
    },

    export_include_dirs: [
        "include_cpp",
        "include_ndk",
        "include_platform",
    ],

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],

    srcs: [
        "ibinder.cpp",
        "ibinder_jni.cpp",
        "parcel.cpp",
        "parcel_jni.cpp",
        "process.cpp",
        "stability.cpp",
        "status.cpp",
        "service_manager.cpp",
    ],

    shared_libs: [
        "libandroid_runtime_lazy",
        "libbase",
        "libbinder",
        "libutils",
    ],

    header_libs: [
        "jni_headers",
    ],
    export_header_lib_headers: [
        "jni_headers",
    ],

    target: {
        android: {
            // Only one copy of this library on an Android device
            static: {
                enabled: false,
            },
        },
        linux: {
            version_script: "libbinder_ndk.map.txt",
        },
        darwin: {
            enabled: false,
        },
    },
    stubs: {
        symbol_file: "libbinder_ndk.map.txt",
        versions: [
            "29",
            "30",
        ],
    },
    tidy: true,
    tidy_flags: [
        // Only check our headers
        "--header-filter=^.*frameworks/native/libs/binder/.*.h$",
    ],
    tidy_checks_as_errors: [
        // Explicitly list the checks that should not occur in this module.
        "abseil-*",
        "android-*",
        "bugprone-*",
        "cert-*",
        "clang-analyzer-*",
        "-clang-analyzer-core.CallAndMessage",
        "-clang-analyzer-core.uninitialized.Assign",
        "-clang-analyzer-unix.Malloc",
        "-clang-analyzer-deadcode.DeadStores",
        "-clang-analyzer-optin.cplusplus.UninitializedObject",
        "google-*",
        "-google-readability-*",
        "-google-runtime-references",
        "misc-*",
        "-misc-no-recursion",
        "-misc-non-private-member-variables-in-classes",
        "-misc-redundant-expression",
        "-misc-unused-parameters",
        "-misc-unused-using-decls",
        "performance*",
        "portability*",
    ],
}

cc_library_headers {
    name: "libbinder_headers_platform_shared",
    export_include_dirs: ["include_cpp"],
    vendor_available: true,
    host_supported: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,
    target: {
        darwin: {
            enabled: false,
        },
    },
    apex_available: [
        "//apex_available:platform",
        "com.android.media",
        "com.android.media.swcodec",
    ],
    min_sdk_version: "29",
}

ndk_headers {
    name: "libbinder_ndk_headers",
    from: "include_ndk/android",
    to: "android",
    srcs: [
        "include_ndk/android/*.h",
    ],
    license: "NOTICE",
}

// TODO(b/160624671): package with the aidl compiler
ndk_headers {
    name: "libbinder_ndk_helper_headers",
    from: "include_cpp/android",
    to: "android",
    srcs: [
        "include_cpp/android/*.h",
    ],
    license: "NOTICE",
}

ndk_library {
    name: "libbinder_ndk",
    symbol_file: "libbinder_ndk.map.txt",
    first_version: "29",
}
