From 045021843b8db538e07061ab8196324b5906265a Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Fri, 14 May 2021 13:54:35 -0400 Subject: [PATCH 1/3] Add support for building and using Mac Catalyst offsets --- eng/pipelines/runtime-official.yml | 5 ++++- eng/pipelines/runtime.yml | 3 +++ .../monocrossaot.sfxproj | 1 + src/mono/CMakeLists.txt | 8 +++++++ src/mono/mono.proj | 22 ++++++++++++++++++- .../mono/tools/offsets-tool/offsets-tool.py | 13 +++++++++++ src/mono/monoaotcross.proj | 2 ++ 7 files changed, 52 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index 154a91f1d149e2..84b0d2fcde4510 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -154,6 +154,7 @@ stages: - Browser_wasm - tvOS_arm64 - iOS_arm64 + - MacCatalyst_x64 # # Build Mono release AOT cross-compilers @@ -213,7 +214,7 @@ stages: - OSX_x64 jobParameters: buildArgs: -s mono+packs -c $(_BuildConfig) - /p:MonoCrossAOTTargetOS=Android+Browser+tvOS+iOS /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true + /p:MonoCrossAOTTargetOS=Android+Browser+tvOS+iOS+MacCatalyst /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true nameSuffix: CrossAOT_Mono runtimeVariant: crossaot dependsOn: @@ -221,11 +222,13 @@ stages: - mono_browser_offsets - mono_tvos_offsets - mono_ios_offsets + - mono_maccatalyst_offsets monoCrossAOTTargetOS: - Android - Browser - tvOS - iOS + - MacCatalyst isOfficialBuild: ${{ variables.isOfficialBuild }} extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml extraStepsParameters: diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 1c61a269ade55f..e9cbb3f7db6ad1 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -208,6 +208,7 @@ jobs: - Browser_wasm - tvOS_arm64 - iOS_arm64 + - MacCatalyst_x64 jobParameters: condition: >- or( @@ -561,11 +562,13 @@ jobs: - mono_browser_offsets - mono_tvos_offsets - mono_ios_offsets + - mono_maccatalyst_offsets monoCrossAOTTargetOS: - Android - Browser - tvOS - iOS + - MacCatalyst condition: >- or( eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true), diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/monocrossaot.sfxproj b/src/installer/pkg/sfx/Microsoft.NETCore.App/monocrossaot.sfxproj index efc97f22e8374a..05aae6167007c6 100644 --- a/src/installer/pkg/sfx/Microsoft.NETCore.App/monocrossaot.sfxproj +++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/monocrossaot.sfxproj @@ -6,6 +6,7 @@ $(MonoAotTargets);browser-wasm $(MonoAotTargets);tvossimulator-x64;tvossimulator-arm64;tvos-arm64 $(MonoAotTargets);iossimulator-x64;iossimulator-arm64;iossimulator-x86;ios-arm64;ios-arm + $(MonoAotTargets);maccatalyst-x64;maccatalyst-arm64 diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt index d9efdcf81a605f..44e9ff6ffd7706 100644 --- a/src/mono/CMakeLists.txt +++ b/src/mono/CMakeLists.txt @@ -149,6 +149,14 @@ if(NOT AOT_TARGET_TRIPLE STREQUAL "") elseif(AOT_TARGET_TRIPLE STREQUAL "arm-apple-darwin10") set(TARGET_SYSTEM_NAME "iOS") set(TARGET_ARCH "arm") + elseif(AOT_TARGET_TRIPLE STREQUAL "x86_64-apple-maccatalyst") + set(TARGET_SYSTEM_NAME "Darwin") + set(TARGET_ARCH "x86_64") + set(CMAKE_SYSTEM_VARIANT "MacCatalyst") + elseif(AOT_TARGET_TRIPLE STREQUAL "aarch64-apple-maccatalyst") + set(TARGET_SYSTEM_NAME "Darwin") + set(TARGET_ARCH "arm64") + set(CMAKE_SYSTEM_VARIANT "MacCatalyst") elseif(AOT_TARGET_TRIPLE STREQUAL "wasm32-unknown-none") set(TARGET_SYSTEM_NAME "Emscripten") set(TARGET_ARCH "wasm") diff --git a/src/mono/mono.proj b/src/mono/mono.proj index d0681b4fff575a..e0d8412e4c8bc0 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -50,6 +50,7 @@ true true true + true true true $([MSBuild]::NormalizeDirectory('$(MonoObjDir)', 'cross')) @@ -491,7 +492,26 @@ i386-apple-darwin10 x86_64-apple-darwin10 - + + true + $(XcodeDir)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk + $(MonoObjCrossDir)offsets-$(Platform)-darwin.h + aarch64-apple-maccatalyst + x86_64-apple-maccatalyst + + + + <_MonoAOTCPPFLAGS Include="-Wno-overriding-t-option" /> + <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-target arm64-apple-ios14.2-macabi" /> + <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'x64'" Include="-target x86_64-apple-ios13.5-macabi" /> + <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> + <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-target arm64-apple-ios14.2-macabi" /> + <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'x64'" Include="-target x86_64-apple-ios13.5-macabi" /> + <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> + + <_MonoBuildEnv Condition="'$(BuildArchitecture)' == 'arm64'" Include="arch -arch arm64" /> + + diff --git a/src/mono/mono/tools/offsets-tool/offsets-tool.py b/src/mono/mono/tools/offsets-tool/offsets-tool.py index a4e191292354b7..d41069df784be3 100644 --- a/src/mono/mono/tools/offsets-tool/offsets-tool.py +++ b/src/mono/mono/tools/offsets-tool/offsets-tool.py @@ -155,6 +155,19 @@ def require_emscipten_path (args): self.target_args += ["-arch", "x86_64"] self.target_args += ["-isysroot", args.sysroot] + # MacCatalyst + elif "x86_64-apple-maccatalyst" == args.abi: + require_sysroot (args) + self.target = Target ("TARGET_AMD64", "TARGET_MACCAT", IOS_DEFINES) + self.target_args += ["-target", "x86_64-apple-ios13.5-macabi"] + self.target_args += ["-isysroot", args.sysroot] + + elif "aarch64-apple-maccatalyst" == args.abi: + require_sysroot (args) + self.target = Target ("TARGET_ARM64", "TARGET_MACCAT", IOS_DEFINES) + self.target_args += ["-target", "arm64-apple-ios14.2-macabi"] + self.target_args += ["-isysroot", args.sysroot] + # watchOS elif "armv7k-apple-darwin" == args.abi: require_sysroot (args) diff --git a/src/mono/monoaotcross.proj b/src/mono/monoaotcross.proj index 225b0060f0567f..004bc86888cf97 100644 --- a/src/mono/monoaotcross.proj +++ b/src/mono/monoaotcross.proj @@ -11,10 +11,12 @@ <_MonoCrossAOTTargetOS Condition="$(_MonoGenerateOffsetsOSGroups.contains('+browser+'))">$(_MonoCrossAOTTargetOS)+browser+ <_MonoCrossAOTTargetOS Condition="$(_MonoGenerateOffsetsOSGroups.contains('+tvos+'))">$(_MonoCrossAOTTargetOS)+tvos+ <_MonoCrossAOTTargetOS Condition="$(_MonoGenerateOffsetsOSGroups.contains('+ios+'))">$(_MonoCrossAOTTargetOS)+ios+ + <_MonoCrossAOTTargetOS Condition="$(_MonoGenerateOffsetsOSGroups.contains('+maccatalyst+'))">$(_MonoCrossAOTTargetOS)+maccatalyst+ $(MonoAotTargets);Android-x64;Android-arm64;Android-x86;Android-arm $(MonoAotTargets);Browser-wasm $(MonoAotTargets);tvOSSimulator-x64;tvOSSimulator-arm64;tvOS-arm64 $(MonoAotTargets);iOSSimulator-x64;iOSSimulator-arm64;iOSSimulator-x86;iOS-arm64;iOS-arm + $(MonoAotTargets);MacCatalyst-x64;MacCatalyst-arm64 From 5ed6b341e7190ce800802d7f3def5d2d1fec55dc Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Fri, 14 May 2021 15:57:28 -0400 Subject: [PATCH 2/3] Fix for MONO_ALIGN_foo vs MONO_ALIGN_value_foo issue --- src/mono/cmake/config.h.in | 3 +++ src/mono/mono.proj | 12 ------------ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/mono/cmake/config.h.in b/src/mono/cmake/config.h.in index 3062415827e9d0..4fe9f54caf7d10 100644 --- a/src/mono/cmake/config.h.in +++ b/src/mono/cmake/config.h.in @@ -893,6 +893,9 @@ /* The JIT/AOT targets tvOS */ #cmakedefine TARGET_TVOS 1 +/* The JIT/AOT targets Mac Catalyst */ +#cmakedefine TARGET_MACCAT 1 + /* The JIT/AOT targets OSX */ #cmakedefine TARGET_OSX 1 diff --git a/src/mono/mono.proj b/src/mono/mono.proj index e0d8412e4c8bc0..f5a26eadecb357 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -499,18 +499,6 @@ aarch64-apple-maccatalyst x86_64-apple-maccatalyst - - - <_MonoAOTCPPFLAGS Include="-Wno-overriding-t-option" /> - <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-target arm64-apple-ios14.2-macabi" /> - <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'x64'" Include="-target x86_64-apple-ios13.5-macabi" /> - <_MonoAOTCFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> - <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-target arm64-apple-ios14.2-macabi" /> - <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'x64'" Include="-target x86_64-apple-ios13.5-macabi" /> - <_MonoAOTCXXFLAGS Condition="'$(TargetArchitecture)' == 'arm64'" Include="-arch arm64" /> - - <_MonoBuildEnv Condition="'$(BuildArchitecture)' == 'arm64'" Include="arch -arch arm64" /> - From dabd8cc51d1561e5128484b60b9a9947cdbfd0d8 Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Fri, 14 May 2021 16:16:07 -0400 Subject: [PATCH 3/3] Do LLVM dance on Catalyst --- eng/Subsets.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Subsets.props b/eng/Subsets.props index f53c5f411dd1f1..22f1f6bb1f477f 100644 --- a/eng/Subsets.props +++ b/eng/Subsets.props @@ -222,7 +222,7 @@ - +