From c91ae574edcd2dfb3a4364c34295886abf012704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 13 Apr 2023 14:17:31 +0200 Subject: [PATCH] Disable objc_msgSend stubs in static libs to maintain Xcode < 14 compat Xcode 14's Clang will emit objc_msgSend stubs by default, which ld from earlier Xcode versions will fail to understand. Disable these stubs explicitly for static libs, for as long as we support Xcode < 14. See https://github.com/llvm/llvm-project/issues/56034 Pick-to: 6.5 Fixes: QTBUG-112820 Change-Id: Id762873d61b9d147bf3eb6292297e7b80b7393e1 Reviewed-by: Timur Pocheptsov Reviewed-by: Alexandru Croitor --- cmake/QtInternalTargets.cmake | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index 2208c28f34..b3c1f00345 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -217,6 +217,21 @@ 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>" + ) +endif() + if(MSVC) target_compile_definitions(PlatformCommonInternal INTERFACE "_CRT_SECURE_NO_WARNINGS"