// Copyright (C) 2007 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.

//
// Definitions for building the native code needed for the core library.
//

// Defaults that apply to all of the modules

cc_defaults {
    name: "core_native_default_flags",
    host_supported: true,
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
    cppflags: ["-DU_USING_ICU_NAMESPACE=0"],

    target: {
        darwin: {
            enabled: false,
        },
        windows: {
            enabled: false,
        },
    },
    min_sdk_version: "S",
}

cc_defaults {
    name: "core_native_default_libs",
    header_libs: ["jni_headers"],
    shared_libs: [
        "libbase",
        "liblog",
        "libnativehelper#impl",
    ],
    static_libs: ["libnativehelper_compat_libc++"],
}

cc_library_shared {
    name: "libjavacore",
    visibility: [
        "//art/build/apex",
        "//art/runtime",
        "//art/tools/ahat",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    defaults: [
        "core_native_default_flags",
        "core_native_default_libs",
    ],
    srcs: [
        ":luni_native_srcs",
    ],
    shared_libs: [
        "libandroidio",
        "libicu",
        "libexpat",
        "libz",
    ],
    static_libs: [
        "libcrypto_static", // Not FIPS tested - for bignums only.
        "libziparchive",
    ],
    version_script: "libjavacore.map",
}

cc_library_shared {
    name: "libandroidio",
    visibility: [
        "//art/build/apex",
        "//art/build/sdk",
        "//art/tools/ahat",
        "//external/conscrypt",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    defaults: [
        "core_native_default_flags",
    ],
    shared_libs: [
        "liblog",
    ],
    srcs: [
        ":libandroidio_srcs",
    ],
    stubs: {
        symbol_file: "libandroidio.map.txt",
        versions: ["1"],
    },
}

cc_defaults {
    name: "libopenjdk_native_defaults",
    defaults: [
        "core_native_default_flags",
        "core_native_default_libs",
    ],
    srcs: [":libopenjdk_native_srcs"],
    local_include_dirs: [
        "luni/src/main/native",
    ],
    cflags: [
        // TODO(narayan): Prune down this list of exclusions once the underlying
        // issues have been fixed. Most of these are small changes except for
        // -Wunused-parameter.
        "-Wno-unused-parameter",
        "-Wno-unused-variable",
        "-Wno-parentheses-equality",
        "-Wno-constant-logical-operand",
        "-Wno-sometimes-uninitialized",
    ],

    shared_libs: [
        "libandroidio",
        "libicu",
        "libz",
    ],
    static_libs: [
        "libcrypto_static", // Not FIPS tested - for bignums only.
        "libfdlibm",
    ],

    target: {
        musl: {
            cflags: [
                // Sigh.
                "-D_LARGEFILE64_SOURCE",
                "-D_GNU_SOURCE",
                "-DLINUX",
            ],
        },
        glibc: {
            cflags: [
                "-D__GLIBC__",
                // Sigh.
                "-D_LARGEFILE64_SOURCE",
                "-D_GNU_SOURCE",
                "-DLINUX",
            ],
        },
        android: {
            shared_libs: [
                "libdl_android",
            ],
        },
    },
}

cc_library_shared {
    name: "libopenjdk",
    visibility: [
        "//art/build/apex",
        "//art/tools/ahat",
    ],
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
    ],
    defaults: ["libopenjdk_native_defaults"],
    shared_libs: [
        "libopenjdkjvm",
    ],
}

// Debug version of libopenjdk. Depends on libopenjdkjvmd.
cc_library_shared {
    name: "libopenjdkd",
    visibility: [
        "//art/build/apex",
        "//art/tools/ahat",
    ],
    apex_available: [
        "com.android.art.debug",
    ],
    defaults: ["libopenjdk_native_defaults"],
    shared_libs: [
        "libopenjdkjvmd",
    ],
}

// Test JNI library.
cc_library_shared {
    name: "libjavacoretests",
    visibility: [
        "//art/build/sdk",
        "//cts/tests/libcore/luni",
    ],
    defaults: ["core_native_default_flags"],
    host_supported: true,

    srcs: [
        "luni/src/test/native/libcore_android_system_OsConstantsTest.cpp",
        "luni/src/test/native/libcore_android_system_OsTest.cpp",
        "luni/src/test/native/libcore_dalvik_system_JniTest.cpp",
        "luni/src/test/native/libcore_java_io_FileTest.cpp",
        "luni/src/test/native/libcore_java_lang_OldStackTraceElementTest.cpp",
        "luni/src/test/native/libcore_java_lang_ThreadTest.cpp",
        "luni/src/test/native/libcore_java_nio_BufferTest.cpp",
        "luni/src/test/native/libcore_java_time_TimeApisConsistencyTest.cpp",
        "luni/src/test/native/libcore_libcore_util_NativeAllocationRegistryTest.cpp",
        "luni/src/test/native/tests_support_AndroidProperties.cpp",
    ],
    shared_libs: [
        "liblog",
        "libnativehelper",
    ],
    static_libs: [
        "libbase",
    ],
}

// Set of gtest unit tests.
cc_test {
    name: "libjavacore-unit-tests",
    defaults: ["core_native_default_flags"],

    // TODO(b/172480617): Fix this source dependency from
    // platform_testing/build/tasks/tests/native_test_list.mk.
    enabled: true,

    // Add -fno-builtin so that the compiler doesn't attempt to inline
    // memcpy calls that are not really aligned.
    cflags: ["-fno-builtin"],
    srcs: [
        "luni/src/test/native/libcore_io_Memory_test.cpp",
        // libcore_io_Memory_test.cpp includes libcore_io_Memory.cpp which
        // depends on JniConstants.cpp (but these are not used in the tests).
        "luni/src/main/native/JniConstants.cpp",
    ],

    shared_libs: [
        "liblog",
        "libnativehelper",
    ],

    static_libs: ["libnativehelper_compat_libc++"],
    visibility: [
        "//platform_testing:__subpackages__",
    ],
}

// Set of benchmarks for libjavacore functions.
cc_benchmark {
    name: "libjavacore-benchmarks",
    defaults: ["core_native_default_flags"],

    // TODO(b/172480617): Fix this source dependency from
    // platform_testing/build/tasks/tests/native_metric_test_list.mk.
    enabled: true,

    srcs: [
        "luni/src/benchmark/native/libcore_io_Memory_bench.cpp",
        // libcore_io_Memory_bench.cpp includes libcore_io_Memory.cpp which
        // depends on JniConstants.cpp (but these are not used in the benchmark).
        "luni/src/main/native/JniConstants.cpp",
    ],
    test_suites: ["device-tests"],

    shared_libs: [
        "liblog",
        "libnativehelper",
    ],
    visibility: [
        "//platform_testing:__subpackages__",
    ],
}
