diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index 21b43cacf23ac..6029fb95f8d53 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -452,6 +452,7 @@ extends: runtimeFlavor: mono buildConfig: release platforms: + - windows_arm64 - windows_x64 jobParameters: buildArgs: -s mono+packs -c $(_BuildConfig) @@ -633,6 +634,7 @@ extends: - Build_tvos_arm64_release_Mono - Build_tvossimulator_arm64_release_Mono - Build_tvossimulator_x64_release_Mono + - Build_windows_arm64_release_CrossAOT_Mono - Build_windows_x64_release_CrossAOT_Mono - Build_windows_x64_release_CoreCLR - Build_windows_x86_release_CoreCLR diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 89bb17eed4ae7..82e221e429e29 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -924,9 +924,8 @@ extends: - linux_musl_x64 - linux_arm64 - linux_musl_arm64 + - windows_arm64 - windows_x64 - # - windows_x86 - # - windows_arm64 jobParameters: runtimeVariant: crossaot dependsOn: diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt index 62220db825721..4bf280134c0d6 100644 --- a/src/mono/CMakeLists.txt +++ b/src/mono/CMakeLists.txt @@ -280,6 +280,7 @@ elseif(CLR_CMAKE_HOST_OS STREQUAL "windows") set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") # statically link VC runtime library add_compile_options(/W4) # set warning level 4 add_compile_options($<$:/WX>) # treat warnings as errors + add_compile_options($<$:/wd4324>) # 'struct_name' : structure was padded due to __declspec(align()) add_compile_options(/EHsc) # set exception handling behavior add_compile_options(/FC) # use full pathnames in diagnostics add_link_options(/STACK:0x800000) # set stack size to 8MB (default is 1MB) diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 4b217174fca76..78ea1292e48e2 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -360,6 +360,7 @@ <_MonoCPPFLAGS Include="-DWIN32_LEAN_AND_MEAN" /> <_MonoCPPFLAGS Condition="'$(Platform)' == 'x64' or '$(Platform)' == 'arm64'" Include="-DWIN64" /> + <_MonoCPPFLAGS Condition="'$(Platform)' == 'arm64'" Include="-DUSE_SOFT_INTRINSICS" /> <_MonoCPPFLAGS Condition="'$(Configuration)' == 'Release'" Include="-DNDEBUG" /> <_MonoCPPFLAGS Condition="'$(Configuration)' == 'Debug'" Include="-D_DEBUG" /> @@ -749,6 +750,7 @@ <_MonoAOTCPPFLAGS Include="-DWIN32_LEAN_AND_MEAN" /> <_MonoAOTCPPFLAGS Condition="'$(Platform)' == 'x64' or '$(Platform)' == 'arm64'" Include="-DWIN64" /> + <_MonoAOTCPPFLAGS Condition="'$(AotHostArchitecture)' == 'arm64'" Include="-DUSE_SOFT_INTRINSICS" /> <_MonoAOTCPPFLAGS Condition="'$(Configuration)' == 'Release' or '$(_ForceRelease)' == 'true'" Include="-DNDEBUG" /> <_MonoAOTCPPFLAGS Condition="'$(Configuration)' == 'Debug' and '$(_ForceRelease)' != 'true'" Include="-D_DEBUG" /> diff --git a/src/mono/mono/mini/exceptions-amd64.c b/src/mono/mono/mini/exceptions-amd64.c index 0a0121a76a7dc..20ba681ab5265 100644 --- a/src/mono/mono/mini/exceptions-amd64.c +++ b/src/mono/mono/mini/exceptions-amd64.c @@ -838,7 +838,11 @@ mono_arch_ip_from_context (void *sigctx) #if defined(MONO_ARCH_USE_SIGACTION) return (gpointer)UCONTEXT_REG_RIP ((ucontext_t*)sigctx); #elif defined(HOST_WIN32) +#if defined(MONO_CROSS_COMPILE) + return (gpointer)NULL; +#else return (gpointer)(((CONTEXT*)sigctx)->Rip); +#endif #else MonoContext *ctx = (MonoContext*)sigctx; return (gpointer)ctx->gregs [AMD64_RIP]; diff --git a/src/mono/mono/utils/mach-support-arm64.c b/src/mono/mono/utils/mach-support-arm64.c index 97391f9bdb525..6ddd5a8911dab 100644 --- a/src/mono/mono/utils/mach-support-arm64.c +++ b/src/mono/mono/utils/mach-support-arm64.c @@ -128,4 +128,10 @@ mono_mach_arch_set_thread_states (thread_port_t thread, thread_state_t state, ma #endif } +#else + +#include + +MONO_EMPTY_SOURCE_FILE (mach_support_arm64); + #endif diff --git a/src/mono/mono/utils/mono-context.h b/src/mono/mono/utils/mono-context.h index 0e5117c0b9ef0..686ec7c038ff4 100644 --- a/src/mono/mono/utils/mono-context.h +++ b/src/mono/mono/utils/mono-context.h @@ -56,6 +56,7 @@ typedef __uint128_t MonoContextSimdReg; #elif defined(HOST_WIN32) #define MONO_HAVE_SIMD_REG //#define MONO_HAVE_SIMD_REG_AVX +#include #include typedef __m128d MonoContextSimdReg; #elif defined(HOST_ANDROID) @@ -77,6 +78,7 @@ typedef __uint128_t MonoContextSimdReg; a stand-in. This is not expected to work for Windows ARM64 native builds. */ #if defined(HOST_WIN32) #define MONO_HAVE_SIMD_REG +#include #include typedef __m128d MonoContextSimdReg; #else @@ -507,7 +509,7 @@ typedef struct { #define MONO_ARCH_HAS_MONO_CONTEXT 1 -#elif (defined(__aarch64__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_ARM64)) +#elif ((defined(_M_ARM64) || defined(__aarch64__)) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_ARM64)) #include diff --git a/src/mono/mono/utils/mono-threads-coop.c b/src/mono/mono/utils/mono-threads-coop.c index 4f3ea537cdd60..f96285876b30f 100644 --- a/src/mono/mono/utils/mono-threads-coop.c +++ b/src/mono/mono/utils/mono-threads-coop.c @@ -198,7 +198,8 @@ copy_stack_data_internal (MonoThreadInfo *info, MonoStackData *stackdata_begin, #ifdef _MSC_VER typedef void (*CopyStackDataFunc)(MonoThreadInfo *, MonoStackData *, gconstpointer, gconstpointer); -#ifdef HOST_AMD64 +#if defined(HOST_AMD64) || defined(HOST_ARM64) +#include #include // Implementation of __builtin_unwind_init under MSVC, dumping nonvolatile registers into MonoBuiltinUnwindInfo. typedef struct { @@ -206,9 +207,11 @@ typedef struct { host_mgreg_t gregs [8]; } MonoBuiltinUnwindInfo; +#if defined(HOST_AMD64) // Defined in win64.asm G_EXTERN_C void copy_stack_data_internal_win32_wrapper (MonoThreadInfo *, MonoStackData *, MonoBuiltinUnwindInfo *, CopyStackDataFunc); +#endif #else // Implementation of __builtin_unwind_init under MSVC, dumping nonvolatile registers into MonoBuiltinUnwindInfo. typedef struct { @@ -238,8 +241,10 @@ copy_stack_data_internal_win32_wrapper (MonoThreadInfo *info, MonoStackData *sta static void copy_stack_data (MonoThreadInfo *info, MonoStackData *stackdata_begin) { +#if defined(HOST_AMD64) MonoBuiltinUnwindInfo unwind_info_data; copy_stack_data_internal_win32_wrapper (info, stackdata_begin, &unwind_info_data, copy_stack_data_internal); +#endif } #else static void diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.json.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.json.in index 25ac8ef1c8e48..9dc1c0c92d29b 100644 --- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.json.in +++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.Current.Manifest/WorkloadManifest.json.in @@ -205,7 +205,7 @@ "version": "${PackageVersion}", "alias-to": { "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86", - "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x86", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-x86", "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x86", "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-x86", "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x86", @@ -217,7 +217,7 @@ "version": "${PackageVersion}", "alias-to": { "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64", - "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-x64", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-x64", "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-x64", "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-x64", "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-x64", @@ -229,7 +229,7 @@ "version": "${PackageVersion}", "alias-to": { "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm", - "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-arm", "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm", "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-arm", "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm", @@ -241,7 +241,7 @@ "version": "${PackageVersion}", "alias-to": { "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64", - "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.android-arm64", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.android-arm64", "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.android-arm64", "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.android-arm64", "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.android-arm64", @@ -365,7 +365,7 @@ "version": "${PackageVersion}", "alias-to": { "win-x64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm", - "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm", + "win-arm64": "Microsoft.NETCore.App.Runtime.AOT.win-arm64.Cross.browser-wasm", "linux-x64": "Microsoft.NETCore.App.Runtime.AOT.linux-x64.Cross.browser-wasm", "linux-arm64": "Microsoft.NETCore.App.Runtime.AOT.linux-arm64.Cross.browser-wasm", "osx-x64": "Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.browser-wasm",