[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