Skip to content

Commit eda6bba

Browse files
committed
Fixed build configs and invoke for windows arm64
1 parent dcf137e commit eda6bba

7 files changed

Lines changed: 90 additions & 49 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ set (CMAKE_C_STANDARD 99)
3030
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]",
3131
# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]"
3232
if (NOT DEFINED WAMR_BUILD_TARGET)
33-
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
33+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64|ARM64|AARCH64)")
3434
set (WAMR_BUILD_TARGET "AARCH64")
3535
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
3636
set (WAMR_BUILD_TARGET "RISCV64")

build-scripts/runtime_lib.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,11 @@ file (GLOB header
188188
LIST (APPEND RUNTIME_LIB_HEADER_LIST ${header})
189189

190190
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
191-
enable_language (ASM_MASM)
191+
if(WAMR_BUILD_TARGET STREQUAL "AARCH64")
192+
enable_language (ASM_MARMASM)
193+
else()
194+
enable_language (ASM_MASM)
195+
endif()
192196
else()
193197
enable_language (ASM)
194198
endif()

build-scripts/warnings.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# global additional warnings.
55
if (MSVC)
66
# warning level 4
7-
add_compile_options(/W4)
7+
add_compile_options($<$<COMPILE_LANGUAGE:C>:/W4>)
88
else ()
99
# refer to https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
1010
add_compile_options(

core/iwasm/common/arch/invokeNative_armasm64.asm

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,15 @@ invokeNative
5353
mov x21, x2 ; x21 = nstacks
5454
mov x22, sp ; save the sp before call function
5555

56-
; Fill in floating-point registers
56+
; Fill in floating-point registers (Windows ARM64)
5757
ldp d0, d1, [x20], #16
5858
ldp d2, d3, [x20], #16
59-
ldp d4, d5, [x20], #16
60-
ldp d6, d7, [x20], #16
6159

6260
; Fill integer registers
63-
ldp x0, x1, [x20], #16 ; x0 = argv[8] = exec_env, x1 = argv[9]
64-
ldp x2, x3, [x20], #16
65-
ldp x4, x5, [x20], #16
66-
ldp x6, x7, [x20], #16
61+
ldp x0, x1, [x20], #16 ; x0 = exec_env, x1 = argv[1]
62+
ldp x2, x3, [x20], #16 ; x2 = argv[2], x3 = argv[3]
63+
ldp x4, x5, [x20], #16 ; x4 = argv[4], x5 = argv[5]
64+
ldp x6, x7, [x20], #16 ; x6 = argv[6], x7 = argv[7]
6765

6866
; Now x20 points to stack args
6967
cmp x21, #0

core/iwasm/common/iwasm_common.cmake

Lines changed: 70 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
55

66
include_directories (${IWASM_COMMON_DIR})
7-
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*")
8-
if (DEFINED ENV{VCToolsInstallDir})
7+
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*" AND NOT WAMR_BUILD_WAMR_COMPILER)
8+
if (CMAKE_ASM_MARMASM_COMPILER)
9+
# Use the already detected assembler
10+
set(_ARMASM64_EXE "${CMAKE_ASM_MARMASM_COMPILER}")
11+
elseif (DEFINED ENV{VCToolsInstallDir} OR VCToolsInstallDir)
12+
if (NOT VCToolsInstallDir)
13+
set(VCToolsInstallDir "$ENV{VCToolsInstallDir}")
14+
endif()
915
# Detect host tool dir
1016
set(_ARMASM64_CANDIDATES
11-
"$ENV{VCToolsInstallDir}/bin/HostX64/ARM64/armasm64.exe"
12-
"$ENV{VCToolsInstallDir}/bin/HostARM64/arm64/armasm64.exe")
17+
"${VCToolsInstallDir}bin/Hostx64/arm64/armasm64.exe"
18+
"${VCToolsInstallDir}bin/Hostarm64/arm64/armasm64.exe")
1319
set(_ARMASM64_EXE "")
1420
foreach(_p IN LISTS _ARMASM64_CANDIDATES)
1521
if (EXISTS "${_p}")
@@ -18,27 +24,42 @@ if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHE
1824
endif()
1925
endforeach()
2026
if (_ARMASM64_EXE STREQUAL "")
21-
message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir")
27+
message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir: ${VCToolsInstallDir}")
2228
endif()
29+
else()
30+
message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
31+
endif()
2332

24-
# Wrapper without spaces to avoid quoting hell on NMake/cmd.exe
25-
set(_WRAP "${CMAKE_BINARY_DIR}/armasm64_wrapper.bat")
26-
file(WRITE "${_WRAP}"
27-
"@echo off\r\n\"${_ARMASM64_EXE}\" %*\r\n")
33+
# Wrapper without spaces to avoid quoting hell on NMake/cmd.exe
34+
set(_WRAP "${CMAKE_BINARY_DIR}/armasm64_wrapper.bat")
35+
file(WRITE "${_WRAP}"
36+
"@echo off\r\n"
37+
"setlocal enabledelayedexpansion\r\n"
38+
"set ARGS=\r\n"
39+
"for %%A in (%*) do (\r\n"
40+
" if /I not \"%%~A\"==\"/experimental:c11atomics\" (\r\n"
41+
" set ARGS=!ARGS! %%A\r\n"
42+
" )\r\n"
43+
")\r\n"
44+
"\"${_ARMASM64_EXE}\" !ARGS!\r\n")
2845

29-
# Use wrapper as compiler (no spaces in path)
30-
set(CMAKE_ASM_MASM_COMPILER
31-
"${_WRAP}"
32-
CACHE FILEPATH "" FORCE)
46+
# Use wrapper as compiler (no spaces in path)
47+
set(CMAKE_ASM_MASM_COMPILER
48+
"${_WRAP}"
49+
CACHE FILEPATH "" FORCE)
3350

34-
# Quote ONLY object and source (compiler path has no spaces now)
35-
set(CMAKE_ASM_MASM_COMPILE_OBJECT
36-
"<CMAKE_ASM_MASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
37-
CACHE STRING "" FORCE)
51+
set(CMAKE_ASM_MARMASM_COMPILER
52+
"${_WRAP}"
53+
CACHE FILEPATH "" FORCE)
3854

39-
else()
40-
message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
41-
endif()
55+
# Quote ONLY object and source (compiler path has no spaces now)
56+
set(CMAKE_ASM_MASM_COMPILE_OBJECT
57+
"<CMAKE_ASM_MASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
58+
CACHE STRING "" FORCE)
59+
60+
set(CMAKE_ASM_MARMASM_COMPILE_OBJECT
61+
"<CMAKE_ASM_MARMASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
62+
CACHE STRING "" FORCE)
4263
endif()
4364

4465
add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
@@ -61,7 +82,7 @@ if (CMAKE_OSX_ARCHITECTURES)
6182
endif()
6283
endif()
6384

64-
if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1)
85+
if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1 AND NOT (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*"))
6586
# Use invokeNative C version instead of asm code version
6687
# if WAMR_BUILD_INVOKE_NATIVE_GENERAL is explicitly set.
6788
# Note:
@@ -117,31 +138,43 @@ elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
117138
if (NOT WAMR_BUILD_SIMD EQUAL 1)
118139
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
119140
if (MSVC)
120-
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
121-
set(_WAMR_ARM64_MASM_SOURCES ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
122-
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES}
123-
PROPERTIES
124-
LANGUAGE ASM_MASM
125-
COMPILE_DEFINITIONS ""
126-
INCLUDE_DIRECTORIES ""
127-
COMPILE_OPTIONS "/nologo"
141+
set(_WAMR_ARM64_MASM_SOURCE ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
142+
set(_WAMR_ARM64_MASM_OBJ ${CMAKE_CURRENT_BINARY_DIR}/invokeNative_armasm64.obj)
143+
add_custom_command(
144+
OUTPUT ${_WAMR_ARM64_MASM_OBJ}
145+
COMMAND ${CMAKE_ASM_MASM_COMPILER} /nologo -o "${_WAMR_ARM64_MASM_OBJ}" "${_WAMR_ARM64_MASM_SOURCE}"
146+
DEPENDS ${_WAMR_ARM64_MASM_SOURCE}
147+
COMMENT "Assembling invokeNative_armasm64.asm"
148+
VERBATIM
149+
)
150+
set_source_files_properties(${_WAMR_ARM64_MASM_OBJ}
151+
PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE
128152
)
153+
set (source_all ${c_source_all} ${_WAMR_ARM64_MASM_OBJ})
154+
else ()
155+
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
129156
endif ()
130157
else ()
131158
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
132159
endif ()
133160
else()
134161
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
135162
if (MSVC)
136-
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
137-
set(_WAMR_ARM64_MASM_SOURCES_SIMD ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
138-
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES_SIMD}
139-
PROPERTIES
140-
LANGUAGE ASM_MASM
141-
COMPILE_DEFINITIONS ""
142-
INCLUDE_DIRECTORIES ""
143-
COMPILE_OPTIONS "/nologo"
163+
set(_WAMR_ARM64_MASM_SIMD_SOURCE ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
164+
set(_WAMR_ARM64_MASM_SIMD_OBJ ${CMAKE_CURRENT_BINARY_DIR}/invokeNative_armasm64_simd.obj)
165+
add_custom_command(
166+
OUTPUT ${_WAMR_ARM64_MASM_SIMD_OBJ}
167+
COMMAND ${CMAKE_ASM_MASM_COMPILER} /nologo -o "${_WAMR_ARM64_MASM_SIMD_OBJ}" "${_WAMR_ARM64_MASM_SIMD_SOURCE}"
168+
DEPENDS ${_WAMR_ARM64_MASM_SIMD_SOURCE}
169+
COMMENT "Assembling invokeNative_armasm64_simd.asm"
170+
VERBATIM
171+
)
172+
set_source_files_properties(${_WAMR_ARM64_MASM_SIMD_OBJ}
173+
PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE
144174
)
175+
set (source_all ${c_source_all} ${_WAMR_ARM64_MASM_SIMD_OBJ})
176+
else ()
177+
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
145178
endif ()
146179
else ()
147180
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)

product-mini/platforms/windows/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ set(CMAKE_CXX_STANDARD 17)
1919
# Set WAMR_BUILD_TARGET, currently values supported:
2020
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", "MIPS", "XTENSA"
2121
if (NOT DEFINED WAMR_BUILD_TARGET)
22-
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
22+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64|ARM64|AARCH64)")
23+
set (WAMR_BUILD_TARGET "AARCH64")
24+
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
2325
# Build as X86_64 by default in 64-bit platform
2426
set (WAMR_BUILD_TARGET "X86_64")
2527
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)

wamr-compiler/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ if (NOT WAMR_BUILD_PLATFORM STREQUAL "windows")
1717
project (aot-compiler)
1818
else()
1919
project (aot-compiler C ASM CXX)
20-
enable_language (ASM_MASM)
20+
if (WAMR_BUILD_TARGET STREQUAL "AARCH64")
21+
enable_language (ASM_MARMASM)
22+
else()
23+
enable_language (ASM_MASM)
24+
endif()
2125
add_definitions(-DCOMPILING_WASM_RUNTIME_API=1)
2226
endif()
2327

0 commit comments

Comments
 (0)