Skip to content

Commit 88d2fbd

Browse files
committed
Disable objc_msgSend stubs in clang
Applies the same fix as dotnet/macios#16231. We recently started seeing the same issue in our runtime builds, see #89925. This is because the AzDO build machines use Xcode 14 but the Helix machines are still using Xcode 13 so linking an Xcode-14-built static library fails. Fixes #89925
1 parent 9d3c822 commit 88d2fbd

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

eng/native/configurecompiler.cmake

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

507+
if(CLR_CMAKE_HOST_APPLE)
508+
# Clang will by default emit objc_msgSend stubs in Xcode 14, which ld from earlier Xcodes doesn't understand.
509+
# We disable this by passing -fno-objc-msgsend-selector-stubs to clang.
510+
# We can probably remove this flag once we require developers to use Xcode 14.
511+
# Ref: https://github.com/xamarin/xamarin-macios/issues/16223
512+
check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
513+
if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS)
514+
set(CLR_CMAKE_COMMON_OBJC_FLAGS "${CLR_CMAKE_COMMON_OBJC_FLAGS} -fno-objc-msgsend-selector-stubs")
515+
endif()
516+
endif()
517+
507518
if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST)
508519
# We cannot enable "stack-protector-strong" on OS X due to a bug in clang compiler (current version 7.0.2)
509520
add_compile_options(-fstack-protector)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ endif()
9494

9595
if (CLR_CMAKE_TARGET_APPLE)
9696
set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_locale.m pal_collation.m pal_casing.m)
97+
set_source_files_properties(pal_locale.m pal_collation.m pal_casing.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
9798
endif()
9899

99100
# 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: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,31 +68,35 @@ endif()
6868

6969
if (CLR_CMAKE_TARGET_APPLE)
7070
list (APPEND NATIVE_SOURCES pal_autoreleasepool.m)
71-
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS -fno-objc-arc)
71+
set_source_files_properties(pal_autoreleasepool.m PROPERTIES COMPILE_FLAGS "-fno-objc-arc ${CLR_CMAKE_COMMON_OBJC_FLAGS}")
7272
else()
7373
list (APPEND NATIVE_SOURCES pal_autoreleasepool.c)
7474
endif()
7575

7676
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
7777
list (APPEND NATIVE_SOURCES pal_environment.m)
78+
set_source_files_properties(pal_environment.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
7879
else()
7980
list (APPEND NATIVE_SOURCES pal_environment.c)
8081
endif()
8182

8283
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
8384
set(NATIVE_SOURCES ${NATIVE_SOURCES}
8485
pal_datetime.m)
86+
set_source_files_properties(pal_datetime.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
8587
endif()
8688

8789
if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
8890
set(NATIVE_SOURCES ${NATIVE_SOURCES}
8991
pal_log.m
9092
pal_searchpath.m)
93+
set_source_files_properties(pal_log.m pal_searchpath.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
9194
elseif (CLR_CMAKE_TARGET_OSX)
9295
list (APPEND NATIVE_SOURCES
9396
pal_searchpath.m
9497
pal_console.c
9598
pal_log.c)
99+
set_source_files_properties(pal_searchpath.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
96100
elseif (CLR_CMAKE_TARGET_WASI)
97101
list (APPEND NATIVE_SOURCES
98102
pal_searchpath.c
@@ -108,6 +112,7 @@ endif ()
108112
if (CLR_CMAKE_TARGET_MACCATALYST)
109113
set(NATIVE_SOURCES ${NATIVE_SOURCES}
110114
pal_iossupportversion.m)
115+
set_source_files_properties(pal_iossupportversion.m PROPERTIES COMPILE_FLAGS ${CLR_CMAKE_COMMON_OBJC_FLAGS})
111116
else ()
112117
list (APPEND NATIVE_SOURCES
113118
pal_iossupportversion.c)

0 commit comments

Comments
 (0)