Skip to content

Commit b776825

Browse files
committed
[release/6.0] Disable objc_msgSend stubs in clang for compatibility with Xcode 13
Backport of dotnet#89932 and dotnet#90217 to release/6.0
1 parent 7e56008 commit b776825

File tree

5 files changed

+28
-1
lines changed

5 files changed

+28
-1
lines changed

src/libraries/Native/Unix/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,17 @@ else ()
218218
message(FATAL_ERROR "Unknown build type. Set CMAKE_BUILD_TYPE to DEBUG or RELEASE.")
219219
endif ()
220220

221+
if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
222+
# Clang will by default emit objc_msgSend stubs in Xcode 14, which ld from earlier Xcodes doesn't understand.
223+
# We disable this by passing -fno-objc-msgsend-selector-stubs to clang.
224+
# We can probably remove this flag once we require developers to use Xcode 14.
225+
# Ref: https://github.com/xamarin/xamarin-macios/issues/16223
226+
check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
227+
if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
228+
set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
229+
endif()
230+
endif()
231+
221232
if(CLR_CMAKE_TARGET_BROWSER)
222233
elseif (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
223234
add_definitions(-D__APPLE_USE_RFC_3542)

src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ set(NATIVEGLOBALIZATION_SOURCES
6666

6767
if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
6868
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_locale.m)
69+
set_source_files_properties(pal_locale.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
6970
endif()
7071

7172
# time zone names are filtered out of icu data for the browser and associated functionality is disabled

src/libraries/Native/Unix/System.Native/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,29 @@ set(NATIVE_SOURCES
3535

3636
if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
3737
list (APPEND NATIVE_SOURCES pal_autoreleasepool.m)
38-
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS -fno-objc-arc)
38+
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS "-fno-objc-arc ${CLR_CMAKE_COMMON_OBJC_FLAGS}")
3939
else()
4040
list (APPEND NATIVE_SOURCES pal_autoreleasepool.c)
4141
endif()
4242

4343
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
4444
list (APPEND NATIVE_SOURCES pal_environment.m)
45+
set_source_files_properties(pal_environment.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
4546
else()
4647
list (APPEND NATIVE_SOURCES pal_environment.c)
4748
endif()
4849

4950
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
5051
set(NATIVE_SOURCES ${NATIVE_SOURCES}
5152
pal_datetime.m)
53+
set_source_files_properties(pal_datetime.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
5254
endif()
5355

5456
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
5557
set(NATIVE_SOURCES ${NATIVE_SOURCES}
5658
pal_log.m
5759
pal_searchpath.m)
60+
set_source_files_properties(pal_log.m pal_searchpath.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
5861
else ()
5962
list (APPEND NATIVE_SOURCES
6063
pal_searchpath.c
@@ -65,6 +68,7 @@ endif ()
6568
if (CLR_CMAKE_TARGET_MACCATALYST)
6669
set(NATIVE_SOURCES ${NATIVE_SOURCES}
6770
pal_iossupportversion.m)
71+
set_source_files_properties(pal_iossupportversion.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
6872
else ()
6973
list (APPEND NATIVE_SOURCES
7074
pal_iossupportversion.c)

src/mono/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,14 @@ if (TARGET_BROWSER)
784784
# sys/errno.h exists, but just emits a warning and includes errno.h
785785
unset(HAVE_SYS_ERRNO_H)
786786
endif()
787+
788+
if(TARGET_DARWIN)
789+
check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
790+
if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
791+
set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
792+
endif()
793+
endif()
794+
787795
### End of OS specific checks
788796

789797
add_subdirectory(mono)

src/mono/mono/mini/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ if(HAVE_SYS_ICU)
8989
addprefix(icu_shim_sources "${ICU_SHIM_PATH}" "${icu_shim_sources_base}")
9090
set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_DEFINITIONS OSX_ICU_LIBRARY_PATH="${OSX_ICU_LIBRARY_PATH}")
9191
set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_FLAGS "-I\"${ICU_INCLUDEDIR}\" -I\"${CMAKE_CURRENT_SOURCE_DIR}/../../../libraries/Native/Unix/System.Globalization.Native/\" -I\"${CMAKE_CURRENT_SOURCE_DIR}/../../../libraries/Native/Unix/Common/\" ${ICU_FLAGS}")
92+
if(TARGET_DARWIN)
93+
set_property(SOURCE "${ICU_SHIM_PATH}/pal_locale.m" APPEND_STRING PROPERTY COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
94+
endif()
9295
if(TARGET_WIN32)
9396
set_source_files_properties(${icu_shim_sources} PROPERTIES LANGUAGE CXX)
9497
endif()

0 commit comments

Comments
 (0)