// 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,
    local_include_dirs: ["include"],
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
    cppflags = ["-DU_USING_ICU_NAMESPACE=0"],

    target: {
        darwin: {
            enabled: false,
        },
    },
}

cc_defaults {
    name: "core_native_default_libs",
    static_libs: [
        "libbase",
        "libfdlibm",
    ],

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

cc_library_shared {
    name: "libjavacore",
    defaults: [
        "core_native_default_flags",
        "core_native_default_libs",
    ],
    srcs: [
        ":luni_native_srcs",
        "dalvik/src/main/native/org_apache_harmony_dalvik_NativeTestTarget.cpp"
    ],

    shared_libs: [
        "libcrypto",
        "libexpat",
        "libicuuc",
        "libicui18n",
        "libnativehelper",
        "libz",
    ],
    static_libs: [
        "libziparchive",
        "libbase",
    ],
    target: {
        android: {
            shared_libs: [
                "libutils",
            ],
        },
    },
}

cc_defaults {
    name: "libopenjdk_native_defaults",
    defaults: [
        "core_native_default_flags",
        "core_native_default_libs",
    ],
    srcs: [":libopenjdk_native_srcs"],
    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",

        // TODO(http://b/64362645): remove when upstream replaces readdir_r with readdir.
        "-Wno-deprecated-declarations",
    ],

    shared_libs: [
        "libcrypto",
        "libicuuc",
        "libssl",
        "libz",

        "libnativehelper",
    ],
    static_libs: ["libfdlibm"],

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

    notice: "ojluni/NOTICE",
}

cc_library_shared {
    name: "libopenjdk",
    defaults: ["libopenjdk_native_defaults"],
    shared_libs: [
        "libopenjdkjvm",
    ],
}

// Debug version of libopenjdk. Depends on libopenjdkjvmd.
cc_library_shared {
    name: "libopenjdkd",
    defaults: ["libopenjdk_native_defaults"],
    shared_libs: [
        "libopenjdkjvmd",
    ],
}

// Test JNI library.
cc_library_shared {
    name: "libjavacoretests",
    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",
    ],
    target: {
        android: {
            shared_libs: ["libnativehelper_compat_libc++"],
        },
        host: {
            shared_libs: ["libnativehelper"],
        },
    },

    strip: {
        keep_symbols: true,
    },
}

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

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

    shared_libs: ["libnativehelper"],
}

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

    srcs: ["luni/src/benchmark/native/libcore_io_Memory_bench.cpp"],
    test_suites: ["device-tests"],

    shared_libs: ["libnativehelper"],
}

subdirs = [
    "luni/src/main/native",
    "ojluni/src/main/native",
]
