| import("//clang/runtimes.gni") |
| import("//compiler-rt/target.gni") |
| |
| declare_args() { |
| # Build libunwind as a shared library. |
| libunwind_enable_shared = true |
| |
| # Build libunwind as a static library. |
| libunwind_enable_static = true |
| } |
| |
| unwind_headers = [ |
| "../include/libunwind.h", |
| "../include/unwind.h", |
| ] |
| if (current_os == "mac") { |
| unwind_headers += [ |
| # Make `gn format` not collapse this, for sync_source_lists_from_cmake.py. |
| "../include/mach-o/compact_unwind_encoding.h", |
| ] |
| } |
| |
| unwind_sources = [ |
| "AddressSpace.hpp", |
| "CompactUnwinder.hpp", |
| "DwarfInstructions.hpp", |
| "DwarfParser.hpp", |
| "RWMutex.hpp", |
| "Registers.hpp", |
| "Unwind-EHABI.cpp", |
| "Unwind-EHABI.h", |
| "Unwind-seh.cpp", |
| "Unwind-sjlj.c", |
| "UnwindCursor.hpp", |
| "UnwindLevel1-gcc-ext.c", |
| "UnwindLevel1.c", |
| "UnwindRegistersRestore.S", |
| "UnwindRegistersSave.S", |
| "assembly.h", |
| "config.h", |
| "dwarf2.h", |
| "libunwind.cpp", |
| "libunwind_ext.h", |
| ] |
| if (current_os == "mac") { |
| unwind_sources += [ "Unwind_AppleExtras.cpp" ] |
| } |
| |
| if (current_os == "android") { |
| if (current_cpu == "arm64") { |
| unwind_output_dir = "$crt_current_out_dir/aarch64" |
| } else if (current_cpu == "arm") { |
| unwind_output_dir = "$crt_current_out_dir/arm" |
| } |
| } else { |
| unwind_output_dir = runtimes_dir |
| } |
| |
| config("unwind_config") { |
| cflags = [] |
| cflags_c = [ "-std=c99" ] |
| cflags_cc = [ "-fno-rtti" ] |
| defines = [ "_LIBUNWIND_IS_NATIVE_ONLY" ] |
| include_dirs = [ "//libunwind/include" ] |
| if (current_os == "mac") { |
| cflags += [ "-U__STRICT_ANSI__" ] |
| } |
| if (current_os == "android") { |
| defines += [ "_LIBUNWIND_USE_DLADDR=0" ] |
| } |
| } |
| |
| if (libunwind_enable_shared) { |
| shared_library("unwind_shared") { |
| output_dir = unwind_output_dir |
| output_name = "unwind" |
| if (current_os == "linux" || current_os == "mac") { |
| cflags = [ "-fPIC" ] |
| ldflags = [ "-nostdlib++" ] |
| libs = [ |
| "dl", |
| "pthread", |
| ] |
| } |
| if (current_os == "mac") { |
| ldflags += [ |
| "-compatibility_version 1", |
| "-install_name /usr/lib/libunwind.1.dylib", |
| ] |
| } |
| sources = unwind_sources |
| public = unwind_headers |
| deps = [ "//compiler-rt/lib/builtins" ] |
| configs += [ ":unwind_config" ] |
| configs -= [ |
| "//llvm/utils/gn/build:no_exceptions", |
| "//llvm/utils/gn/build:no_rtti", |
| ] |
| } |
| } |
| |
| if (libunwind_enable_static) { |
| template("libunwind_static_library") { |
| static_library(target_name) { |
| output_dir = unwind_output_dir |
| output_name = invoker.output_name |
| complete_static_lib = true |
| configs -= [ "//llvm/utils/gn/build:thin_archive" ] |
| sources = unwind_sources |
| public = unwind_headers |
| if (!invoker.export) { |
| cflags = [ "-fvisibility=hidden" ] |
| cflags_cc = [ "-fvisibility-global-new-delete-hidden" ] |
| defines = [ "_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS" ] |
| } |
| deps = [ "//compiler-rt/lib/builtins" ] |
| configs += [ ":unwind_config" ] |
| configs -= [ |
| "//llvm/utils/gn/build:no_exceptions", |
| "//llvm/utils/gn/build:no_rtti", |
| ] |
| } |
| } |
| |
| libunwind_static_library("unwind_static_exported") { |
| output_name = "unwind-exported" |
| export = true |
| } |
| libunwind_static_library("unwind_static") { |
| output_name = "unwind" |
| export = false |
| } |
| } |
| |
| group("src") { |
| deps = [] |
| if (libunwind_enable_shared) { |
| deps += [ ":unwind_shared" ] |
| } |
| if (libunwind_enable_static) { |
| deps += [ |
| ":unwind_static", |
| ":unwind_static_exported", |
| ] |
| } |
| } |