Skip to content

Commit 483490d

Browse files
authored
[release/7.0] Disable objc_msgSend stubs in clang for compatibility with Xcode 13 (#91117)
Backport of #89932 and #90217 to release/7.0
1 parent c86ac26 commit 483490d

File tree

5 files changed

+28
-1
lines changed

5 files changed

+28
-1
lines changed

eng/native/configurecompiler.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,17 @@ if (CLR_CMAKE_HOST_UNIX)
384384
# using twos-complement representation (this is normally undefined according to the C++ spec).
385385
add_compile_options(-fwrapv)
386386

387+
if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST OR CLR_CMAKE_HOST_IOS OR CLR_CMAKE_HOST_TVOS)
388+
# Clang will by default emit objc_msgSend stubs in Xcode 14, which ld from earlier Xcodes doesn't understand.
389+
# We disable this by passing -fno-objc-msgsend-selector-stubs to clang.
390+
# We can probably remove this flag once we require developers to use Xcode 14.
391+
# Ref: https://github.com/xamarin/xamarin-macios/issues/16223
392+
check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
393+
if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
394+
set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
395+
endif()
396+
endif()
397+
387398
if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST)
388399
# We cannot enable "stack-protector-strong" on OS X due to a bug in clang compiler (current version 7.0.2)
389400
add_compile_options(-fstack-protector)

src/mono/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,14 @@ if(HOST_IOS OR HOST_ANDROID OR HOST_MACCAT)
899899
else()
900900
set(DISABLE_DLLMAP 1)
901901
endif()
902+
903+
if(TARGET_DARWIN)
904+
check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
905+
if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
906+
set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
907+
endif()
908+
endif()
909+
902910
### End of OS specific checks
903911

904912
include_directories("${CLR_SRC_NATIVE_DIR}")

src/mono/mono/mini/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ if(HAVE_SYS_ICU AND NOT HOST_WASI)
7878
addprefix(icu_shim_sources "${ICU_SHIM_PATH}" "${icu_shim_sources_base}")
7979
set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_DEFINITIONS OSX_ICU_LIBRARY_PATH="${OSX_ICU_LIBRARY_PATH}")
8080
set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_FLAGS "-I\"${ICU_INCLUDEDIR}\" -I\"${CLR_SRC_NATIVE_DIR}/libs/System.Globalization.Native/\" -I\"${CLR_SRC_NATIVE_DIR}/libs/Common/\" ${ICU_FLAGS}")
81+
if(TARGET_DARWIN)
82+
set_property(SOURCE "${ICU_SHIM_PATH}/pal_locale.m" APPEND_STRING PROPERTY COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
83+
endif()
8184
if(TARGET_WIN32)
8285
set_source_files_properties(${icu_shim_sources} PROPERTIES LANGUAGE CXX)
8386
endif()

src/native/libs/System.Globalization.Native/CMakeLists.txt

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

6363
if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
6464
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_locale.m)
65+
set_source_files_properties(pal_locale.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
6566
endif()
6667

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

src/native/libs/System.Native/CMakeLists.txt

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

4040
if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
4141
list (APPEND NATIVE_SOURCES pal_autoreleasepool.m)
42-
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS -fno-objc-arc)
42+
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS "-fno-objc-arc ${CLR_CMAKE_COMMON_OBJC_FLAGS}")
4343
else()
4444
list (APPEND NATIVE_SOURCES pal_autoreleasepool.c)
4545
endif()
4646

4747
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
4848
list (APPEND NATIVE_SOURCES pal_environment.m)
49+
set_source_files_properties(pal_environment.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
4950
else()
5051
list (APPEND NATIVE_SOURCES pal_environment.c)
5152
endif()
5253

5354
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
5455
set(NATIVE_SOURCES ${NATIVE_SOURCES}
5556
pal_datetime.m)
57+
set_source_files_properties(pal_datetime.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
5658
endif()
5759

5860
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
5961
set(NATIVE_SOURCES ${NATIVE_SOURCES}
6062
pal_log.m
6163
pal_searchpath.m)
64+
set_source_files_properties(pal_log.m pal_searchpath.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
6265
else ()
6366
list (APPEND NATIVE_SOURCES
6467
pal_searchpath.c
@@ -69,6 +72,7 @@ endif ()
6972
if (CLR_CMAKE_TARGET_MACCATALYST)
7073
set(NATIVE_SOURCES ${NATIVE_SOURCES}
7174
pal_iossupportversion.m)
75+
set_source_files_properties(pal_iossupportversion.m PROPERTIES COMPILE_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS}")
7276
else ()
7377
list (APPEND NATIVE_SOURCES
7478
pal_iossupportversion.c)

0 commit comments

Comments
 (0)