See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109180 Avoid the following undefined reference: /usr/lib/gcc/armv7l-linux-gnueabihf/12.2.0/../../../../armv7l-linux-gnueabihf/bin/ld: projects/libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.o: in function `std::__1::__time_get_c_storage::__x() const [clone .localalias]': locale.cpp:(.text._ZNKSt3__120__time_get_c_storageIcE3__xEv+0xb4): undefined reference to `std::__1::basic_string, std::__1::allocator >::~basic_string()' /usr/lib/gcc/armv7l-linux-gnueabihf/12.2.0/../../../../armv7l-linux-gnueabihf/bin/ld: projects/libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.o: in function `std::__1::__time_get_c_storage::__X() const [clone .localalias]': diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index b8ac536588d3..65e5a1365634 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -308,6 +308,8 @@ endif() option(LIBCXX_HERMETIC_STATIC_LIBRARY "Do not export any symbols from the static library." ${LIBCXX_HERMETIC_STATIC_LIBRARY_DEFAULT}) +option(LIBCXX_VOID_GCC_BUG_109180_WORKAROUND OFF) + #=============================================================================== # Check option configurations #=============================================================================== diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt index 35b466527096..5b0efa171616 100644 --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -155,6 +155,10 @@ if (LIBCXX_GENERATE_COVERAGE AND NOT LIBCXX_COVERAGE_LIBRARY) endif() add_library_flags_if(LIBCXX_COVERAGE_LIBRARY "${LIBCXX_COVERAGE_LIBRARY}") +if (LIBCXX_VOID_GCC_BUG_109180_WORKAROUND) + set_source_files_properties(string.cpp PROPERTIES COMPILE_FLAGS -fno-inline) +endif() + if (APPLE AND LLVM_USE_SANITIZER) if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR