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

// host + device static lib
cc_library_static {
    name: "libc++_static",
    host_supported: true,
    vendor_available: true,
    recovery_available: true,
    srcs: [
        "src/algorithm.cpp",
        "src/any.cpp",
        "src/bind.cpp",
        "src/charconv.cpp",
        "src/chrono.cpp",
        "src/condition_variable.cpp",
        "src/debug.cpp",
        "src/exception.cpp",
        "src/future.cpp",
        "src/hash.cpp",
        "src/ios.cpp",
        "src/iostream.cpp",
        "src/locale.cpp",
        "src/memory.cpp",
        "src/mutex.cpp",
        "src/new.cpp",
        "src/optional.cpp",
        "src/random.cpp",
        "src/regex.cpp",
        "src/shared_mutex.cpp",
        "src/stdexcept.cpp",
        "src/string.cpp",
        "src/strstream.cpp",
        "src/system_error.cpp",
        "src/thread.cpp",
        "src/typeinfo.cpp",
        "src/utility.cpp",
        "src/valarray.cpp",
        "src/variant.cpp",
        "src/vector.cpp",
    ],
    local_include_dirs: ["include"],
    export_include_dirs: ["include"],
    cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"],
    cppflags: [
        "-std=c++14",
        "-nostdinc++",
        "-fexceptions",
        "-DLIBCXX_BUILDING_LIBCXXABI",
        "-D_LIBCPP_BUILDING_LIBRARY",
    ],
    rtti: true,
    whole_static_libs: [
        "libc++abi",
    ],
    stl: "none",
    target: {
        linux_bionic: {
            enabled: true,
        },
        windows: {
            enabled: true,
            cflags: [
                "-D_LIBCPP_HAS_THREAD_API_WIN32",
                "-D_LIBCXXABI_BUILDING_LIBRARY",
                "-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS",
                "-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS",
                "-UWIN32_LEAN_AND_MEAN",
            ],
            srcs: [
                "src/support/win32/*.cpp",
            ]
        },
        windows_x86: {
            cflags: [
                "-fsjlj-exceptions",
            ],
        },
    },
}

// host + device dynamic lib
cc_library_shared {
    name: "libc++",
    host_supported: true,
    vendor_available: true,
    vndk: {
        enabled: true,
        support_system_process: true,
    },
    recovery_available: true,
    whole_static_libs: ["libc++_static"],
    stl: "none",

    target: {
        android_arm: {
            static_libs: ["libunwind_llvm"],
            ldflags: ["-Wl,--exclude-libs,libunwind_llvm.a"],
        },
        darwin: {
            unexported_symbols_list: "lib/libc++unexp.exp",
            force_symbols_not_weak_list: "lib/notweak.exp",
            force_symbols_weak_list: "lib/weak.exp",
            ldflags: [
                "-nodefaultlibs",
                "-Wl,-undefined,dynamic_lookup",
            ],
        },

        linux_glibc: {
            ldflags: ["-nodefaultlibs"],
        },
        linux_bionic: {
            enabled: true,
        },
    },
}

// This target is used to extract the build commands for a test executable.
// See run_tests.py.
cc_binary {
    name: "libcxx_test_template",
    srcs: [
        "libcxx_test_template.cpp",
    ],
    cppflags: [
        "-fsized-deallocation",
        "-fexceptions",
        "-Wno-format-zero-length",
        "-Wno-implicit-fallthrough",
        "-Wno-non-virtual-dtor",
        "-Wno-return-stack-address",
        "-Wno-unused-local-typedef",

        "-UNDEBUG",

        // Optimization is causing relocation for nothrow new to be thrown away.
        // http://llvm.org/bugs/show_bug.cgi?id=21421
        "-O0",
    ],
    rtti: true,
    local_include_dirs: [
        "test/support",
    ],
    multilib: {
        lib32: {
            suffix: "32",
        },
        lib64: {
            suffix: "64",
        },
    },
    compile_multilib: "both",
    host_supported: true,
    target: {
        linux: {
            ldflags: [
                // This makes the tests run a little faster.
                "-Wl,--strip-all",
            ],
        },
    },
    gnu_extensions: false,
    cpp_std: "c++17",
}
