@@ -173,76 +173,76 @@ split_list(LIBCXX_COMPILE_FLAGS)
173
173
split_list(LIBCXX_LINK_FLAGS)
174
174
175
175
# 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>
189
199
)
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 ()
201
201
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 ()
208
208
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 ()
217
217
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 )
236
221
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 ()
244
235
endif ()
245
236
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
+
246
246
if (LIBCXX_ENABLE_SHARED)
247
247
list (APPEND LIBCXX_BUILD_TARGETS "cxx_shared" )
248
248
endif ()
@@ -263,43 +263,43 @@ endif()
263
263
set (CMAKE_STATIC_LIBRARY_PREFIX "lib" )
264
264
265
265
# 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)
289
288
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
289
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 ()
295
295
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 ()
303
303
304
304
# Add a meta-target for both libraries.
305
305
add_custom_target (cxx DEPENDS ${LIBCXX_BUILD_TARGETS} )
0 commit comments