@@ -173,76 +173,76 @@ split_list(LIBCXX_COMPILE_FLAGS)
173173split_list(LIBCXX_LINK_FLAGS)
174174
175175# Build the shared library.
176- add_library (cxx_shared SHARED ${LIBCXX_SOURCES} ${LIBCXX_HEADERS} )
177- target_include_directories (cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
178- target_link_libraries (cxx_shared PUBLIC cxx-headers libcxx-libc-shared
179- PRIVATE ${LIBCXX_LIBRARIES} )
180- set_target_properties (cxx_shared
181- PROPERTIES
182- EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_SHARED} >,FALSE,TRUE>"
183- COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS} "
184- LINK_FLAGS "${LIBCXX_LINK_FLAGS} "
185- OUTPUT_NAME "${LIBCXX_SHARED_OUTPUT_NAME} "
186- VERSION "${LIBCXX_LIBRARY_VERSION} "
187- SOVERSION "${LIBCXX_ABI_VERSION} "
188- DEFINE_SYMBOL ""
176+ add_library (cxx_shared SHARED ${LIBCXX_SOURCES} ${LIBCXX_HEADERS} )
177+ target_include_directories (cxx_shared PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
178+ target_link_libraries (cxx_shared PUBLIC cxx-headers libcxx-libc-shared
179+ PRIVATE ${LIBCXX_LIBRARIES} )
180+ set_target_properties (cxx_shared
181+ PROPERTIES
182+ EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_SHARED} >,FALSE,TRUE>"
183+ COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS} "
184+ LINK_FLAGS "${LIBCXX_LINK_FLAGS} "
185+ OUTPUT_NAME "${LIBCXX_SHARED_OUTPUT_NAME} "
186+ VERSION "${LIBCXX_LIBRARY_VERSION} "
187+ SOVERSION "${LIBCXX_ABI_VERSION} "
188+ DEFINE_SYMBOL ""
189+ )
190+ cxx_add_common_build_flags(cxx_shared)
191+
192+ if (ZOS)
193+ add_custom_command (TARGET cxx_shared POST_BUILD
194+ COMMAND
195+ ${LIBCXX_SOURCE_DIR} /utils/zos_rename_dll_side_deck.sh
196+ $<TARGET_LINKER_FILE_NAME:cxx_shared> $<TARGET_FILE_NAME:cxx_shared> "${LIBCXX_DLL_NAME} "
197+ COMMENT "Rename dll name inside the side deck file"
198+ WORKING_DIRECTORY $<TARGET_FILE_DIR:cxx_shared>
189199 )
190- cxx_add_common_build_flags(cxx_shared)
191-
192- if (ZOS)
193- add_custom_command (TARGET cxx_shared POST_BUILD
194- COMMAND
195- ${LIBCXX_SOURCE_DIR} /utils/zos_rename_dll_side_deck.sh
196- $<TARGET_LINKER_FILE_NAME:cxx_shared> $<TARGET_FILE_NAME:cxx_shared> "${LIBCXX_DLL_NAME} "
197- COMMENT "Rename dll name inside the side deck file"
198- WORKING_DIRECTORY $<TARGET_FILE_DIR:cxx_shared>
199- )
200- endif ()
200+ endif ()
201201
202- # Link against libc++abi
203- if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
204- target_link_libraries (cxx_shared PRIVATE libcxx-abi-shared-objects)
205- else ()
206- target_link_libraries (cxx_shared PUBLIC libcxx-abi-shared)
207- endif ()
202+ # Link against libc++abi
203+ if (LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
204+ target_link_libraries (cxx_shared PRIVATE libcxx-abi-shared-objects)
205+ else ()
206+ target_link_libraries (cxx_shared PUBLIC libcxx-abi-shared)
207+ endif ()
208208
209- # Maybe force some symbols to be weak, not weak or not exported.
210- # TODO: This shouldn't depend on the platform, and ideally it should be done in the sources.
211- if (APPLE AND LIBCXX_CXX_ABI MATCHES "libcxxabi$"
212- AND NOT LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
213- target_link_libraries (cxx_shared PRIVATE
214- "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR} /../lib/notweak.exp"
215- "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR} /../lib/weak.exp" )
216- endif ()
209+ # Maybe force some symbols to be weak, not weak or not exported.
210+ # TODO: This shouldn't depend on the platform, and ideally it should be done in the sources.
211+ if (APPLE AND LIBCXX_CXX_ABI MATCHES "libcxxabi$"
212+ AND NOT LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY)
213+ target_link_libraries (cxx_shared PRIVATE
214+ "-Wl,-force_symbols_not_weak_list,${CMAKE_CURRENT_SOURCE_DIR} /../lib/notweak.exp"
215+ "-Wl,-force_symbols_weak_list,${CMAKE_CURRENT_SOURCE_DIR} /../lib/weak.exp" )
216+ endif ()
217217
218- # Generate a linker script in place of a libc++.so symlink.
219- if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
220- set (link_libraries )
221-
222- set (imported_libname "$<TARGET_PROPERTY:libcxx-abi-shared,IMPORTED_LIBNAME>" )
223- set (output_name "$<TARGET_PROPERTY:libcxx-abi-shared,OUTPUT_NAME>" )
224- string (APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG} $<IF:$<BOOL:${imported_libname} >,${imported_libname} ,${output_name} >" )
225-
226- # TODO: Move to the same approach as above for the unwind library
227- if (LIBCXXABI_USE_LLVM_UNWINDER)
228- if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
229- # libunwind is already included in libc++abi
230- elseif (TARGET unwind_shared OR HAVE_LIBUNWIND)
231- string (APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG} $<TARGET_PROPERTY:unwind_shared,OUTPUT_NAME>" )
232- else ()
233- string (APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG} unwind" )
234- endif ()
235- endif ()
218+ # Generate a linker script in place of a libc++.so symlink.
219+ if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT)
220+ set (link_libraries )
236221
237- set (linker_script "INPUT($<TARGET_SONAME_FILE_NAME:cxx_shared> ${link_libraries} )" )
238- add_custom_command (TARGET cxx_shared POST_BUILD
239- COMMAND "${CMAKE_COMMAND} " -E remove "$<TARGET_LINKER_FILE:cxx_shared>"
240- COMMAND "${CMAKE_COMMAND} " -E echo "${linker_script} " > "$<TARGET_LINKER_FILE:cxx_shared>"
241- COMMENT "Generating linker script: '${linker_script} ' as file $<TARGET_LINKER_FILE:cxx_shared>"
242- VERBATIM
243- )
222+ set (imported_libname "$<TARGET_PROPERTY:libcxx-abi-shared,IMPORTED_LIBNAME>" )
223+ set (output_name "$<TARGET_PROPERTY:libcxx-abi-shared,OUTPUT_NAME>" )
224+ string (APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG} $<IF:$<BOOL:${imported_libname} >,${imported_libname} ,${output_name} >" )
225+
226+ # TODO: Move to the same approach as above for the unwind library
227+ if (LIBCXXABI_USE_LLVM_UNWINDER)
228+ if (LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY)
229+ # libunwind is already included in libc++abi
230+ elseif (TARGET unwind_shared OR HAVE_LIBUNWIND)
231+ string (APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG} $<TARGET_PROPERTY:unwind_shared,OUTPUT_NAME>" )
232+ else ()
233+ string (APPEND link_libraries " ${CMAKE_LINK_LIBRARY_FLAG} unwind" )
234+ endif ()
244235 endif ()
245236
237+ set (linker_script "INPUT($<TARGET_SONAME_FILE_NAME:cxx_shared> ${link_libraries} )" )
238+ add_custom_command (TARGET cxx_shared POST_BUILD
239+ COMMAND "${CMAKE_COMMAND} " -E remove "$<TARGET_LINKER_FILE:cxx_shared>"
240+ COMMAND "${CMAKE_COMMAND} " -E echo "${linker_script} " > "$<TARGET_LINKER_FILE:cxx_shared>"
241+ COMMENT "Generating linker script: '${linker_script} ' as file $<TARGET_LINKER_FILE:cxx_shared>"
242+ VERBATIM
243+ )
244+ endif ()
245+
246246if (LIBCXX_ENABLE_SHARED)
247247 list (APPEND LIBCXX_BUILD_TARGETS "cxx_shared" )
248248endif ()
@@ -263,43 +263,43 @@ endif()
263263set (CMAKE_STATIC_LIBRARY_PREFIX "lib" )
264264
265265# Build the static library.
266- add_library (cxx_static STATIC ${LIBCXX_SOURCES} ${LIBCXX_HEADERS} )
267- target_include_directories (cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
268- target_link_libraries (cxx_static PUBLIC cxx-headers libcxx-libc-static
269- PRIVATE ${LIBCXX_LIBRARIES}
270- PRIVATE libcxx-abi-static )
271- set_target_properties (cxx_static
272- PROPERTIES
273- EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_STATIC} >,FALSE,TRUE>"
274- COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS} "
275- LINK_FLAGS "${LIBCXX_LINK_FLAGS} "
276- OUTPUT_NAME "${LIBCXX_STATIC_OUTPUT_NAME} "
277- )
278- cxx_add_common_build_flags(cxx_static)
279-
280- if (LIBCXX_HERMETIC_STATIC_LIBRARY)
281- # If the hermetic library doesn't define the operator new/delete functions
282- # then its code shouldn't declare them with hidden visibility. They might
283- # actually be provided by a shared library at link time.
284- if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
285- append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global -new-delete=force-hidden)
286- if (NOT CXX_SUPPORTS_FVISIBILITY_GLOBAL_NEW_DELETE_EQ_FORCE_HIDDEN_FLAG)
287- append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global -new-delete-hidden)
288- endif ()
266+ add_library (cxx_static STATIC ${LIBCXX_SOURCES} ${LIBCXX_HEADERS} )
267+ target_include_directories (cxx_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
268+ target_link_libraries (cxx_static PUBLIC cxx-headers libcxx-libc-static
269+ PRIVATE ${LIBCXX_LIBRARIES}
270+ PRIVATE libcxx-abi-static )
271+ set_target_properties (cxx_static
272+ PROPERTIES
273+ EXCLUDE_FROM_ALL "$<IF:$<BOOL:${LIBCXX_ENABLE_STATIC} >,FALSE,TRUE>"
274+ COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS} "
275+ LINK_FLAGS "${LIBCXX_LINK_FLAGS} "
276+ OUTPUT_NAME "${LIBCXX_STATIC_OUTPUT_NAME} "
277+ )
278+ cxx_add_common_build_flags(cxx_static)
279+
280+ if (LIBCXX_HERMETIC_STATIC_LIBRARY)
281+ # If the hermetic library doesn't define the operator new/delete functions
282+ # then its code shouldn't declare them with hidden visibility. They might
283+ # actually be provided by a shared library at link time.
284+ if (LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS)
285+ append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global -new-delete=force-hidden)
286+ if (NOT CXX_SUPPORTS_FVISIBILITY_GLOBAL_NEW_DELETE_EQ_FORCE_HIDDEN_FLAG)
287+ append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global -new-delete-hidden)
289288 endif ()
290- target_compile_options (cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS} )
291- # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
292- # too. Define it in the same way here, to avoid redefinition conflicts.
293- target_compile_definitions (cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
294289 endif ()
290+ target_compile_options (cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS} )
291+ # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
292+ # too. Define it in the same way here, to avoid redefinition conflicts.
293+ target_compile_definitions (cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
294+ endif ()
295295
296- if (LIBCXX_ENABLE_STATIC)
297- list (APPEND LIBCXX_BUILD_TARGETS "cxx_static" )
298- endif ()
299- # Attempt to merge the libc++.a archive and the ABI library archive into one.
300- if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
301- target_link_libraries (cxx_static PRIVATE libcxx-abi-static -objects)
302- endif ()
296+ if (LIBCXX_ENABLE_STATIC)
297+ list (APPEND LIBCXX_BUILD_TARGETS "cxx_static" )
298+ endif ()
299+ # Attempt to merge the libc++.a archive and the ABI library archive into one.
300+ if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY)
301+ target_link_libraries (cxx_static PRIVATE libcxx-abi-static -objects)
302+ endif ()
303303
304304# Add a meta-target for both libraries.
305305add_custom_target (cxx DEPENDS ${LIBCXX_BUILD_TARGETS} )
0 commit comments