// 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",
        "//art/runtime",
    ],
    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",
        "libcrypto",
        "libicu",
        "libexpat",
        "libz",
    ],
    static_libs: [
        "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",
        "libz",
    ],
    static_libs: [
        "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",
    ],
    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_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++"],
}

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