[libcxx-commits] [PATCH] D125393: [runtimes] Introduce object libraries
Martin Storsjö via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed May 11 14:03:25 PDT 2022
mstorsjo added a comment.
Thanks! Overall, this looks like it can work for me. The same two issues as I still had with D116689 <https://reviews.llvm.org/D116689> (as discussed with @phosek there) exists here too:
- For mingw, I can't build cxxabi_shared, but I do need cxxabi_shared_objects for cxx_shared. @phosek suggested fixing this by always creating the `cxxabi_shared_objects` target, but adding the `EXCLUDE_FROM_ALL` property on it.
- As the line `target_link_libraries(cxx_shared PUBLIC unwind_shared)` is removed from cxx, builds with `LIBCXXABI_USE_LLVM_UNWINDER`, without `LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY` fail. This can be fixed (at least for my case, didn't test other cases) by moving that dependency from `cxxabi_shared` to `cxxabi_shared_objects` - so that it propagates to either `cxxabi_shared` or `cxx_shared` later.
I.e., to make it work for me, I made this change on top of it:
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index 6e22432759e6..04bee47deee7 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -152,10 +152,13 @@ if (NOT TARGET pstl::ParallelSTL)
endif()
# Build the shared library.
-if (LIBCXXABI_ENABLE_SHARED)
add_library(cxxabi_shared_objects OBJECT ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
- if (LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
- target_sources(cxxabi_shared_objects PUBLIC $<TARGET_OBJECTS:unwind_shared_objects>)
+ if (LIBCXXABI_USE_LLVM_UNWINDER)
+ if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
+ target_sources(cxxabi_shared_objects PUBLIC $<TARGET_OBJECTS:unwind_shared_objects>)
+ else()
+ target_link_libraries(cxxabi_shared_objects PUBLIC unwind_shared)
+ endif()
endif()
target_link_libraries(cxxabi_shared_objects PRIVATE cxx-headers ${LIBCXXABI_BUILTINS_LIBRARY} ${LIBCXXABI_SHARED_LIBRARIES} ${LIBCXXABI_LIBRARIES})
target_link_libraries(cxxabi_shared_objects PUBLIC cxxabi-headers)
@@ -166,12 +169,11 @@ if (LIBCXXABI_ENABLE_SHARED)
CXX_STANDARD_REQUIRED OFF
COMPILE_FLAGS "${LIBCXXABI_COMPILE_FLAGS}"
DEFINE_SYMBOL ""
+ EXCLUDE_FROM_ALL ON
)
+if (LIBCXXABI_ENABLE_SHARED)
add_library(cxxabi_shared SHARED $<TARGET_OBJECTS:cxxabi_shared_objects>)
- if(LIBCXXABI_USE_LLVM_UNWINDER AND NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
- target_link_libraries(cxxabi_shared PUBLIC unwind_shared)
- endif()
set_target_properties(cxxabi_shared
PROPERTIES
LINK_FLAGS "${LIBCXXABI_LINK_FLAGS}"
(I guess the same change for always creating the `cxxabi_static_objects`, but with `EXCLUDE_FROM_ALL`, should be made too, but I just tested with the bare minimums for making this work for me.)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D125393/new/
https://reviews.llvm.org/D125393
More information about the libcxx-commits
mailing list