Index: libunwind/trunk/src/CMakeLists.txt =================================================================== --- libunwind/trunk/src/CMakeLists.txt +++ libunwind/trunk/src/CMakeLists.txt @@ -3,20 +3,23 @@ set(LIBUNWIND_CXX_SOURCES libunwind.cpp Unwind-EHABI.cpp - Unwind-seh.cpp) + Unwind-seh.cpp + ) unwind_append_if(LIBUNWIND_CXX_SOURCES APPLE Unwind_AppleExtras.cpp) set(LIBUNWIND_C_SOURCES UnwindLevel1.c UnwindLevel1-gcc-ext.c - Unwind-sjlj.c) + Unwind-sjlj.c + ) set_source_files_properties(${LIBUNWIND_C_SOURCES} PROPERTIES COMPILE_FLAGS "-std=c99") set(LIBUNWIND_ASM_SOURCES UnwindRegistersRestore.S - UnwindRegistersSave.S) + UnwindRegistersSave.S + ) set_source_files_properties(${LIBUNWIND_ASM_SOURCES} PROPERTIES LANGUAGE C) @@ -33,11 +36,13 @@ Registers.hpp RWMutex.hpp UnwindCursor.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/../include/libunwind.h - ${CMAKE_CURRENT_SOURCE_DIR}/../include/unwind.h) + ../include/libunwind.h + ../include/unwind.h + ) unwind_append_if(LIBUNWIND_HEADERS APPLE - "${CMAKE_CURRENT_SOURCE_DIR}/../include/mach-o/compact_unwind_encoding.h") + ../include/mach-o/compact_unwind_encoding.h + ) if (MSVC_IDE) # Force them all into the headers dir on MSVC, otherwise they end up at Index: llvm/trunk/utils/gn/secondary/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/BUILD.gn +++ llvm/trunk/utils/gn/secondary/BUILD.gn @@ -11,7 +11,10 @@ "//llvm/test", ] if (current_os == "linux") { - deps += [ "//compiler-rt" ] + deps += [ + "//compiler-rt", + "//libunwind", + ] } if (current_os == "linux" || current_os == "android") { deps += [ "//compiler-rt/test/hwasan" ] Index: llvm/trunk/utils/gn/secondary/libunwind/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/libunwind/BUILD.gn +++ llvm/trunk/utils/gn/secondary/libunwind/BUILD.gn @@ -0,0 +1,5 @@ +group("libunwind") { + deps = [ + "//libunwind/src(//llvm/utils/gn/build/toolchain:stage2_unix)", + ] +} Index: llvm/trunk/utils/gn/secondary/libunwind/src/BUILD.gn =================================================================== --- llvm/trunk/utils/gn/secondary/libunwind/src/BUILD.gn +++ llvm/trunk/utils/gn/secondary/libunwind/src/BUILD.gn @@ -0,0 +1,124 @@ +import("//clang/runtimes.gni") + +declare_args() { + # Build libunwind as a shared library. + libunwind_enable_shared = true + + # Build libunwind as a static library. + libunwind_enable_static = true + + # Do not export any symbols from the static library. + libunwind_hermetic_static_library = true +} + +unwind_headers = [ + "../include/libunwind.h", + "../include/unwind.h", +] +if (target_os == "mac") { + unwind_headers += [ + # This comment prevents `gn format` from putting the file on the same line + # as `sources +=`, for sync_source_lists_from_cmake.py. + "../include/mach-o/compact_unwind_encoding.h", + ] +} + +unwind_sources = [ + "libunwind.cpp", + "Unwind-EHABI.cpp", + "Unwind-seh.cpp", + "UnwindLevel1.c", + "UnwindLevel1-gcc-ext.c", + "Unwind-sjlj.c", + "UnwindRegistersRestore.S", + "UnwindRegistersSave.S", + "AddressSpace.hpp", + "assembly.h", + "CompactUnwinder.hpp", + "config.h", + "dwarf2.h", + "DwarfInstructions.hpp", + "DwarfParser.hpp", + "libunwind_ext.h", + "Registers.hpp", + "RWMutex.hpp", + "UnwindCursor.hpp", +] +if (target_os == "mac") { + unwind_sources += [ "src/Unwind_AppleExtras.cpp" ] +} + +config("unwind_config") { + cflags = [] + cflags_c = [ "-std=c99" ] + cflags_cc = [ "-fno-rtti" ] + include_dirs = [ "//libunwind/include" ] + if (target_os == "mac") { + cflags += [ "-U__STRICT_ANSI__" ] + } +} + +if (libunwind_enable_shared) { + shared_library("unwind_shared") { + output_dir = runtimes_dir + output_name = "unwind" + if (target_os == "linux" || target_os == "mac") { + cflags = [ "-fPIC" ] + ldflags = [ "-nostdlib++" ] + libs = [ + "dl", + "pthread", + ] + } + if (target_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) { + static_library("unwind_static") { + output_dir = runtimes_dir + output_name = "unwind" + complete_static_lib = true + configs -= [ "//llvm/utils/gn/build:thin_archive" ] + sources = unwind_sources + public = unwind_headers + if (libunwind_hermetic_static_library) { + 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", + ] + } +} + +group("src") { + deps = [] + if (libunwind_enable_shared) { + deps += [ ":unwind_shared" ] + } + if (libunwind_enable_static) { + deps += [ ":unwind_static" ] + } +}