Index: libcxx/CMakeLists.txt =================================================================== --- libcxx/CMakeLists.txt +++ libcxx/CMakeLists.txt @@ -155,6 +155,14 @@ # cannot be used with LIBCXX_ENABLE_ABI_LINKER_SCRIPT. option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY "Statically link the ABI library" OFF) +cmake_dependent_option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY_STATIC + "Statically link the ABI library to static library" ON + "LIBCXX_ENABLE_STATIC_ABI_LIBRARY;LIBCXX_ENABLE_STATIC" OFF) + +cmake_dependent_option(LIBCXX_ENABLE_STATIC_ABI_LIBRARY_SHARED + "Statically link the ABI library to shared library" ON + "LIBCXX_ENABLE_STATIC_ABI_LIBRARY;LIBCXX_ENABLE_STATIC" OFF) + # Generate and install a linker script inplace of libc++.so. The linker script # will link libc++ to the correct ABI library. This option is on by default # on UNIX platforms other than Apple unless 'LIBCXX_ENABLE_STATIC_ABI_LIBRARY' Index: libcxx/cmake/Modules/HandleLibCXXABI.cmake =================================================================== --- libcxx/cmake/Modules/HandleLibCXXABI.cmake +++ libcxx/cmake/Modules/HandleLibCXXABI.cmake @@ -104,10 +104,10 @@ elseif ("${LIBCXX_CXX_ABI_LIBNAME}" STREQUAL "libcxxabi") if (LIBCXX_CXX_ABI_INTREE) # Link against just-built "cxxabi" target. - if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY) - set(CXXABI_LIBNAME cxxabi_static) + if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY_SHARED) + set(CXXABI_LIBNAME cxxabi_static) else() - set(CXXABI_LIBNAME cxxabi_shared) + set(CXXABI_LIBNAME cxxabi_shared) endif() set(LIBCXX_LIBCPPABI_VERSION "2" PARENT_SCOPE) else() Index: libcxx/lib/CMakeLists.txt =================================================================== --- libcxx/lib/CMakeLists.txt +++ libcxx/lib/CMakeLists.txt @@ -44,7 +44,7 @@ set(LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY ON) endif() -if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY) +if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY_SHARED) add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic") add_library_flags("${LIBCXX_CXX_ABI_LIBRARY}") add_library_flags("-Wl,-Bdynamic" "-Wl,--no-whole-archive") @@ -259,14 +259,16 @@ list(APPEND LIBCXX_TARGETS "cxx_static") # Attempt to merge the libc++.a archive and the ABI library archive into one. - if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY) + if (LIBCXX_ENABLE_STATIC_ABI_LIBRARY_STATIC) set(MERGE_ARCHIVES_SEARCH_PATHS "") if (LIBCXX_CXX_ABI_LIBRARY_PATH) set(MERGE_ARCHIVES_SEARCH_PATHS "-L${LIBCXX_CXX_ABI_LIBRARY_PATH}") endif() - if ((TARGET ${LIBCXX_CXX_ABI_LIBRARY}) OR - (${LIBCXX_CXX_ABI_LIBRARY} MATCHES "cxxabi(_static|_shared)?" AND HAVE_LIBCXXABI)) - set(MERGE_ARCHIVES_ABI_TARGET "$") + if (${LIBCXX_CXX_ABI_LIBRARY} MATCHES "cxxabi(_static|_shared)?" + AND (TARGET cxxabi_static OR HAVE_LIBCXXABI)) + #if ((TARGET ${LIBCXX_CXX_ABI_LIBRARY}) OR + #(${LIBCXX_CXX_ABI_LIBRARY} MATCHES "cxxabi(_static|_shared)?" AND HAVE_LIBCXXABI)) + set(MERGE_ARCHIVES_ABI_TARGET "$") else() set(MERGE_ARCHIVES_ABI_TARGET "${CMAKE_STATIC_LIBRARY_PREFIX}${LIBCXX_CXX_ABI_LIBRARY}${CMAKE_STATIC_LIBRARY_SUFFIX}") Index: libcxxabi/CMakeLists.txt =================================================================== --- libcxxabi/CMakeLists.txt +++ libcxxabi/CMakeLists.txt @@ -84,6 +84,13 @@ option(LIBCXXABI_ENABLE_SHARED "Build libc++abi as a shared library." ON) option(LIBCXXABI_ENABLE_STATIC "Build libc++abi as a static library." ON) +cmake_dependent_option(LIBCXXABI_ENABLE_STATIC_UNWINDER_STATIC + "Statically link the LLVM unwinder to static library" ON + "LIBCXXABI_ENABLE_STATIC_UNWINDER;LIBCXXABI_ENABLE_STATIC" OFF) +cmake_dependent_option(LIBCXXABI_ENABLE_STATIC_UNWINDER_SHARED + "Statically link the LLVM unwinder to shared library" ON + "LIBCXXABI_ENABLE_STATIC_UNWINDER;LIBCXXABI_ENABLE_SHARED" OFF) + option(LIBCXXABI_BAREMETAL "Build libc++abi for baremetal targets." OFF) # The default terminate handler attempts to demangle uncaught exceptions, which # causes extra I/O and demangling code to be pulled in. Index: libcxxabi/src/CMakeLists.txt =================================================================== --- libcxxabi/src/CMakeLists.txt +++ libcxxabi/src/CMakeLists.txt @@ -61,9 +61,9 @@ # Prefer using the in-tree version of libunwind, either shared or static. If # none are found fall back to using -lunwind. # FIXME: Is it correct to prefer the static version of libunwind? - if (NOT LIBCXXABI_ENABLE_STATIC_UNWINDER AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) + if (NOT LIBCXXABI_ENABLE_STATIC_UNWINDER_SHARED AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) list(APPEND LIBCXXABI_LIBRARIES unwind_shared) - elseif (LIBCXXABI_ENABLE_STATIC_UNWINDER AND (TARGET unwind_static OR HAVE_LIBUNWIND)) + elseif (LIBCXXABI_ENABLE_STATIC_UNWINDER_STATIC AND (TARGET unwind_static OR HAVE_LIBUNWIND)) list(APPEND LIBCXXABI_LIBRARIES unwind_static) else() list(APPEND LIBCXXABI_LIBRARIES unwind) @@ -155,7 +155,7 @@ # Build the static library. if (LIBCXXABI_ENABLE_STATIC) set(cxxabi_static_sources $) - if (LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_ENABLE_STATIC_UNWINDER) + if (LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_ENABLE_STATIC_UNWINDER_STATIC) if (TARGET unwind_static OR HAVE_LIBUNWIND) list(APPEND cxxabi_static_sources $) endif()