//
// 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,
    srcs: [
        "src/algorithm.cpp",
        "src/any.cpp",
        "src/bind.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,
        },
    },
}

// host + device dynamic lib
cc_library_shared {
    name: "libc++",
    host_supported: true,
    vendor_available: true,
    vndk: {
        enabled: true,
        support_system_process: 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,
            static_libs: ["libunwindbacktrace"],
            shared_libs: [
                "liblzma",
            ],
        },
    },
}


// ANDROIDMK TRANSLATION ERROR: unsupported conditional
// ifdef LIBCXX_TESTING
// ANDROIDMK TRANSLATION ERROR: unsupported include
// include $(LOCAL_PATH)/buildcmds/Android.mk

// ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
// endif
// TARGET_BUILD_APPS

