Index: libcxx/cmake/Modules/HandleLibcxxFlags.cmake =================================================================== --- libcxx/cmake/Modules/HandleLibcxxFlags.cmake +++ libcxx/cmake/Modules/HandleLibcxxFlags.cmake @@ -216,10 +216,10 @@ endif() endmacro() -# Add a list of libraries or link flags to 'LIBCXX_LIBRARIES'. +# Add a list of libraries or link flags to 'LIBCXX_SHARED_LIBRARIES'. macro(add_interface_library) foreach(lib ${ARGN}) - list(APPEND LIBCXX_LIBRARIES ${lib}) + list(APPEND LIBCXX_SHARED_LIBRARIES ${lib}) list(APPEND LIBCXX_INTERFACE_LIBRARIES ${lib}) endforeach() endmacro() Index: libcxx/lib/CMakeLists.txt =================================================================== --- libcxx/lib/CMakeLists.txt +++ libcxx/lib/CMakeLists.txt @@ -59,14 +59,14 @@ if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY) if (APPLE) - add_library_flags("-Wl,-force_load" "${LIBCXX_CXX_STATIC_ABI_LIBRARY}") + list(APPEND LIBCXX_SHARED_LIBRARIES "-Wl,-force_load" "${LIBCXX_CXX_STATIC_ABI_LIBRARY}") else() - add_library_flags("-Wl,--whole-archive" "-Wl,-Bstatic") - add_library_flags("${LIBCXX_CXX_STATIC_ABI_LIBRARY}") - add_library_flags("-Wl,-Bdynamic" "-Wl,--no-whole-archive") + list(APPEND LIBCXX_SHARED_LIBRARIES "-Wl,--whole-archive" "-Wl,-Bstatic") + list(APPEND LIBCXX_SHARED_LIBRARIES "${LIBCXX_CXX_STATIC_ABI_LIBRARY}") + list(APPEND LIBCXX_SHARED_LIBRARIES "-Wl,-Bdynamic" "-Wl,--no-whole-archive") endif() elseif (LIBCXX_OSX_REEXPORT_LIBCXXABI_SYMBOLS) - add_library_flags("${LIBCXX_CXX_SHARED_ABI_LIBRARY}") + list(APPEND LIBCXX_SHARED_LIBRARIES "${LIBCXX_CXX_SHARED_ABI_LIBRARY}") else () add_interface_library("${LIBCXX_CXX_SHARED_ABI_LIBRARY}") endif() @@ -112,13 +112,20 @@ # Add the unwinder library. if (LIBCXXABI_USE_LLVM_UNWINDER) - if (NOT LIBCXXABI_ENABLE_STATIC_UNWINDER AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) + if (NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) add_interface_library(unwind_shared) - elseif (LIBCXXABI_ENABLE_STATIC_UNWINDER AND (TARGET unwind_static OR HAVE_LIBUNWIND)) - add_interface_library(unwind_static) + elseif (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_static OR HAVE_LIBUNWIND)) + # libunwind is already included in libc++abi else() add_interface_library(unwind) endif() + if (NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) + list(APPEND LIBCXX_STATIC_LIBRARIES unwind_shared) + elseif (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY AND (TARGET unwind_static OR HAVE_LIBUNWIND)) + # libunwind is already included in libc++abi + else() + list(APPEND LIBCXXABI_STATIC_LIBRARIES unwind) + endif() endif() # Setup flags. @@ -198,7 +205,7 @@ if(COMMAND llvm_setup_rpath) llvm_setup_rpath(cxx_shared) endif() - target_link_libraries(cxx_shared PRIVATE ${LIBCXX_LIBRARIES}) + target_link_libraries(cxx_shared PRIVATE ${LIBCXX_SHARED_LIBRARIES} ${LIBCXX_LIBRARIES}) set_target_properties(cxx_shared PROPERTIES COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}" @@ -226,7 +233,7 @@ # Build the static library. if (LIBCXX_ENABLE_STATIC) add_library(cxx_static STATIC ${exclude_from_all} ${LIBCXX_SOURCES} ${LIBCXX_HEADERS}) - target_link_libraries(cxx_static PRIVATE ${LIBCXX_LIBRARIES}) + target_link_libraries(cxx_static PRIVATE ${LIBCXX_STATIC_LIBRARIES} ${LIBCXX_LIBRARIES}) set(CMAKE_STATIC_LIBRARY_PREFIX "lib") set_target_properties(cxx_static PROPERTIES