From 66b7cb2a88a0cb1251f1d7c39231ab1e8a35b470 Mon Sep 17 00:00:00 2001 From: Amir Masoud Abdol Date: Mon, 16 Oct 2023 11:24:38 +0200 Subject: [PATCH] Suppress "duplicate libraries" warning for Xcode 15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bug in Xcode 15 adds duplicate flags to the linker. In addition, the `-warn_duplicate_libraries` is now enabled by default which may result in several 'duplicate libraries warning', and build failure if `-Wl,-fatal_warnings` is passed. By adding the newly introduced flag, `-no_warn_duplicate_libraries`, to the linker we can suppress the warnings, and possible fatal error caused by this bug. Change-Id: I65e06ea039a6e98b02ed1f9112c622ecc6a142b5 Reviewed-by: Alexey Edelev Reviewed-by: Tor Arne Vestbø --- cmake/QtInternalTargets.cmake | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index 52ba63c762..29e3483c71 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -229,19 +229,28 @@ elseif(UIKIT) target_compile_definitions(PlatformCommonInternal INTERFACE GLES_SILENCE_DEPRECATION) endif() -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang" - AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0" -) - # Xcode 14's Clang will emit objc_msgSend stubs by default, which ld - # from earlier Xcode versions will fail to understand when linking - # against static libraries with these stubs. Disable the stubs explicitly, - # for as long as we do support Xcode < 14. - set(is_static_lib "$,STATIC_LIBRARY>") - set(is_objc "$") - set(is_static_and_objc "$") - target_compile_options(PlatformCommonInternal INTERFACE - "$<${is_static_and_objc}:-fno-objc-msgsend-selector-stubs>" - ) +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0") + # Xcode 14's Clang will emit objc_msgSend stubs by default, which ld + # from earlier Xcode versions will fail to understand when linking + # against static libraries with these stubs. Disable the stubs explicitly, + # for as long as we do support Xcode < 14. + set(is_static_lib "$,STATIC_LIBRARY>") + set(is_objc "$") + set(is_static_and_objc "$") + target_compile_options(PlatformCommonInternal INTERFACE + "$<${is_static_and_objc}:-fno-objc-msgsend-selector-stubs>" + ) + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0.0") + # A bug in Xcode 15 adds duplicate flags to the linker. In addition, the + # `-warn_duplicate_libraries` is now enabled by default which may result + # in several 'duplicate libraries warning'. + # - https://gitlab.kitware.com/cmake/cmake/-/issues/25297 and + # - https://indiestack.com/2023/10/xcode-15-duplicate-library-linker-warnings/ + target_link_options(PlatformCommonInternal INTERFACE + "LINKER:-no_warn_duplicate_libraries") + endif() endif() if(MSVC)