// Copyright (C) 2009 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: ["libnativehelper_license"],
}

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

cc_defaults {
    name: "libnativehelper_defaults",
    cflags: [
        "-fvisibility=protected",
        "-std=c11",
    ],
    shared_libs: ["liblog"],
}

cc_library_headers {
    name: "jni_headers",
    host_supported: true,
    export_include_dirs: ["include_jni"],
    native_bridge_supported: true,
    vendor_available: true,
    target: {
        windows: {
            enabled: true,
        },
    },
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
    ramdisk_available: true,
    // recovery_available currently required for libchrome (https://r.android.com/799940).
    recovery_available: true,
    visibility: ["//visibility:public"],
    stl: "none",
    system_shared_libs: [],
    // The minimum sdk version required by users of this module.
    sdk_version: "minimum",
    // As part of mainline modules(APEX), it should support at least 29(Q)
    min_sdk_version: "29",
}

cc_library_headers {
    name: "libnativehelper_header_only",
    host_supported: true,
    export_include_dirs: [
        "header_only_include",
    ],
    header_libs: ["jni_headers"],
    export_header_lib_headers: ["jni_headers"],
    // As part of mainline modules(APEX), it should support at least 29(Q)
    min_sdk_version: "29",
    sdk_version: "minimum",
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
}

cc_library_headers {
    name: "jni_platform_headers",
    host_supported: true,
    export_include_dirs: [
        "include_platform_header_only",
    ],
    header_libs: ["jni_headers"],
    export_header_lib_headers: ["jni_headers"],
    sdk_version: "minimum",
    apex_available: [
        "//apex_available:platform",
        "com.android.art",
        "com.android.art.debug",
    ],
    min_sdk_version: "S",
}

cc_library_shared {
    name: "libnativehelper",
    defaults: ["libnativehelper_defaults"],
    bootstrap: false,
    host_supported: true,
    srcs: [
        "DlHelp.c",
        "ExpandableString.c",
        "JNIHelp.c",
        "JNIPlatformHelp.c",
        "JniConstants.c",
        "JniInvocation.c",
        "file_descriptor_jni.c",
    ],
    export_include_dirs: [
        "header_only_include",
        "include",
        "include_jni",
        "include_platform",
        "include_platform_header_only",
    ],
    stl: "none",
    stubs: {
        symbol_file: "libnativehelper.map.txt",
        versions: ["S"],
    },
    // Only distributed in the ART Module.
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    min_sdk_version: "S",
}

// Lazy loading version of libnativehelper that can be used by code
// that is running before the ART APEX is mounted and
// libnativehelper.so is available.
cc_library_static {
    name: "libnativehelper_lazy",
    defaults: ["libnativehelper_defaults"],
    bootstrap: true,
    host_supported: true,
    export_include_dirs: [
        "header_only_include",
        "include",
        "include_jni",
        "include_platform",
        "include_platform_header_only",
    ],
    apex_available: ["//apex_available:platform"],
    srcs: ["libnativehelper_lazy.c"],
    target: {
        linux: {
            version_script: "libnativehelper.map.txt",
        },
    },
}

//
// NDK-only build for the target (device), using libc++.
// - Relies only on NDK exposed functionality.
// - This doesn't include JniInvocation.
//

cc_library {
    name: "libnativehelper_compat_libc++",
    defaults: ["libnativehelper_defaults"],
    header_libs: ["jni_headers"],
    cflags: ["-Werror"],
    export_header_lib_headers: ["jni_headers"],
    export_include_dirs: [
        "header_only_include",
        "include",
    ],
    host_supported: true,
    local_include_dirs: [
        "header_only_include",
        "include_platform_header_only",
    ],
    srcs: [
        "ExpandableString.c",
        "JNIHelp.c",
    ],
    min_sdk_version: "29",
    sdk_version: "19",
    stl: "none",
    apex_available: [
        "//apex_available:platform",
        "com.android.art",
        "com.android.art.debug",
        "com.android.extservices",
        "com.android.tethering",
    ],
    visibility: [
        "//art:__subpackages__",
        "//cts:__subpackages__",
        "//external/perfetto:__subpackages__",
        "//frameworks/base/packages/Connectivity/tests/integration:__pkg__",
        "//frameworks/base/packages/ConnectivityT:__subpackages__", // TODO: remove after code move
        "//frameworks/base/packages/Tethering:__subpackages__",
        "//frameworks/libs/net/common/native/bpfmapjni",
        "//frameworks/libs/net/common/native/bpfutiljni",
        "//libcore:__subpackages__",
        "//packages/modules/Connectivity:__subpackages__",
        "//packages/modules/ExtServices:__subpackages__",
        "//packages/modules/NetworkStack:__subpackages__",
        ":__subpackages__",
    ],
}

// The NDK module definitions reside in
// system/extras/module_ndk_libs/libnativehelper in platform, with copies of
// these headers and map.txt. Any changes here should be synced there and vice
// versa.
//
// TODO(b/170644498): Improve tooling to remove this duplication.
//
// ndk_headers {
//     name: "ndk_jni.h",
//     from: "include_jni",
//     to: "",
//     srcs: ["include_jni/jni.h"],
//     license: "NOTICE",
// }
//
// ndk_headers {
//     name: "libnativehelper_ndk_headers",
//     from: "include",
//     to: "",
//     srcs: ["include/android/*.h"],
//     license: "NOTICE",
// }
//
// ndk_library {
//     name: "libnativehelper",
//     symbol_file: "libnativehelper.map.txt",
//     first_version: "S",
// }

//
// Tests.
//

subdirs = [
    "tests",
    "tests_mts",
]
