Open calvin2021y opened 1 month ago
https://github.com/mstorsjo/llvm-mingw is great to cross build windows app.
diff --git a/core/shared/platform/windows/shared_platform.cmake b/core/shared/platform/windows/shared_platform.cmake
index 502a8a2e..0b402a06 100644
--- a/core/shared/platform/windows/shared_platform.cmake
+++ b/core/shared/platform/windows/shared_platform.cmake
@@ -3,7 +3,10 @@
set (PLATFORM_SHARED_DIR ${CMAKE_CURRENT_LIST_DIR})
-add_definitions(-DBH_PLATFORM_WINDOWS)
+if(NOT MINGW)
+ add_definitions(-DBH_PLATFORM_WINDOWS)
+endif()
+
add_definitions(-DHAVE_STRUCT_TIMESPEC)
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
diff --git a/core/shared/platform/windows/platform_internal.h b/core/shared/platform/windows/platform_internal.h
index 8bb77e7c..564f6931 100644
--- a/core/shared/platform/windows/platform_internal.h
+++ b/core/shared/platform/windows/platform_internal.h
@@ -39,8 +39,10 @@ extern "C" {
#endif
#ifndef BH_PLATFORM_WINDOWS
+#if defined(_MSC_VER)
#define BH_PLATFORM_WINDOWS
#endif
+#endif
#ifdef _MSC_VER
#ifndef PATH_MAX
@@ -92,7 +94,13 @@ os_mem_commit(void *ptr, size_t size, int flags);
void
os_mem_decommit(void *ptr, size_t size);
-#define os_thread_local_attribute __declspec(thread)
+#if defined(__clang__) || defined(__GNUC__)
+ #define os_thread_local_attribute __thread
+#elif defined(_MSC_VER)
+ #define os_thread_local_attribute __declspec(thread)
+#else
+ #error "Unknown compiler, unable to define os_thread_local_attribute"
+#endif
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
@@ -174,7 +182,7 @@ typedef windows_dir_stream *os_dir_stream;
#if WASM_ENABLE_UVWASI != 1
typedef HANDLE os_raw_file_handle;
#else
-typedef uint32_t os_raw_file_handle;
+typedef int32_t os_raw_file_handle;
#endif
#define bh_socket_t windows_handle *
with this patch and some adjust I am able to build.
without AOT it work as expect, with AOT it crashed.
=================================================================
==10248==ERROR: AddressSanitizer: access-violation on unknown address 0x126a940b0004 (pc 0x7ffee8ad46f8 bp 0x00e9ec1ab550 sp 0x00e9ec1ab4c8 T0)
==10248==The signal is caused by a WRITE memory access.
#0 0x7ffee8ad46f7 in memset+0x77 (C:\Windows\SYSTEM32\ntdll.dll+0x1800a46f7)
#1 0x7ffe8ed92cc0 in _asan_memset+0x90 (C:\Users\admin\libclang_rt.asan_dynamic-x86_64.dll+0x180042cc0)
#2 0x7ff79b1a2df6 (C:\Users\admin\tests_wamr.exe+0x140212df6) gc_init_internal
#3 0x7ff79b1a398d (C:\Users\admin\tests_wamr.exe+0x14021398d) gc_init_with_struct_and_pool
#4 0x7ff79b12718c (C:\Users\admin\tests_wamr.exe+0x14019718c) mem_allocator_create_with_struct_and_pool
#5 0x7ff79b0c6d6b (C:\Users\admin\tests_wamr.exe+0x140136d6b) memory_instantiate
#6 0x7ff79b0bc7ec (C:\Users\admin\tests_wamr.exe+0x14012c7ec) memories_instantiate
#7 0x7ff79b0b9a3c (C:\Users\admin\tests_wamr.exe+0x140129a3c) aot_instantiate
#8 0x7ff79b008b21 (C:\Users\admin\tests_wamr.exe+0x140078b21) wasm_runtime_instantiate_internal
#9 0x7ff79b008bb3 (C:\Users\admin\tests_wamr.exe+0x140078bb3) wasm_runtime_instantiate
#10 0x7ff79afea2b7 (C:\Users\admin\tests_wamr.exe+0x14005a2b7)
#11 0x7ff79af91310 (C:\Users\admin\tests_wamr.exe+0x140001310)
#12 0x7ff79af91365 (C:\Users\admin\tests_wamr.exe+0x140001365)
#13 0x7ffee8237373 in BaseThreadInitThunk+0x13 (C:\Windows\System32\KERNEL32.DLL+0x180017373)
#14 0x7ffee8a7cc90 in RtlUserThreadStart+0x20 (C:\Windows\SYSTEM32\ntdll.dll+0x18004cc90)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: access-violation (C:\Windows\SYSTEM32\ntdll.dll+0x1800a46f7) in memset+0x77
==10248==ABORTING
windows clang use setjmp like posix, the current implement only work for msvc.
I guess for mingw , BH_PLATFORM_WINDOWS also should be disabled.