156 lines · plain
1import("//clang/runtimes.gni")2import("//compiler-rt/target.gni")3 4declare_args() {5 # Build libunwind as a shared library.6 libunwind_enable_shared = true7 8 # Build libunwind as a static library.9 libunwind_enable_static = true10}11 12unwind_headers = [13 "../include/libunwind.h",14 "../include/unwind.h",15]16if (current_os == "mac") {17 unwind_headers += [18 # Make `gn format` not collapse this, for sync_source_lists_from_cmake.py.19 "../include/mach-o/compact_unwind_encoding.h",20 ]21}22 23unwind_sources = [24 "../include/unwind_arm_ehabi.h",25 "../include/unwind_itanium.h",26 "AddressSpace.hpp",27 "CompactUnwinder.hpp",28 "DwarfInstructions.hpp",29 "DwarfParser.hpp",30 "RWMutex.hpp",31 "Registers.hpp",32 "Unwind-EHABI.cpp",33 "Unwind-EHABI.h",34 "Unwind-seh.cpp",35 "Unwind-sjlj.c",36 "Unwind-wasm.c",37 "UnwindCursor.hpp",38 "UnwindLevel1-gcc-ext.c",39 "UnwindLevel1.c",40 "UnwindRegistersRestore.S",41 "UnwindRegistersSave.S",42 "assembly.h",43 "config.h",44 "dwarf2.h",45 "libunwind.cpp",46 "libunwind_ext.h",47 "shadow_stack_unwind.h",48]49if (current_os == "aix") {50 unwind_sources += [ "Unwind_AIXExtras.cpp" ]51}52 53if (current_os == "android") {54 if (current_cpu == "arm64") {55 unwind_output_dir = "$crt_current_out_dir/aarch64"56 } else if (current_cpu == "arm") {57 unwind_output_dir = "$crt_current_out_dir/arm"58 } else if (current_cpu == "x64") {59 unwind_output_dir = "$crt_current_out_dir/x86_64"60 } else if (current_cpu == "x86") {61 unwind_output_dir = "$crt_current_out_dir/i386"62 }63} else {64 unwind_output_dir = runtimes_dir65}66 67config("unwind_config") {68 cflags = []69 cflags_c = [ "-std=c99" ]70 cflags_cc = [ "-fno-rtti" ]71 defines = [ "_LIBUNWIND_IS_NATIVE_ONLY" ]72 include_dirs = [ "//libunwind/include" ]73 if (current_os == "mac") {74 cflags += [ "-U__STRICT_ANSI__" ]75 }76 if (current_os == "android") {77 defines += [ "_LIBUNWIND_USE_DLADDR=0" ]78 }79}80 81if (libunwind_enable_shared && current_os != "android") {82 shared_library("unwind_shared") {83 output_dir = unwind_output_dir84 output_name = "unwind"85 if (current_os == "linux" || current_os == "mac") {86 cflags = [ "-fPIC" ]87 ldflags = [ "-nostdlib++" ]88 libs = [89 "dl",90 "pthread",91 ]92 }93 if (current_os == "mac") {94 cflags += [ "-fno-stack-protector" ]95 ldflags += [96 "-Wl,-compatibility_version,1",97 "-Wl,-install_name,/usr/lib/libunwind.1.dylib",98 ]99 }100 sources = unwind_sources101 public = unwind_headers102 deps = [ "//compiler-rt/lib/builtins" ]103 configs += [ ":unwind_config" ]104 configs -= [105 "//llvm/utils/gn/build:no_exceptions",106 "//llvm/utils/gn/build:no_rtti",107 ]108 }109}110 111if (libunwind_enable_static) {112 template("libunwind_static_library") {113 static_library(target_name) {114 output_dir = unwind_output_dir115 output_name = invoker.output_name116 complete_static_lib = true117 configs -= [ "//llvm/utils/gn/build:thin_archive" ]118 sources = unwind_sources119 public = unwind_headers120 if (!invoker.export) {121 cflags = [ "-fvisibility=hidden" ]122 cflags_cc = [ "-fvisibility-global-new-delete=force-hidden" ]123 defines = [ "_LIBUNWIND_HIDE_SYMBOLS" ]124 }125 deps = [ "//compiler-rt/lib/builtins" ]126 configs += [ ":unwind_config" ]127 configs -= [128 "//llvm/utils/gn/build:no_exceptions",129 "//llvm/utils/gn/build:no_rtti",130 ]131 }132 }133 134 libunwind_static_library("unwind_static_exported") {135 output_name = "unwind-exported"136 export = true137 }138 libunwind_static_library("unwind_static") {139 output_name = "unwind"140 export = false141 }142}143 144group("src") {145 deps = []146 if (libunwind_enable_shared && current_os != "android") {147 deps += [ ":unwind_shared" ]148 }149 if (libunwind_enable_static) {150 deps += [151 ":unwind_static",152 ":unwind_static_exported",153 ]154 }155}156