148 lines · plain
1import("//clang/runtimes.gni")2 3declare_args() {4 # Use exceptions.5 libcxxabi_enable_exceptions = true6 7 # Build libc++abi with definitions for operator new/delete.8 libcxxabi_enable_new_delete_definitions = true9 10 # Build libcxxabi as a shared library.11 libcxxabi_enable_shared = true12 13 # Build libcxxabi as a static library.14 libcxxabi_enable_static = true15 16 # Do not export any symbols from the static library.17 libcxxabi_hermetic_static_library = true18}19 20cxxabi_headers = [21 # Make `gn format` not collapse this, for sync_source_lists_from_cmake.py.22 "../include/cxxabi.h",23]24 25cxxabi_sources = [26 # C++ABI files27 "cxa_aux_runtime.cpp",28 "cxa_default_handlers.cpp",29 "cxa_demangle.cpp",30 "cxa_exception_storage.cpp",31 "cxa_guard.cpp",32 "cxa_handlers.cpp",33 "cxa_vector.cpp",34 "cxa_virtual.cpp",35 36 # C++ STL files37 "stdlib_exception.cpp",38 "stdlib_stdexcept.cpp",39 "stdlib_typeinfo.cpp",40 41 # Internal files42 "abort_message.cpp",43 "fallback_malloc.cpp",44 "private_typeinfo.cpp",45]46if (libcxxabi_enable_new_delete_definitions) {47 cxxabi_sources += [ "stdlib_new_delete.cpp" ]48}49if (libcxxabi_enable_exceptions) {50 cxxabi_sources += [51 "cxa_exception.cpp",52 "cxa_personality.cpp",53 ]54} else {55 cxxabi_sources += [ "cxa_noexception.cpp" ]56}57if (target_os == "linux" || target_os == "fuchsia") {58 cxxabi_sources += [ "cxa_thread_atexit.cpp" ]59}60 61config("cxxabi_config") {62 include_dirs = [63 "//libcxxabi/include",64 65 # Some files depend on libc++ internals.66 "//libcxx/src",67 ]68 cflags_cc = [69 "-std=c++23",70 "-nostdinc++",71 ]72 defines = [73 "_LIBCXXABI_BUILDING_LIBRARY",74 "_LIBCPP_BUILDING_LIBRARY",75 ]76 if (target_os == "win") {77 defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ]78 }79}80 81if (libcxxabi_enable_shared) {82 shared_library("cxxabi_shared") {83 output_dir = runtimes_dir84 output_name = "c++abi"85 if (target_os == "linux" || target_os == "mac") {86 cflags = [ "-fPIC" ]87 ldflags = [ "-nostdlib++" ]88 libs = [89 "dl",90 "pthread",91 ]92 }93 sources = cxxabi_sources94 public = cxxabi_headers95 deps = [96 "//compiler-rt/lib/builtins",97 "//libcxx/include",98 "//libunwind/src:unwind_shared",99 ]100 configs += [ ":cxxabi_config" ]101 configs -= [102 "//llvm/utils/gn/build:no_exceptions",103 "//llvm/utils/gn/build:no_rtti",104 ]105 }106}107 108if (libcxxabi_enable_static) {109 static_library("cxxabi_static") {110 output_dir = runtimes_dir111 output_name = "c++abi"112 complete_static_lib = true113 configs -= [ "//llvm/utils/gn/build:thin_archive" ]114 sources = cxxabi_sources115 public = cxxabi_headers116 if (libcxxabi_hermetic_static_library) {117 cflags = [ "-fvisibility=hidden" ]118 if (libcxxabi_enable_new_delete_definitions) {119 cflags_cc = [ "-fvisibility-global-new-delete=force-hidden" ]120 }121 defines = [122 "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS",123 "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS",124 ]125 }126 deps = [127 "//compiler-rt/lib/builtins",128 "//libcxx/include",129 "//libunwind/src:unwind_static",130 ]131 configs += [ ":cxxabi_config" ]132 configs -= [133 "//llvm/utils/gn/build:no_exceptions",134 "//llvm/utils/gn/build:no_rtti",135 ]136 }137}138 139group("src") {140 deps = []141 if (libcxxabi_enable_shared) {142 deps += [ ":cxxabi_shared" ]143 }144 if (libcxxabi_enable_static) {145 deps += [ ":cxxabi_static" ]146 }147}148