Index: libcxxabi/src/CMakeLists.txt =================================================================== --- libcxxabi/src/CMakeLists.txt +++ libcxxabi/src/CMakeLists.txt @@ -190,7 +190,11 @@ set(cxxabi_static_sources $) if (LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY) if (TARGET unwind_static OR HAVE_LIBUNWIND) - list(APPEND cxxabi_static_sources $) + if(LIBUNWIND_HERMETIC_STATIC_LIBRARY) + list(APPEND cxxabi_static_sources $) + else() + list(APPEND cxxabi_static_sources $) + endif() endif() endif() add_library(cxxabi_static STATIC ${cxxabi_static_sources}) Index: libunwind/CMakeLists.txt =================================================================== --- libunwind/CMakeLists.txt +++ libunwind/CMakeLists.txt @@ -168,6 +168,9 @@ message(FATAL_ERROR "LIBUNWIND_BUILD_32_BITS=ON is not supported on this platform.") endif() +option(LIBUNWIND_HERMETIC_STATIC_LIBRARY + "Do not export any symbols from the static library." OFF) + #=============================================================================== # Configure System #=============================================================================== Index: libunwind/src/CMakeLists.txt =================================================================== --- libunwind/src/CMakeLists.txt +++ libunwind/src/CMakeLists.txt @@ -105,17 +105,46 @@ set_property(SOURCE ${LIBUNWIND_C_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " ${LIBUNWIND_C_FLAGS}") +macro(unwind_object_library name) + cmake_parse_arguments(ARGS "" "" "DEFINES;FLAGS" ${ARGN}) + # Add a object library that contains the compiled source files. -add_library(unwind_objects OBJECT ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) + add_library(${name} OBJECT ${LIBUNWIND_SOURCES} ${LIBUNWIND_HEADERS}) + + if(ARGS_DEFINES) + target_compile_definitions(${name} PRIVATE ${ARGS_DEFINES}) + endif() + + set_target_properties(${name} + PROPERTIES + COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" + POSITION_INDEPENDENT_CODE ON) -set_target_properties(unwind_objects - PROPERTIES - COMPILE_FLAGS "${LIBUNWIND_COMPILE_FLAGS}" - POSITION_INDEPENDENT_CODE ON) + if(ARGS_FLAGS) + target_compile_options(${name} PRIVATE ${ARGS_FLAGS}) + endif() +endmacro() + +if(LIBUNWIND_HERMETIC_STATIC_LIBRARY) + append_flags_if_supported(UNWIND_STATIC_OBJECTS_FLAGS -fvisibility=hidden) + append_flags_if_supported(UNWIND_STATIC_OBJECTS_FLAGS -fvisibility-global-new-delete-hidden) + unwind_object_library(unwind_static_objects + DEFINES + _LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS + _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS + FLAGS ${UNWIND_STATIC_OBJECTS_FLAGS}) + unwind_object_library(unwind_shared_objects) + set(unwind_static_sources $) + set(unwind_shared_sources $) +else() + unwind_object_library(unwind_objects) + set(unwind_static_sources $) + set(unwind_shared_sources $) +endif() # Build the shared library. if (LIBUNWIND_ENABLE_SHARED) - add_library(unwind_shared SHARED $) + add_library(unwind_shared SHARED ${unwind_shared_sources}) if(COMMAND llvm_setup_rpath) llvm_setup_rpath(unwind_shared) endif() @@ -134,7 +163,7 @@ # Build the static library. if (LIBUNWIND_ENABLE_STATIC) - add_library(unwind_static STATIC $) + add_library(unwind_static STATIC ${unwind_static_sources}) target_link_libraries(unwind_static ${libraries}) set_target_properties(unwind_static PROPERTIES