@@ -6,23 +6,36 @@ set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
6
6
include_directories (${IWASM_COMMON_DIR} )
7
7
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*" )
8
8
if (DEFINED ENV{VCToolsInstallDir})
9
+ # Detect host tool dir
10
+ set (_ARMASM64_CANDIDATES
11
+ "$ENV{VCToolsInstallDir} /bin/HostX64/ARM64/armasm64.exe"
12
+ "$ENV{VCToolsInstallDir} /bin/HostARM64/arm64/armasm64.exe" )
13
+ set (_ARMASM64_EXE "" )
14
+ foreach (_p IN LISTS _ARMASM64_CANDIDATES)
15
+ if (EXISTS "${_p} " )
16
+ set (_ARMASM64_EXE "${_p} " )
17
+ break ()
18
+ endif ()
19
+ endforeach ()
20
+ if (_ARMASM64_EXE STREQUAL "" )
21
+ message (FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir" )
22
+ endif ()
23
+
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 " )
28
+
29
+ # Use wrapper as compiler (no spaces in path)
9
30
set (CMAKE_ASM_MASM_COMPILER
10
- "$ENV{VCToolsInstallDir} /bin/HostARM64/arm64/armasm64.exe "
31
+ "${_WRAP} "
11
32
CACHE FILEPATH "" FORCE)
33
+
34
+ # Quote ONLY object and source (compiler path has no spaces now)
12
35
set (CMAKE_ASM_MASM_COMPILE_OBJECT
13
- "<CMAKE_ASM_MASM_COMPILER> /nologo -o <OBJECT> <SOURCE>"
36
+ "<CMAKE_ASM_MASM_COMPILER> /nologo -o \" <OBJECT>\" \" <SOURCE>\" "
14
37
CACHE STRING "" FORCE)
15
- set (_WAMR_ARM64_MASM_SOURCES
16
- ${IWASM_COMMON_DIR} /arch/invokeNative_armarm64.asm
17
- ${IWASM_COMMON_DIR} /arch/invokeNative_armarm64_simd.asm)
18
- foreach (_s IN LISTS _WAMR_ARM64_MASM_SOURCES)
19
- if (EXISTS "${_s} " )
20
- set_source_files_properties ("${_s} " PROPERTIES
21
- LANGUAGE ASM_MASM
22
- COMPILE_OPTIONS "/nologo"
23
- )
24
- endif ()
25
- endforeach ()
38
+
26
39
else ()
27
40
message (FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually." )
28
41
endif ()
0 commit comments