From 26000448d267dfef8227d1fec93c9bbc28d0421d Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Sat, 8 May 2021 08:30:58 -0400 Subject: [PATCH] Enable tests for MacCatalyst x64 (#51139) --- eng/install-native-dependencies.sh | 4 +- eng/native/build-commons.sh | 2 +- eng/native/configurecompiler.cmake | 16 +++---- eng/native/configureplatform.cmake | 22 ++++++---- eng/native/configuretools.cmake | 2 +- eng/pipelines/common/global-build-job.yml | 2 +- .../libraries/helix-queues-setup.yml | 8 ++++ eng/pipelines/runtime-staging.yml | 44 ++++++++++++++++++- eng/testing/tests.mobile.targets | 4 +- eng/testing/xunit/xunit.console.targets | 2 +- .../TestUtilities/System/PlatformDetection.cs | 2 +- .../CMakeLists.txt | 4 +- .../configure.cmake | 2 +- .../CMakeLists.txt | 2 +- .../extra_libs.cmake | 2 +- .../CalendarTests.cs | 2 +- .../Tests/AsyncReaderLateInitTests.cs | 6 +-- src/libraries/sendtohelixhelp.proj | 25 +++++++---- src/libraries/tests.proj | 12 ++++- src/mono/CMakeLists.txt | 5 ++- src/mono/mono.proj | 12 +++-- src/mono/mono/mini/CMakeLists.txt | 6 ++- .../Templates/CMakeLists.txt.template | 5 +++ src/tasks/AppleAppBuilder/Templates/runtime.m | 4 +- src/tasks/AppleAppBuilder/Xcode.cs | 18 ++++++-- 25 files changed, 156 insertions(+), 57 deletions(-) diff --git a/eng/install-native-dependencies.sh b/eng/install-native-dependencies.sh index 9133498b58f..a29dfdf78aa 100755 --- a/eng/install-native-dependencies.sh +++ b/eng/install-native-dependencies.sh @@ -22,9 +22,11 @@ if [ "$1" = "Linux" ]; then if [ "$?" != "0" ]; then exit 1; fi -elif [ "$1" = "OSX" ] || [ "$1" = "tvOS" ] || [ "$1" = "iOS" ]; then +elif [ "$1" = "MacCatalyst" ] || [ "$1" = "OSX" ] || [ "$1" = "tvOS" ] || [ "$1" = "iOS" ]; then engdir=$(dirname "${BASH_SOURCE[0]}") + echo "Installed xcode version: `xcode-select -p`" + if [ "$3" = "azDO" ]; then # workaround for old osx images on hosted agents # piped in case we get an agent without these values installed diff --git a/eng/native/build-commons.sh b/eng/native/build-commons.sh index e8f0b442ea3..d568f9bf517 100755 --- a/eng/native/build-commons.sh +++ b/eng/native/build-commons.sh @@ -91,7 +91,7 @@ build_native() fi if [[ "$targetOS" == MacCatalyst ]]; then - cmakeArgs="-DCLR_CMAKE_TARGET_MACCATALYST=1 $cmakeArgs" + cmakeArgs="-DCMAKE_SYSTEM_VARIANT=MacCatalyst $cmakeArgs" fi if [[ "$__UseNinja" == 1 ]]; then diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 2fab8f0b9ac..39b7bfc9266 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -187,7 +187,7 @@ elseif(CLR_CMAKE_HOST_SUNOS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector") add_definitions(-D__EXTENSIONS__) -elseif(CLR_CMAKE_HOST_OSX) +elseif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) add_definitions(-D_XOPEN_SOURCE) endif() @@ -231,7 +231,7 @@ endif(CLR_CMAKE_HOST_UNIX) if (CLR_CMAKE_HOST_UNIX) add_definitions(-DHOST_UNIX) - if(CLR_CMAKE_HOST_OSX) + if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) add_definitions(-DHOST_OSX) if(CLR_CMAKE_HOST_UNIX_AMD64) message("Detected OSX x86_64") @@ -246,7 +246,7 @@ if (CLR_CMAKE_HOST_UNIX) message("Detected NetBSD amd64") elseif(CLR_CMAKE_HOST_SUNOS) message("Detected SunOS amd64") - endif(CLR_CMAKE_HOST_OSX) + endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) endif(CLR_CMAKE_HOST_UNIX) if (CLR_CMAKE_HOST_WIN32) @@ -297,7 +297,7 @@ if (CLR_CMAKE_HOST_UNIX) # using twos-complement representation (this is normally undefined according to the C++ spec). add_compile_options(-fwrapv) - if(CLR_CMAKE_HOST_OSX) + if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) # We cannot enable "stack-protector-strong" on OS X due to a bug in clang compiler (current version 7.0.2) add_compile_options(-fstack-protector) else() @@ -305,7 +305,7 @@ if (CLR_CMAKE_HOST_UNIX) if (COMPILER_SUPPORTS_F_STACK_PROTECTOR_STRONG) add_compile_options(-fstack-protector-strong) endif() - endif(CLR_CMAKE_HOST_OSX) + endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) # Suppress warnings-as-errors in release branches to reduce servicing churn if (PRERELEASE) @@ -373,7 +373,7 @@ if (CLR_CMAKE_HOST_UNIX) add_compile_options(-fvisibility=hidden) # Specify the minimum supported version of macOS - if(CLR_CMAKE_HOST_OSX) + if(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) # Mac Catalyst needs a special CFLAG, exclusive with mmacosx-version-min if(CLR_CMAKE_TARGET_MACCATALYST) # Somewhere between CMake 3.17 and 3.19.4, it became impossible to not pass @@ -406,7 +406,7 @@ if (CLR_CMAKE_HOST_UNIX) add_compile_options(${MACOS_VERSION_MIN_FLAGS}) add_linker_flag(${MACOS_VERSION_MIN_FLAGS}) endif(CLR_CMAKE_TARGET_MACCATALYST) - endif(CLR_CMAKE_HOST_OSX) + endif(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) endif(CLR_CMAKE_HOST_UNIX) @@ -414,7 +414,7 @@ if(CLR_CMAKE_TARGET_UNIX) add_compile_definitions($<$>>:TARGET_UNIX>) # Contracts are disabled on UNIX. add_definitions(-DDISABLE_CONTRACTS) - if(CLR_CMAKE_TARGET_OSX) + if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) add_compile_definitions($<$>>:TARGET_OSX>) elseif(CLR_CMAKE_TARGET_FREEBSD) add_compile_definitions($<$>>:TARGET_FREEBSD>) diff --git a/eng/native/configureplatform.cmake b/eng/native/configureplatform.cmake index aa141437e19..a942fb09dd2 100644 --- a/eng/native/configureplatform.cmake +++ b/eng/native/configureplatform.cmake @@ -77,7 +77,13 @@ endif(CLR_CMAKE_HOST_OS STREQUAL Linux) if(CLR_CMAKE_HOST_OS STREQUAL Darwin) set(CLR_CMAKE_HOST_UNIX 1) - set(CLR_CMAKE_HOST_OSX 1) + + if(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst) + set(CLR_CMAKE_HOST_MACCATALYST 1) + else() + set(CLR_CMAKE_HOST_OSX 1) + endif(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst) + if(CMAKE_OSX_ARCHITECTURES STREQUAL x86_64) set(CLR_CMAKE_HOST_UNIX_AMD64 1) elseif(CMAKE_OSX_ARCHITECTURES STREQUAL arm64) @@ -297,7 +303,12 @@ endif(CLR_CMAKE_TARGET_OS STREQUAL Android) if(CLR_CMAKE_TARGET_OS STREQUAL Darwin) set(CLR_CMAKE_TARGET_UNIX 1) - set(CLR_CMAKE_TARGET_OSX 1) + + if(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst) + set(CLR_CMAKE_TARGET_MACCATALYST 1) + else() + set(CLR_CMAKE_TARGET_OSX 1) + endif(CMAKE_SYSTEM_VARIANT STREQUAL MacCatalyst) endif(CLR_CMAKE_TARGET_OS STREQUAL Darwin) if(CLR_CMAKE_TARGET_OS STREQUAL iOS OR CLR_CMAKE_TARGET_OS STREQUAL iOSSimulator) @@ -305,11 +316,6 @@ if(CLR_CMAKE_TARGET_OS STREQUAL iOS OR CLR_CMAKE_TARGET_OS STREQUAL iOSSimulator set(CLR_CMAKE_TARGET_IOS 1) endif(CLR_CMAKE_TARGET_OS STREQUAL iOS OR CLR_CMAKE_TARGET_OS STREQUAL iOSSimulator) -if(CLR_CMAKE_TARGET_OS STREQUAL MacCatalyst) - set(CLR_CMAKE_TARGET_UNIX 1) - set(CLR_CMAKE_TARGET_MACCATALYST 1) -endif(CLR_CMAKE_TARGET_OS STREQUAL MacCatalyst) - if(CLR_CMAKE_TARGET_OS STREQUAL tvOS OR CLR_CMAKE_TARGET_OS STREQUAL tvOSSimulator) set(CLR_CMAKE_TARGET_UNIX 1) set(CLR_CMAKE_TARGET_TVOS 1) @@ -387,7 +393,7 @@ endif() if(NOT CLR_CMAKE_TARGET_BROWSER) # The default linker on Solaris also does not support PIE. - if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS AND NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_HOST_TVOS AND NOT CLR_CMAKE_HOST_IOS AND NOT MSVC) + if(NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_SUNOS AND NOT CLR_CMAKE_TARGET_OSX AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_HOST_TVOS AND NOT CLR_CMAKE_HOST_IOS AND NOT MSVC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") add_compile_options($<$,EXECUTABLE>:-fPIE>) add_compile_options($<$,SHARED_LIBRARY>:-fPIC>) diff --git a/eng/native/configuretools.cmake b/eng/native/configuretools.cmake index 501aec5f6c6..608f55ed2cb 100644 --- a/eng/native/configuretools.cmake +++ b/eng/native/configuretools.cmake @@ -74,7 +74,7 @@ if (NOT CLR_CMAKE_HOST_WIN32) set(LD_GNU 1) elseif("${ldVersionOutput}" MATCHES "Solaris Link") set(LD_SOLARIS 1) - else(CLR_CMAKE_HOST_OSX) + else(CLR_CMAKE_HOST_OSX OR CLR_CMAKE_HOST_MACCATALYST) set(LD_OSX 1) endif() endif() diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml index bf5da22325a..96c116eb872 100644 --- a/eng/pipelines/common/global-build-job.yml +++ b/eng/pipelines/common/global-build-job.yml @@ -114,7 +114,7 @@ jobs: artifact: Mono_Offsets_${{monoCrossAOTTargetOS}} path: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles' - - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}: + - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS', 'MacCatalyst') }}: - script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO displayName: Install Build Dependencies diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml index a54f7ff17da..2015d5c09d8 100644 --- a/eng/pipelines/libraries/helix-queues-setup.yml +++ b/eng/pipelines/libraries/helix-queues-setup.yml @@ -99,6 +99,14 @@ jobs: - OSX.1014.Amd64.Open - OSX.1015.Amd64.Open + # Mac Catalyst arm64 + - ${{ if eq(parameters.platform, 'MacCatalyst_arm64') }}: + - OSX.1100.ARM64.Open + + # Mac Catalyst x64 + - ${{ if eq(parameters.platform, 'MacCatalyst_x64') }}: + - OSX.1015.Amd64.Open + # Android - ${{ if in(parameters.platform, 'Android_x86', 'Android_x64') }}: - Ubuntu.1804.Amd64.Android.Open diff --git a/eng/pipelines/runtime-staging.yml b/eng/pipelines/runtime-staging.yml index e93298293de..e5b19dcf00e 100644 --- a/eng/pipelines/runtime-staging.yml +++ b/eng/pipelines/runtime-staging.yml @@ -64,10 +64,50 @@ jobs: buildConfig: Release runtimeFlavor: mono platforms: - - Android_x86 - - Android_x64 - iOSSimulator_x64 - tvOSSimulator_x64 + - MacCatalyst_x64 + variables: + # map dependencies variables to local variables + - name: librariesContainsChange + value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ] + - name: monoContainsChange + value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ] + jobParameters: + testGroup: innerloop + nameSuffix: AllSubsets_Mono + buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true /p:MonoForceInterpreter=true + timeoutInMinutes: 180 + condition: >- + or( + eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true), + eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true), + eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true), + eq(variables['isFullMatrix'], true)) + # extra steps, run tests + extraStepsTemplate: /eng/pipelines/libraries/helix.yml + extraStepsParameters: + creator: dotnet-bot + interpreter: true + testRunNamePrefixSuffix: Mono_$(_BuildConfig) + condition: >- + or( + eq(variables['librariesContainsChange'], true), + eq(variables['monoContainsChange'], true), + eq(variables['isFullMatrix'], true)) + +# +# Build the whole product using Mono and run libraries tests +# +- template: /eng/pipelines/common/platform-matrix.yml + parameters: + jobTemplate: /eng/pipelines/common/global-build-job.yml + helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml + buildConfig: Release + runtimeFlavor: mono + platforms: + - Android_x86 + - Android_x64 variables: # map dependencies variables to local variables - name: librariesContainsChange diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index 82b841d5a31..2fedf68d956 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -144,13 +144,13 @@ AssemblyFile="$(AppleAppBuilderTasksAssemblyPath)" /> - - + adhoc + Text="'DevTeamProvisioning' needs to be set for device builds. Set it to 'UBF8T346G9' if you're part of the Microsoft team account, or 'adhoc' to sign with an adhoc key.." /> diff --git a/eng/testing/xunit/xunit.console.targets b/eng/testing/xunit/xunit.console.targets index 7710a05b5a3..77d7363a22f 100644 --- a/eng/testing/xunit/xunit.console.targets +++ b/eng/testing/xunit/xunit.console.targets @@ -2,7 +2,7 @@ true testResults.xml - true + true diff --git a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs index 35b2b6f7b42..34c4bb86c37 100644 --- a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs +++ b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.cs @@ -54,7 +54,7 @@ namespace System public static bool IsBinaryFormatterSupported => IsNotMobile; public static bool IsSpeedOptimized => !IsSizeOptimized; - public static bool IsSizeOptimized => IsBrowser || IsAndroid || IsiOS || IstvOS; + public static bool IsSizeOptimized => IsBrowser || IsAndroid || IsiOS || IstvOS || IsMacCatalyst; public static bool IsBrowserDomSupported => GetIsBrowserDomSupported(); public static bool IsNotBrowserDomSupported => !IsBrowserDomSupported; diff --git a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt index 148197a6b92..46821781f69 100644 --- a/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt +++ b/src/libraries/Native/Unix/System.Globalization.Native/CMakeLists.txt @@ -14,7 +14,7 @@ if(CLR_CMAKE_TARGET_UNIX) add_compile_options(-Wno-unknown-warning-option) if (NOT CLR_CMAKE_TARGET_ANDROID) - if (CLR_CMAKE_TARGET_OSX) + if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) execute_process(COMMAND brew --prefix OUTPUT_VARIABLE brew_prefix OUTPUT_STRIP_TRAILING_WHITESPACE) set(ICU_HOMEBREW_INC_PATH "${brew_prefix}/opt/icu4c/include") endif() @@ -25,7 +25,7 @@ if(CLR_CMAKE_TARGET_UNIX) return() endif() - if(CLR_CMAKE_TARGET_OSX) + if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) add_definitions(-DOSX_ICU_LIBRARY_PATH="/usr/lib/libicucore.dylib") add_definitions(-DU_DISABLE_RENAMING) else() diff --git a/src/libraries/Native/Unix/System.Globalization.Native/configure.cmake b/src/libraries/Native/Unix/System.Globalization.Native/configure.cmake index 76fac2b7b7e..73e47b0335b 100644 --- a/src/libraries/Native/Unix/System.Globalization.Native/configure.cmake +++ b/src/libraries/Native/Unix/System.Globalization.Native/configure.cmake @@ -1,4 +1,4 @@ -if(CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_OSX) +if(CLR_CMAKE_TARGET_ANDROID OR CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) set(HAVE_SET_MAX_VARIABLE 1) set(HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS 1) else() diff --git a/src/libraries/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt b/src/libraries/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt index 3076ffacee7..a800f8614b5 100644 --- a/src/libraries/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt +++ b/src/libraries/Native/Unix/System.Security.Cryptography.Native/CMakeLists.txt @@ -48,7 +48,7 @@ set(NATIVECRYPTO_SOURCES # Always build portable on macOS because OpenSSL is not a system component # and our prebuilts should not assume a specific ABI version for the types # that use OpenSSL at runtime. -if (CLR_CMAKE_TARGET_OSX) +if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) set(FEATURE_DISTRO_AGNOSTIC_SSL True) # by default uninitialized variables like the shim _ptr functions, will turn into common symbols diff --git a/src/libraries/Native/Unix/System.Security.Cryptography.Native/extra_libs.cmake b/src/libraries/Native/Unix/System.Security.Cryptography.Native/extra_libs.cmake index 3090da4e9d4..422b2b04cb1 100644 --- a/src/libraries/Native/Unix/System.Security.Cryptography.Native/extra_libs.cmake +++ b/src/libraries/Native/Unix/System.Security.Cryptography.Native/extra_libs.cmake @@ -11,7 +11,7 @@ macro(append_extra_cryptography_libs NativeLibsExtra) endif(NOT OPENSSL_FOUND) - if (FEATURE_DISTRO_AGNOSTIC_SSL OR CLR_CMAKE_TARGET_OSX) + if (FEATURE_DISTRO_AGNOSTIC_SSL OR CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST) # Link with libdl.so to get the dlopen / dlsym / dlclose list(APPEND ${NativeLibsExtra} dl) else() diff --git a/src/libraries/System.Globalization.Calendars/tests/CalendarTestWithConfigSwitch/CalendarTests.cs b/src/libraries/System.Globalization.Calendars/tests/CalendarTestWithConfigSwitch/CalendarTests.cs index 6219061acb4..a8b0dbbabbe 100644 --- a/src/libraries/System.Globalization.Calendars/tests/CalendarTestWithConfigSwitch/CalendarTests.cs +++ b/src/libraries/System.Globalization.Calendars/tests/CalendarTestWithConfigSwitch/CalendarTests.cs @@ -10,7 +10,7 @@ namespace System.Globalization.Tests public static class CalendarTests { [Fact] - [ActiveIssue("https://github.com/dotnet/runtime/issues/36883", TestPlatforms.iOS | TestPlatforms.tvOS | TestPlatforms.Android)] + [ActiveIssue("https://github.com/dotnet/runtime/issues/36883", TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS | TestPlatforms.Android)] public static void TestJapaneseCalendarDateParsing() { CultureInfo ciJapanese = new CultureInfo("ja-JP") { DateTimeFormat = { Calendar = new JapaneseCalendar() } }; diff --git a/src/libraries/System.Private.Xml/tests/XmlReader/Tests/AsyncReaderLateInitTests.cs b/src/libraries/System.Private.Xml/tests/XmlReader/Tests/AsyncReaderLateInitTests.cs index 83c9584f435..a7757ba4999 100644 --- a/src/libraries/System.Private.Xml/tests/XmlReader/Tests/AsyncReaderLateInitTests.cs +++ b/src/libraries/System.Private.Xml/tests/XmlReader/Tests/AsyncReaderLateInitTests.cs @@ -69,7 +69,7 @@ namespace System.Xml.Tests } [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.tvOS)] + [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS)] public static void ReadAsyncAfterInitializationWithUriThrows() { using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true })) @@ -79,7 +79,7 @@ namespace System.Xml.Tests } [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.tvOS)] + [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS)] public static void ReadAfterInitializationWithUriOnAsyncReaderTrows() { using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true })) @@ -89,7 +89,7 @@ namespace System.Xml.Tests } [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsNotWindowsSubsystemForLinux), nameof(PlatformDetection.IsThreadingSupported))] // [ActiveIssue("https://github.com/dotnet/runtime/issues/18258")] - [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.tvOS)] + [ActiveIssue("https://github.com/dotnet/runtime/issues/49187", TestPlatforms.iOS | TestPlatforms.MacCatalyst | TestPlatforms.tvOS)] public static void InitializationWithUriOnNonAsyncReaderThrows() { Assert.Throws(() => XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = false })); diff --git a/src/libraries/sendtohelixhelp.proj b/src/libraries/sendtohelixhelp.proj index 0a9556317ac..1d94499c1fd 100644 --- a/src/libraries/sendtohelixhelp.proj +++ b/src/libraries/sendtohelixhelp.proj @@ -25,7 +25,7 @@ '$(Scenario)' == 'gcstress0xc_jitstress1' or '$(Scenario)' == 'gcstress0xc_jitstress2' or '$(Scenario)' == 'gcstress0xc_jitminopts_heapverify1'">01:30:00 - <_workItemTimeout Condition="'$(_workItemTimeout)' == '' and ('$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'iOSSimulator' or '$(TargetOS)' == 'tvOS' or '$(TargetOS)' == 'tvOSSimulator' or '$(TargetOS)' == 'Android')">00:30:00 + <_workItemTimeout Condition="'$(_workItemTimeout)' == '' and ('$(TargetOS)' == 'iOS' or '$(TargetOS)' == 'iOSSimulator' or '$(TargetOS)' == 'tvOS' or '$(TargetOS)' == 'tvOSSimulator' or '$(TargetOS)' == 'MacCatalyst' or '$(TargetOS)' == 'Android')">00:30:00 <_workItemTimeout Condition="'$(Scenario)' == '' and '$(_workItemTimeout)' == '' and ('$(TargetArchitecture)' == 'arm64' or '$(TargetArchitecture)' == 'arm')">00:45:00 <_workItemTimeout Condition="'$(Scenario)' != '' and '$(_workItemTimeout)' == '' and ('$(TargetArchitecture)' == 'arm64' or '$(TargetArchitecture)' == 'arm')">01:00:00 <_workItemTimeout Condition="'$(Scenario)' == 'BuildWasmApps' and '$(_workItemTimeout)' == ''">01:00:00 @@ -70,7 +70,7 @@ test/functional/packaging/ - + true @@ -164,6 +164,14 @@ + + + maccatalyst + $(_workItemTimeout) + $(_workItemTimeout) + + + ios-device @@ -211,20 +219,21 @@ - + ios-simulator-64 tvos-simulator ios-device tvos-device + maccatalyst - + $(AppleTestTarget) - + false @@ -283,7 +292,7 @@ - + @@ -321,8 +330,8 @@ - - + + diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 17e95fc63ff..eaefd6d0326 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -79,7 +79,7 @@ - + @@ -157,6 +157,16 @@ + + + + + + + + + diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt index 43dca9946c6..657f768625d 100644 --- a/src/mono/CMakeLists.txt +++ b/src/mono/CMakeLists.txt @@ -177,6 +177,7 @@ endif() ###################################### message ("CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}") +message ("CMAKE_SYSTEM_VARIANT=${CMAKE_SYSTEM_VARIANT}") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") add_definitions(-D_THREAD_SAFE) @@ -526,7 +527,7 @@ endif() ###################################### set(ICU_SHIM_PATH "../../../libraries/Native/Unix/System.Globalization.Native") if(MONO_CROSS_COMPILE) -elseif(HOST_OSX) +elseif(HOST_OSX AND NOT HOST_MACCAT) include(FindPkgConfig) # FIXME: Handle errors # Defines ICU_INCLUDEDIR/ICU_LIBDIR @@ -541,7 +542,7 @@ elseif(HOST_WASM) set(HAVE_SYS_ICU 1) set(STATIC_ICU 1) set(ICU_LIBS "icucore") -elseif(HOST_IOS) +elseif(HOST_IOS OR HOST_MACCAT) set(ICU_FLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations") set(HAVE_SYS_ICU 1) set(STATIC_ICU 1) diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 40e1c978120..1bad73f5e83 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -84,7 +84,7 @@ true - + @@ -309,6 +309,8 @@ <_MonoCMakeSystemName Condition="'$(TargetstvOS)' == 'true'">tvOS <_MonoCMakeVersionMin Condition="'$(TargetsiOS)' == 'true'">$(iOSVersionMin) <_MonoCMakeVersionMin Condition="'$(TargetstvOS)' == 'true'">$(tvOSVersionMin) + + <_IcuLibdir>$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)/native/lib @@ -318,15 +320,17 @@ <_MonoCMakeArgs Include="-DCMAKE_SYSTEM_NAME=$(_MonoCMakeSystemName)"/> <_MonoCMakeArgs Include="-DCMAKE_OSX_DEPLOYMENT_TARGET=$(_MonoCMakeVersionMin)" /> <_MonoCMakeArgs Include="-DCMAKE_OSX_SYSROOT='$(_MonoCMakeSysroot)'" /> - <_MonoCMakeArgs Include="-DICU_LIBDIR=$(_IcuLibdir)"/> <_MonoCMakeArgs Condition="'$(Platform)' == 'x64'" Include="-DCMAKE_OSX_ARCHITECTURES=x86_64"/> <_MonoCMakeArgs Condition="'$(Platform)' == 'x86'" Include="-DCMAKE_OSX_ARCHITECTURES=i386"/> <_MonoCMakeArgs Condition="'$(Platform)' == 'arm64'" Include="-DCMAKE_OSX_ARCHITECTURES=arm64"/> <_MonoCMakeArgs Condition="'$(Platform)' == 'arm'" Include=""-DCMAKE_OSX_ARCHITECTURES=armv7%3Barmv7s""/> <_MonoCFLAGS Include="-Wl,-application_extension" /> - <_MonoCFLAGS Include="-I$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)/native/include" /> <_MonoCXXFLAGS Include="-Wl,-application_extension" /> + + <_MonoCMakeArgs Include="-DICU_LIBDIR=$(_IcuLibdir)"/> + <_MonoCFLAGS Include="-I$(PkgMicrosoft_NETCore_Runtime_ICU_Transport)/runtimes/$(TargetOS)-$(TargetArchitecture)/native/include" /> + <_MonoCMakeArgs Include="-DENABLE_MINIMAL=shared_perfcounters"/> @@ -674,7 +678,7 @@ <_MonoRuntimeFilePath Condition="'$(_MonoRuntimeFilePath)' == ''">$(MonoObjDir)out\lib\$(MonoFileName) <_MonoRuntimeStaticFilePath Condition="'$(TargetsMacCatalyst)' == 'true' or '$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsAndroid)' == 'true'">$(MonoObjDir)out\lib\$(MonoStaticLibFileName) <_MonoIncludeInterpStaticFiles Condition="'$(TargetsBrowser)' == 'true'">true - <_MonoIncludeIcuFiles Condition="'$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true'">true + <_MonoIncludeIcuFiles Condition="'$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsMacCatalyst)' == 'true'">true <_MonoAotCrossFilePath>$(MonoObjCrossDir)out\bin\mono-sgen$(ExeExt) diff --git a/src/mono/mono/mini/CMakeLists.txt b/src/mono/mono/mini/CMakeLists.txt index 8fbc1af6141..9326d86a949 100644 --- a/src/mono/mono/mini/CMakeLists.txt +++ b/src/mono/mono/mini/CMakeLists.txt @@ -20,7 +20,11 @@ include_directories( ${PROJECT_SOURCE_DIR}/../sgen) if(HOST_DARWIN) -set(OS_LIBS "-framework CoreFoundation" "-framework Foundation") + set(OS_LIBS "-framework CoreFoundation" "-framework Foundation") + + if(CMAKE_SYSTEM_VARIANT STREQUAL "MacCatalyst") + set(OS_LIBS "-lobjc" "-lc++") + endif() elseif(HOST_IOS) set(OS_LIBS "-framework CoreFoundation" "-lobjc" "-lc++") elseif(HOST_ANDROID) diff --git a/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template b/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template index e7eeb4de247..2c81b4e5332 100644 --- a/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template +++ b/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template @@ -43,6 +43,11 @@ if("${HARDENED_RUNTIME}") set_target_properties(%ProjectName% PROPERTIES XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES") if("${HARDENED_RUNTIME_USE_ENTITLEMENTS_FILE}") set_target_properties(%ProjectName% PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "app.entitlements") + add_custom_command( + TARGET %ProjectName% POST_BUILD + COMMAND codesign + ARGS -fs "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH/Contents/Resources/*.dylib" + ) endif() endif() diff --git a/src/tasks/AppleAppBuilder/Templates/runtime.m b/src/tasks/AppleAppBuilder/Templates/runtime.m index 17c8be6ff04..8b8d6d181d0 100644 --- a/src/tasks/AppleAppBuilder/Templates/runtime.m +++ b/src/tasks/AppleAppBuilder/Templates/runtime.m @@ -246,14 +246,14 @@ mono_ios_runtime_init (void) const char *appctx_keys [] = { "RUNTIME_IDENTIFIER", "APP_CONTEXT_BASE_DIRECTORY", -#if !defined(INVARIANT_GLOBALIZATION) && !TARGET_OS_MACCATALYST +#if !defined(INVARIANT_GLOBALIZATION) "ICU_DAT_FILE_PATH" #endif }; const char *appctx_values [] = { APPLE_RUNTIME_IDENTIFIER, bundle, -#if !defined(INVARIANT_GLOBALIZATION) && !TARGET_OS_MACCATALYST +#if !defined(INVARIANT_GLOBALIZATION) icu_dat_path #endif }; diff --git a/src/tasks/AppleAppBuilder/Xcode.cs b/src/tasks/AppleAppBuilder/Xcode.cs index d03e5a0948f..94accb7a8ea 100644 --- a/src/tasks/AppleAppBuilder/Xcode.cs +++ b/src/tasks/AppleAppBuilder/Xcode.cs @@ -12,10 +12,12 @@ internal class Xcode private string RuntimeIdentifier { get; set; } private string SysRoot { get; set; } private string Target { get; set; } + private string XcodeArch { get; set; } public Xcode(string target, string arch) { Target = target; + XcodeArch = (arch == "x64") ? "x86_64" : arch; switch (Target) { case TargetNames.iOS: @@ -87,7 +89,7 @@ internal class Xcode var entitlements = new List>(); bool hardenedRuntime = false; - if (Target == TargetNames.MacCatalyst && !(forceInterpreter || forceAOT)) { + if (Target == TargetNames.MacCatalyst && !forceAOT) { hardenedRuntime = true; /* for mmmap MAP_JIT */ @@ -248,7 +250,7 @@ internal class Xcode targetName = Target.ToString(); break; } - var deployTarget = (Target == TargetNames.MacCatalyst) ? " -DCMAKE_OSX_ARCHITECTURES=\"x86_64 arm64\"" : " -DCMAKE_OSX_DEPLOYMENT_TARGET=10.1"; + var deployTarget = (Target == TargetNames.MacCatalyst) ? " -DCMAKE_OSX_ARCHITECTURES=" + XcodeArch : " -DCMAKE_OSX_DEPLOYMENT_TARGET=10.1"; var cmakeArgs = new StringBuilder(); cmakeArgs .Append("-S.") @@ -298,6 +300,10 @@ internal class Xcode .Append(" CODE_SIGNING_REQUIRED=NO") .Append(" CODE_SIGNING_ALLOWED=NO"); } + else if (string.Equals(devTeamProvisioning, "adhoc", StringComparison.OrdinalIgnoreCase)) + { + args.Append(" CODE_SIGN_IDENTITY=\"-\""); + } else { args.Append(" -allowProvisioningUpdates") @@ -332,8 +338,10 @@ internal class Xcode default: sdk = "maccatalyst"; args.Append(" -scheme \"" + Path.GetFileNameWithoutExtension(xcodePrjPath) + "\"") - .Append(" -destination \"platform=macOS,arch=arm64,variant=Mac Catalyst\"") + .Append(" -destination \"generic/platform=macOS,name=Any Mac,variant=Mac Catalyst\"") .Append(" -UseModernBuildSystem=YES") + .Append(" -archivePath \"" + Path.GetDirectoryName(xcodePrjPath) + "\"") + .Append(" -derivedDataPath \"" + Path.GetDirectoryName(xcodePrjPath) + "\"") .Append(" IPHONEOS_DEPLOYMENT_TARGET=14.2"); break; } @@ -355,8 +363,10 @@ internal class Xcode default: sdk = "maccatalyst"; args.Append(" -scheme \"" + Path.GetFileNameWithoutExtension(xcodePrjPath) + "\"") - .Append(" -destination \"platform=macOS,arch=x86_64,variant=Mac Catalyst\"") + .Append(" -destination \"generic/platform=macOS,name=Any Mac,variant=Mac Catalyst\"") .Append(" -UseModernBuildSystem=YES") + .Append(" -archivePath \"" + Path.GetDirectoryName(xcodePrjPath) + "\"") + .Append(" -derivedDataPath \"" + Path.GetDirectoryName(xcodePrjPath) + "\"") .Append(" IPHONEOS_DEPLOYMENT_TARGET=13.5"); break; }