From 9a36880f775dd14acf00427575bb99bedb407d8c Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Mon, 13 Apr 2026 09:07:28 -0400 Subject: [PATCH 1/2] Introduce CLR_CMAKE_TARGET_APPLE_MOBILE for iOS/tvOS/MacCatalyst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These three platforms share the same runtime constraints: static linking, no fork(), no build tools, hybrid globalization, no console signals, etc. Having each one listed individually in cmake conditions is verbose and error-prone — PR #126550 accidentally disabled FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs. Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is the target. Replace ~30 'all three grouped' patterns across 11 cmake files with the umbrella, reducing line noise and preventing future divergence. Per-platform variables are preserved where they genuinely differ: - configurecompiler.cmake: TARGET_* C++ defines and compiler targets - System.Security.Cryptography.Native.Apple: Swift platform names - System.Net.Security.Native / corehost: tvOS gssapi exclusion - System.Native: MacCatalyst pal_iossupportversion.m Also fixes: sendfile exclusion was missing MacCatalyst (now covered by APPLE_MOBILE), and the triplicated configure.cmake feature overrides for iOS/MacCatalyst/tvOS are consolidated into one block. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/native/configureplatform.cmake | 12 +++++++++-- src/coreclr/CMakeLists.txt | 2 +- src/coreclr/clrfeatures.cmake | 6 ++---- src/native/libs/CMakeLists.txt | 4 ++-- .../CMakeLists.txt | 14 ++++++------- .../CMakeLists.txt | 4 ++-- .../extra_libs.cmake | 2 +- src/native/libs/System.Native/CMakeLists.txt | 8 ++++---- .../System.Net.Security.Native/CMakeLists.txt | 4 ++-- .../CMakeLists.txt | 6 +++--- src/native/libs/configure.cmake | 20 ++++--------------- 11 files changed, 38 insertions(+), 44 deletions(-) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index 23fbf67e6f0a74..18952687829684 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -396,6 +396,14 @@ if(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulat set(CLR_CMAKE_TARGET_TVOS 1) endif(CLR_CMAKE_TARGET_OS STREQUAL tvos OR CLR_CMAKE_TARGET_OS STREQUAL tvossimulator) +# Umbrella variable for Apple mobile platforms (iOS, tvOS, MacCatalyst). +# These share the same runtime constraints: static linking, no fork(), +# no build tools, hybrid globalization, etc. Use per-platform variables +# only where they genuinely differ (compiler targets, gssapi, Swift). +if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + set(CLR_CMAKE_TARGET_APPLE_MOBILE 1) +endif() + if(CLR_CMAKE_TARGET_OS STREQUAL freebsd) set(CLR_CMAKE_TARGET_UNIX 1) set(CLR_CMAKE_TARGET_FREEBSD 1) @@ -534,14 +542,14 @@ if(LOWERCASE_CMAKE_BUILD_TYPE STREQUAL debug) string(REPLACE "-D_FORTIFY_SOURCE=2 " "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") endif() -if (CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS OR CLR_CMAKE_HOST_ARCH_ARMV6) +if (CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_APPLE_MOBILE OR CLR_CMAKE_HOST_ARCH_ARMV6) # Some platforms are opted-out from using the in-tree zlib-ng by default: # - Android and iOS-like platforms: concerns about extra binary size # - Armv6: zlib-ng has build breaks set(CLR_CMAKE_USE_SYSTEM_ZLIB 1) endif() -if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) +if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) # opt into building tools like ildasm/ilasm set(CLR_CMAKE_BUILD_TOOLS 1) endif() diff --git a/src/coreclr/CMakeLists.txt b/src/coreclr/CMakeLists.txt index 3806f9319c27f7..688248e7aa0bfb 100644 --- a/src/coreclr/CMakeLists.txt +++ b/src/coreclr/CMakeLists.txt @@ -60,7 +60,7 @@ include(components.cmake) #--------------------------- # Build the single file host #--------------------------- -if(NOT CLR_CROSS_COMPONENTS_BUILD AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ARCH_WASM) +if(NOT CLR_CROSS_COMPONENTS_BUILD AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ARCH_WASM) set(CLR_SINGLE_FILE_HOST_ONLY 1) add_subdirectory(${CLR_SRC_NATIVE_DIR}/corehost/apphost/static Corehost.Static) add_dependencies(runtime singlefilehost) diff --git a/src/coreclr/clrfeatures.cmake b/src/coreclr/clrfeatures.cmake index 09aecadade5b19..f5c84aaaad2947 100644 --- a/src/coreclr/clrfeatures.cmake +++ b/src/coreclr/clrfeatures.cmake @@ -15,7 +15,7 @@ endif() # On desktop, if dynamic code compiled is false, we still enable static linking so we don't have to add platform manifest entries # for interpreter library, which is required for the packs build -if (CLR_CMAKE_TARGET_ARCH_WASM OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS OR CLR_CMAKE_TARGET_MACCATALYST OR NOT FEATURE_DYNAMIC_CODE_COMPILED) +if (CLR_CMAKE_TARGET_ARCH_WASM OR CLR_CMAKE_TARGET_APPLE_MOBILE OR NOT FEATURE_DYNAMIC_CODE_COMPILED) set(FEATURE_STATICALLY_LINKED 1) endif() @@ -51,9 +51,7 @@ if(NOT DEFINED FEATURE_CORPROFILER) # ICorProfiler isn't supported on non-desktop targets or WASM scenarios if(NOT CLR_CMAKE_TARGET_ARCH_WASM # AND NOT CLR_CMAKE_TARGET_ANDROID - # AND NOT CLR_CMAKE_TARGET_MACCATALYST - # AND NOT CLR_CMAKE_TARGET_IOS - # AND NOT CLR_CMAKE_TARGET_TVOS + # AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE ) set(FEATURE_CORPROFILER 1) endif() diff --git a/src/native/libs/CMakeLists.txt b/src/native/libs/CMakeLists.txt index 10b9174e9f6da3..7831cc5f82bcc4 100644 --- a/src/native/libs/CMakeLists.txt +++ b/src/native/libs/CMakeLists.txt @@ -40,7 +40,7 @@ endif () if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) set(CMAKE_MACOSX_RPATH ON) - if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + if (CLR_CMAKE_TARGET_APPLE_MOBILE) set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON) set(CMAKE_INSTALL_NAME_DIR "@rpath") endif () @@ -127,7 +127,7 @@ endif () if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) include(configure.cmake) - if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) + if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE) add_subdirectory(System.IO.Ports.Native) endif () diff --git a/src/native/libs/System.Globalization.Native/CMakeLists.txt b/src/native/libs/System.Globalization.Native/CMakeLists.txt index eee7d49002dcb4..27b0703972bbff 100644 --- a/src/native/libs/System.Globalization.Native/CMakeLists.txt +++ b/src/native/libs/System.Globalization.Native/CMakeLists.txt @@ -23,7 +23,7 @@ if(CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_WASI) add_compile_options(-Wno-unknown-warning-option) # The mobile configurations in particular bring their own ICU, so skip - if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT DEFINED CMAKE_ICU_DIR AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) + if (NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT DEFINED CMAKE_ICU_DIR AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) if (CLR_CMAKE_TARGET_OSX) execute_process(COMMAND brew --prefix OUTPUT_VARIABLE brew_prefix OUTPUT_STRIP_TRAILING_WHITESPACE) set(ICU_HOMEBREW_INC_PATH "${brew_prefix}/opt/icu4c/include") @@ -62,7 +62,7 @@ set(NATIVEGLOBALIZATION_SOURCES pal_idna.c pal_common.c ) -if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) +if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE) set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_calendarData.c @@ -75,7 +75,7 @@ if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CM ) endif() -if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) +if (CLR_CMAKE_TARGET_APPLE_MOBILE) add_definitions(-DAPPLE_HYBRID_GLOBALIZATION) set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} @@ -83,13 +83,13 @@ if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVO ) endif() -if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND DEFINED CMAKE_ICU_DIR) +if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND DEFINED CMAKE_ICU_DIR) include_directories(${CMAKE_ICU_DIR}/include) link_libraries(${CMAKE_ICU_DIR}/lib/libicuuc.a ${CMAKE_ICU_DIR}/lib/libicui18n.a ${CMAKE_ICU_DIR}/lib/libicudata.a) link_libraries(stdc++) endif() -if ((CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) AND NOT DEFINED CMAKE_ICU_DIR) +if (CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT DEFINED CMAKE_ICU_DIR) link_libraries(icucore) endif() @@ -108,7 +108,7 @@ if (LOCAL_BUILD) # For minipal files include_directories(../../) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -elseif (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) +elseif (CLR_CMAKE_TARGET_APPLE_MOBILE OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) add_definitions(-DSTATIC_ICU) set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_icushim_static.c) else() @@ -128,7 +128,7 @@ if (CLR_CMAKE_TARGET_APPLE) endif() # time zone names are filtered out of icu data for the browser and associated functionality is disabled -if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) +if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE) set(NATIVEGLOBALIZATION_SOURCES ${NATIVEGLOBALIZATION_SOURCES} pal_timeZoneInfo.c) endif() diff --git a/src/native/libs/System.IO.Compression.Native/CMakeLists.txt b/src/native/libs/System.IO.Compression.Native/CMakeLists.txt index 2aee0a0d4ceb56..c105ffe5b0c586 100644 --- a/src/native/libs/System.IO.Compression.Native/CMakeLists.txt +++ b/src/native/libs/System.IO.Compression.Native/CMakeLists.txt @@ -83,7 +83,7 @@ if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) target_link_libraries(System.IO.Compression.Native PRIVATE libzstd_static) endif() - if (NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_USE_SYSTEM_BROTLI AND NOT CLR_CMAKE_USE_SYSTEM_ZSTD) + if (NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_USE_SYSTEM_BROTLI AND NOT CLR_CMAKE_USE_SYSTEM_ZSTD) set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/System.IO.Compression.Native_unixexports.src) set(EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/System.IO.Compression.Native.exports) generate_exports_file(${DEF_SOURCES} ${EXPORTS_FILE}) @@ -180,7 +180,7 @@ else () target_link_libraries(System.IO.Compression.Native PUBLIC ${BROTLI_LIBRARIES}) endif () - if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID) + if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID) set(NATIVECOMPRESSION_SOURCES ${NATIVECOMPRESSION_SOURCES} entrypoints.c) endif () diff --git a/src/native/libs/System.IO.Compression.Native/extra_libs.cmake b/src/native/libs/System.IO.Compression.Native/extra_libs.cmake index 1eb0639478e4b6..88bcf56414ab7d 100644 --- a/src/native/libs/System.IO.Compression.Native/extra_libs.cmake +++ b/src/native/libs/System.IO.Compression.Native/extra_libs.cmake @@ -6,7 +6,7 @@ macro(append_extra_compression_libs NativeLibsExtra) elseif (CLR_CMAKE_HOST_ARCH_ARMV6) find_package(ZLIB REQUIRED) list(APPEND ZLIB_LIBRARIES z) - elseif (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + elseif (CLR_CMAKE_TARGET_APPLE_MOBILE) find_package(ZLIB REQUIRED) list(APPEND ZLIB_LIBRARIES m) else() diff --git a/src/native/libs/System.Native/CMakeLists.txt b/src/native/libs/System.Native/CMakeLists.txt index 0beca0c2bb0ba2..9a3ac0bffb7c57 100644 --- a/src/native/libs/System.Native/CMakeLists.txt +++ b/src/native/libs/System.Native/CMakeLists.txt @@ -1,6 +1,6 @@ project(System.Native C) -if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) +if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) add_definitions(-DHAS_CONSOLE_SIGNALS) endif () @@ -73,7 +73,7 @@ if (CLR_CMAKE_TARGET_APPLE) pal_searchpath.m pal_datetime.m) - if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) + if (CLR_CMAKE_TARGET_APPLE_MOBILE) list (APPEND NATIVE_SOURCES_OBJC_NO_ARC pal_log.m) if (CLR_CMAKE_TARGET_MACCATALYST) @@ -137,7 +137,7 @@ if (GEN_SHARED_LIB) ${NATIVE_LIBS_EXTRA} ) - if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) + if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) add_custom_command(TARGET System.Native POST_BUILD COMMENT "Verifying System.Native entry points against entrypoints.c " COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../verify-entrypoints.sh @@ -151,7 +151,7 @@ if (GEN_SHARED_LIB) install_with_stripped_symbols (System.Native PROGRAMS .) endif () -if (NOT GEN_PINVOKE AND NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID) +if (NOT GEN_PINVOKE AND NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID) set(NATIVE_SOURCES ${NATIVE_SOURCES} entrypoints.c) endif() diff --git a/src/native/libs/System.Net.Security.Native/CMakeLists.txt b/src/native/libs/System.Net.Security.Native/CMakeLists.txt index 27a4f37610d4e4..7fffeae9451005 100644 --- a/src/native/libs/System.Net.Security.Native/CMakeLists.txt +++ b/src/native/libs/System.Net.Security.Native/CMakeLists.txt @@ -23,7 +23,7 @@ if (GEN_SHARED_LIB) ) endif() -if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) +if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) set(NATIVEGSS_SOURCES ${NATIVEGSS_SOURCES} entrypoints.c) endif() @@ -40,7 +40,7 @@ if (GEN_SHARED_LIB) ${NATIVE_LIBS_EXTRA} ) - if (NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) + if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI) add_custom_command(TARGET System.Net.Security.Native POST_BUILD COMMENT "Verifying System.Net.Security.Native entry points against entrypoints.c " COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../verify-entrypoints.sh diff --git a/src/native/libs/System.Security.Cryptography.Native.Apple/CMakeLists.txt b/src/native/libs/System.Security.Cryptography.Native.Apple/CMakeLists.txt index 99f7b1b2d207f6..abceed80bb2bf9 100644 --- a/src/native/libs/System.Security.Cryptography.Native.Apple/CMakeLists.txt +++ b/src/native/libs/System.Security.Cryptography.Native.Apple/CMakeLists.txt @@ -23,7 +23,7 @@ set(NATIVECRYPTO_SOURCES pal_networkframework.m ) -if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) +if (CLR_CMAKE_TARGET_APPLE_MOBILE) set(NATIVECRYPTO_SOURCES ${NATIVECRYPTO_SOURCES} pal_keychain_ios.c @@ -115,7 +115,7 @@ if (GEN_SHARED_LIB) ) endif() -if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) +if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE) set(NATIVECRYPTO_SOURCES ${NATIVECRYPTO_SOURCES} entrypoints.c) endif() @@ -132,7 +132,7 @@ if (GEN_SHARED_LIB) ${NATIVE_LIBS_EXTRA} ) - if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) + if (NOT CLR_CMAKE_TARGET_APPLE_MOBILE) add_custom_command(TARGET System.Security.Cryptography.Native.Apple POST_BUILD COMMENT "Verifying System.Security.Cryptography.Native.Apple points against entrypoints.c " COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../verify-entrypoints.sh diff --git a/src/native/libs/configure.cmake b/src/native/libs/configure.cmake index 905801237dfcb3..d32263c541043a 100644 --- a/src/native/libs/configure.cmake +++ b/src/native/libs/configure.cmake @@ -420,8 +420,8 @@ check_c_source_compiles( " KEVENT_HAS_VOID_UDATA) -# do not use sendfile() on iOS/tvOS, it causes SIGSYS at runtime on devices -if(NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) +# do not use sendfile() on Apple mobile platforms, it causes SIGSYS at runtime on devices +if(NOT CLR_CMAKE_TARGET_APPLE_MOBILE) check_c_source_compiles( " #include @@ -569,19 +569,7 @@ check_symbol_exists( stdlib.h HAVE_POSIX_MEMALIGN) -if(CLR_CMAKE_TARGET_IOS) - # Manually set results from check_c_source_runs() since it's not possible to actually run it during CMake configure checking - unset(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP) - unset(HAVE_ALIGNED_ALLOC) # only exists on iOS 13+ - set(HAVE_CLOCK_REALTIME 1) - unset(HAVE_FORK) # exists but blocked by kernel -elseif(CLR_CMAKE_TARGET_MACCATALYST) - # Manually set results from check_c_source_runs() since it's not possible to actually run it during CMake configure checking - unset(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP) - unset(HAVE_ALIGNED_ALLOC) # only exists on iOS 13+ - set(HAVE_CLOCK_REALTIME 1) - unset(HAVE_FORK) # exists but blocked by kernel -elseif(CLR_CMAKE_TARGET_TVOS) +if(CLR_CMAKE_TARGET_APPLE_MOBILE) # Manually set results from check_c_source_runs() since it's not possible to actually run it during CMake configure checking unset(HAVE_SHM_OPEN_THAT_WORKS_WELL_ENOUGH_WITH_MMAP) unset(HAVE_ALIGNED_ALLOC) # only exists on iOS 13+ @@ -923,7 +911,7 @@ check_include_files( "pthread.h" HAVE_PTHREAD_H) -if(CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS) +if(CLR_CMAKE_TARGET_APPLE_MOBILE) set(HAVE_IOS_NET_ROUTE_H 1) set(HAVE_IOS_NET_IFMEDIA_H 1) set(HAVE_IOS_NETINET_TCPFSM_H 1) From 1191c93805d20d0c4e238fd12c6497040603162c Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Mon, 13 Apr 2026 22:38:05 -0400 Subject: [PATCH 2/2] Keep sendfile and IO.Ports available on MacCatalyst MacCatalyst runs on macOS where sendfile() works and serial ports are available. Only iOS and tvOS need these exclusions (sendfile causes SIGSYS on physical devices, and IO.Ports has no hardware). Addresses PR feedback from akoeplinger. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/native/libs/CMakeLists.txt | 2 +- src/native/libs/configure.cmake | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/native/libs/CMakeLists.txt b/src/native/libs/CMakeLists.txt index 7831cc5f82bcc4..cd45a5fa9c7288 100644 --- a/src/native/libs/CMakeLists.txt +++ b/src/native/libs/CMakeLists.txt @@ -127,7 +127,7 @@ endif () if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER OR CLR_CMAKE_TARGET_WASI) include(configure.cmake) - if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_APPLE_MOBILE) + if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_WASI AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) add_subdirectory(System.IO.Ports.Native) endif () diff --git a/src/native/libs/configure.cmake b/src/native/libs/configure.cmake index d32263c541043a..6ff5afae6a8123 100644 --- a/src/native/libs/configure.cmake +++ b/src/native/libs/configure.cmake @@ -420,8 +420,8 @@ check_c_source_compiles( " KEVENT_HAS_VOID_UDATA) -# do not use sendfile() on Apple mobile platforms, it causes SIGSYS at runtime on devices -if(NOT CLR_CMAKE_TARGET_APPLE_MOBILE) +# do not use sendfile() on iOS/tvOS, it causes SIGSYS at runtime on devices +if(NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS) check_c_source_compiles( " #include