| import("//clang/runtimes.gni") |
| |
| declare_args() { |
| # Use exceptions. |
| libcxxabi_enable_exceptions = true |
| |
| # Build libc++abi with definitions for operator new/delete. |
| libcxxabi_enable_new_delete_definitions = true |
| |
| # Build libcxxabi as a shared library. |
| libcxxabi_enable_shared = true |
| |
| # Build libcxxabi as a static library. |
| libcxxabi_enable_static = true |
| |
| # Do not export any symbols from the static library. |
| libcxxabi_hermetic_static_library = true |
| } |
| |
| cxxabi_headers = [ |
| # Make `gn format` not collapse this, for sync_source_lists_from_cmake.py. |
| "../include/cxxabi.h", |
| ] |
| |
| cxxabi_sources = [ |
| # C++ABI files |
| "cxa_aux_runtime.cpp", |
| "cxa_default_handlers.cpp", |
| "cxa_demangle.cpp", |
| "cxa_exception_storage.cpp", |
| "cxa_guard.cpp", |
| "cxa_handlers.cpp", |
| "cxa_vector.cpp", |
| "cxa_virtual.cpp", |
| |
| # C++ STL files |
| "stdlib_exception.cpp", |
| "stdlib_stdexcept.cpp", |
| "stdlib_typeinfo.cpp", |
| |
| # Internal files |
| "abort_message.cpp", |
| "fallback_malloc.cpp", |
| "private_typeinfo.cpp", |
| ] |
| if (libcxxabi_enable_new_delete_definitions) { |
| cxxabi_sources += [ "stdlib_new_delete.cpp" ] |
| } |
| if (libcxxabi_enable_exceptions) { |
| cxxabi_sources += [ |
| "cxa_exception.cpp", |
| "cxa_personality.cpp", |
| ] |
| } else { |
| cxxabi_sources += [ "cxa_noexception.cpp" ] |
| } |
| if (target_os == "linux" || target_os == "fuchsia") { |
| cxxabi_sources += [ "cxa_thread_atexit.cpp" ] |
| } |
| |
| config("cxxabi_config") { |
| include_dirs = [ |
| "//libcxxabi/include", |
| "//libcxx/include", |
| ] |
| cflags_cc = [ "-nostdinc++" ] |
| defines = [ "_LIBCXXABI_BUILDING_LIBRARY" ] |
| if (target_os == "win") { |
| defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ] |
| } |
| } |
| |
| if (libcxxabi_enable_shared) { |
| shared_library("cxxabi_shared") { |
| output_dir = runtimes_dir |
| output_name = "c++abi" |
| if (target_os == "linux" || target_os == "mac") { |
| cflags = [ "-fPIC" ] |
| ldflags = [ "-nostdlib++" ] |
| libs = [ |
| "dl", |
| "pthread", |
| ] |
| } |
| sources = cxxabi_sources |
| public = cxxabi_headers |
| deps = [ |
| "//compiler-rt/lib/builtins", |
| "//libunwind/src:unwind_shared", |
| ] |
| configs += [ ":cxxabi_config" ] |
| configs -= [ |
| "//llvm/utils/gn/build:no_exceptions", |
| "//llvm/utils/gn/build:no_rtti", |
| ] |
| } |
| } |
| |
| if (libcxxabi_enable_static) { |
| static_library("cxxabi_static") { |
| output_dir = runtimes_dir |
| output_name = "c++abi" |
| complete_static_lib = true |
| configs -= [ "//llvm/utils/gn/build:thin_archive" ] |
| sources = cxxabi_sources |
| public = cxxabi_headers |
| if (libcxxabi_hermetic_static_library) { |
| cflags = [ "-fvisibility=hidden" ] |
| if (libcxxabi_enable_new_delete_definitions) { |
| cflags_cc = [ "-fvisibility-global-new-delete-hidden" ] |
| } |
| defines = [ |
| "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS", |
| "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS", |
| ] |
| } |
| deps = [ |
| "//compiler-rt/lib/builtins", |
| "//libunwind/src:unwind_static", |
| ] |
| configs += [ ":cxxabi_config" ] |
| configs -= [ |
| "//llvm/utils/gn/build:no_exceptions", |
| "//llvm/utils/gn/build:no_rtti", |
| ] |
| } |
| } |
| |
| group("src") { |
| deps = [] |
| if (libcxxabi_enable_shared) { |
| deps += [ ":cxxabi_shared" ] |
| } |
| if (libcxxabi_enable_static) { |
| deps += [ ":cxxabi_static" ] |
| } |
| } |