// 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",
    defaults: ["art_module_source_build_defaults"],
    host_supported: true,
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
    cppflags: ["-DU_USING_ICU_NAMESPACE=0"],

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

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

cc_library_shared {
    name: "libjavacore",
    visibility: [
        "//art/build/apex",
    ],
    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",
        "libbase",
        "libcrypto",
        "libicu",
        "libexpat",
        "libnativehelper",
        "libz",
    ],
    static_libs: [
        "libnativehelper_compat_libc++",
        "libziparchive",
    ],
}

cc_library_shared {
    name: "libandroidio",
    visibility: [
        "//art/build/apex",
        "//art/build/sdk",
        "//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",
        "libcrypto",
        "libicu",
        "libnativehelper",
        "libz",
    ],
    static_libs: [
        "libfdlibm",
        "libnativehelper_compat_libc++",
    ],

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

    notice: "ojluni/NOTICE",
}

cc_library_shared {
    name: "libopenjdk",
    visibility: [
        "//art/build/apex",
    ],
    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",
    ],
    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_dalvik_system_JniTest.cpp",
        "luni/src/test/native/libcore_java_io_FileTest.cpp",
        "luni/src/test/native/libcore_java_lang_ThreadTest.cpp",
        "luni/src/test/native/libcore_java_nio_BufferTest.cpp",
        "luni/src/test/native/libcore_libcore_util_NativeAllocationRegistryTest.cpp",
    ],
    shared_libs: [
        "liblog",
        "libnativehelper",
    ],

    strip: {
        keep_symbols: true,
    },
}

// 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++"],
}

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