Add arm64 wasm support (#83677)
authorEvgeny Karpov <eukarpov@gmail.com>
Thu, 27 Apr 2023 00:45:00 +0000 (02:45 +0200)
committerGitHub <noreply@github.com>
Thu, 27 Apr 2023 00:45:00 +0000 (20:45 -0400)
eng/native/init-vs-env.cmd
src/mono/CMakeLists.txt
src/mono/mono.proj
src/mono/mono/metadata/coree.c
src/mono/mono/mini/mini-windows.c
src/mono/mono/utils/mono-threads-coop.c

index 68242ed..6c1ad8f 100644 (file)
@@ -8,7 +8,7 @@ if /i "%~1" == "x86"   (set __VCBuildArch=x86)
 if /i "%~1" == "x64"   (set __VCBuildArch=x86_amd64)
 if /i "%~1" == "arm"   (set __VCBuildArch=x86_arm)
 if /i "%~1" == "arm64" (set __VCBuildArch=x86_arm64)
-if /i "%~1" == "wasm"  (set __VCBuildArch=x86_amd64)
+if /i "%~1" == "wasm" (if /i "%PROCESSOR_ARCHITECTURE%" == "ARM64" (set __VCBuildArch=x86_arm64) else (set __VCBuildArch=x86_amd64))
 
 :: Default to highest Visual Studio version available that has Visual C++ tools.
 ::
index 77b4d14..92a0ac8 100644 (file)
@@ -41,9 +41,11 @@ set(CMAKE_MODULE_PATH
   )
 set(CMAKE_INSTALL_MESSAGE LAZY)
 
-find_program(CCACHE_PROGRAM ccache)
-if(CCACHE_PROGRAM)
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
+if(USE_CCACHE)
+  find_program(CCACHE_PROGRAM ccache)
+  if(CCACHE_PROGRAM)
+    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
+  endif()
 endif()
 
 function(append value)
index 802958d..8765984 100644 (file)
       <MonoLibClang Condition="$([MSBuild]::IsOSPlatform('OSX'))">$(MonoLLVMDir)/$(BuildArchitecture)/lib/libclang.dylib</MonoLibClang>
       <MonoLibClang Condition="$([MSBuild]::IsOSPlatform('Linux'))">$(MonoLLVMDir)/$(BuildArchitecture)/lib/libclang.so</MonoLibClang>
       <MonoLibClang Condition="$([MSBuild]::IsOSPlatform('Windows'))">$([MSBuild]::NormalizePath('$(MonoLLVMDir)', '$(BuildArchitecture)', 'bin', 'libclang.dll'))</MonoLibClang>
-      <PythonCmd Condition="'$(HostOS)' == 'windows'and '$(TargetsBrowser)' == 'true'">setlocal EnableDelayedExpansion &amp;&amp; call &quot;$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.bat'))&quot; &amp;&amp; !EMSDK_PYTHON!</PythonCmd>
       <_ForceRelease Condition="$([MSBuild]::IsOSPlatform('Windows')) and '$(TargetArchitecture)' == 'wasm' and '$(Configuration)' == 'Debug'">true</_ForceRelease>
     </PropertyGroup>
 
index 2efdfd2..37c94da 100644 (file)
@@ -646,7 +646,7 @@ STDAPI MonoFixupCorEE(HMODULE ModuleHandle)
                        *(Trampoline)++ = 0xFF;
                        *(Trampoline)++ = 0xE3;
 #else
-#error Unsupported architecture.
+                       g_assert_not_reached();
 #endif
 #else
                        ProcRva = (DWORD)(ExportFixup->ProcAddress.DWordPtr - (DWORD_PTR)DosHeader);
index c678f4c..f5d81c5 100644 (file)
@@ -283,7 +283,9 @@ thread_timer_expired (HANDLE thread)
        if (GetThreadContext (thread, &context)) {
                guchar *ip;
 
-#ifdef _WIN64
+#ifdef _ARM64_
+               ip = (guchar *) context.Pc;
+#elif _WIN64
                ip = (guchar *) context.Rip;
 #else
                ip = (guchar *) context.Eip;
index 4ed659d..b6263bd 100644 (file)
@@ -219,6 +219,7 @@ typedef struct {
 __declspec(naked) void __cdecl
 copy_stack_data_internal_win32_wrapper (MonoThreadInfo *info, MonoStackData *stackdata_begin, MonoBuiltinUnwindInfo *unwind_info_data, CopyStackDataFunc func)
 {
+#if defined(TARGET_X86) || defined(TARGET_AMD64)
        __asm {
                mov edx, dword ptr [esp + 0Ch]
                mov dword ptr [edx + 00h], ebx
@@ -230,6 +231,7 @@ copy_stack_data_internal_win32_wrapper (MonoThreadInfo *info, MonoStackData *sta
                mov edx, dword ptr [esp + 10h]
                jmp edx
        };
+#endif
 }
 #endif