// 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",
    ],
    static_libs: [
        "libziparchive",
        "libbase",
    ],
    target: {
        android: {
            shared_libs: [
                "libutils",
                "libz",
            ],
        },
        host: {
            shared_libs: [
                "libz-host",
            ],
        },
    },
}

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

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

    target: {
        linux: {
            cflags: [ // Sigh.
                "-D_LARGEFILE64_SOURCE",
                "-D_GNU_SOURCE",
                "-DLINUX",
                "-D__GLIBC__",
            ],
        },
        android: {
            shared_libs: ["libz"],
        },
        host: {
            shared_libs: ["libz-host"],
        },
    },

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