mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2026-04-18 18:18:44 +00:00
Merge eda6bba505 into 4b306f0fc3
This commit is contained in:
commit
36990eb2c1
|
|
@ -30,7 +30,7 @@ set (CMAKE_C_STANDARD 99)
|
||||||
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]",
|
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]",
|
||||||
# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]"
|
# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]"
|
||||||
if (NOT DEFINED WAMR_BUILD_TARGET)
|
if (NOT DEFINED WAMR_BUILD_TARGET)
|
||||||
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
|
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64|ARM64|AARCH64)")
|
||||||
set (WAMR_BUILD_TARGET "AARCH64")
|
set (WAMR_BUILD_TARGET "AARCH64")
|
||||||
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
|
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
|
||||||
set (WAMR_BUILD_TARGET "RISCV64")
|
set (WAMR_BUILD_TARGET "RISCV64")
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,11 @@ file (GLOB header
|
||||||
LIST (APPEND RUNTIME_LIB_HEADER_LIST ${header})
|
LIST (APPEND RUNTIME_LIB_HEADER_LIST ${header})
|
||||||
|
|
||||||
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
||||||
enable_language (ASM_MASM)
|
if(WAMR_BUILD_TARGET STREQUAL "AARCH64")
|
||||||
|
enable_language (ASM_MARMASM)
|
||||||
|
else()
|
||||||
|
enable_language (ASM_MASM)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
enable_language (ASM)
|
enable_language (ASM)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
# global additional warnings.
|
# global additional warnings.
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
# warning level 4
|
# warning level 4
|
||||||
add_compile_options(/W4)
|
add_compile_options($<$<COMPILE_LANGUAGE:C>:/W4>)
|
||||||
else ()
|
else ()
|
||||||
# refer to https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
# refer to https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
|
|
|
||||||
|
|
@ -53,17 +53,15 @@ invokeNative
|
||||||
mov x21, x2 ; x21 = nstacks
|
mov x21, x2 ; x21 = nstacks
|
||||||
mov x22, sp ; save the sp before call function
|
mov x22, sp ; save the sp before call function
|
||||||
|
|
||||||
; Fill in floating-point registers
|
; Fill in floating-point registers (Windows ARM64)
|
||||||
ldp d0, d1, [x20], #16
|
ldp d0, d1, [x20], #16
|
||||||
ldp d2, d3, [x20], #16
|
ldp d2, d3, [x20], #16
|
||||||
ldp d4, d5, [x20], #16
|
|
||||||
ldp d6, d7, [x20], #16
|
|
||||||
|
|
||||||
; Fill integer registers
|
; Fill integer registers
|
||||||
ldp x0, x1, [x20], #16 ; x0 = argv[8] = exec_env, x1 = argv[9]
|
ldp x0, x1, [x20], #16 ; x0 = exec_env, x1 = argv[1]
|
||||||
ldp x2, x3, [x20], #16
|
ldp x2, x3, [x20], #16 ; x2 = argv[2], x3 = argv[3]
|
||||||
ldp x4, x5, [x20], #16
|
ldp x4, x5, [x20], #16 ; x4 = argv[4], x5 = argv[5]
|
||||||
ldp x6, x7, [x20], #16
|
ldp x6, x7, [x20], #16 ; x6 = argv[6], x7 = argv[7]
|
||||||
|
|
||||||
; Now x20 points to stack args
|
; Now x20 points to stack args
|
||||||
cmp x21, #0
|
cmp x21, #0
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,18 @@
|
||||||
set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
|
set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
include_directories (${IWASM_COMMON_DIR})
|
include_directories (${IWASM_COMMON_DIR})
|
||||||
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*")
|
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*" AND NOT WAMR_BUILD_WAMR_COMPILER)
|
||||||
if (DEFINED ENV{VCToolsInstallDir})
|
if (CMAKE_ASM_MARMASM_COMPILER)
|
||||||
|
# Use the already detected assembler
|
||||||
|
set(_ARMASM64_EXE "${CMAKE_ASM_MARMASM_COMPILER}")
|
||||||
|
elseif (DEFINED ENV{VCToolsInstallDir} OR VCToolsInstallDir)
|
||||||
|
if (NOT VCToolsInstallDir)
|
||||||
|
set(VCToolsInstallDir "$ENV{VCToolsInstallDir}")
|
||||||
|
endif()
|
||||||
# Detect host tool dir
|
# Detect host tool dir
|
||||||
set(_ARMASM64_CANDIDATES
|
set(_ARMASM64_CANDIDATES
|
||||||
"$ENV{VCToolsInstallDir}/bin/HostX64/ARM64/armasm64.exe"
|
"${VCToolsInstallDir}bin/Hostx64/arm64/armasm64.exe"
|
||||||
"$ENV{VCToolsInstallDir}/bin/HostARM64/arm64/armasm64.exe")
|
"${VCToolsInstallDir}bin/Hostarm64/arm64/armasm64.exe")
|
||||||
set(_ARMASM64_EXE "")
|
set(_ARMASM64_EXE "")
|
||||||
foreach(_p IN LISTS _ARMASM64_CANDIDATES)
|
foreach(_p IN LISTS _ARMASM64_CANDIDATES)
|
||||||
if (EXISTS "${_p}")
|
if (EXISTS "${_p}")
|
||||||
|
|
@ -18,27 +24,42 @@ if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHE
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
if (_ARMASM64_EXE STREQUAL "")
|
if (_ARMASM64_EXE STREQUAL "")
|
||||||
message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir")
|
message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir: ${VCToolsInstallDir}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Wrapper without spaces to avoid quoting hell on NMake/cmd.exe
|
|
||||||
set(_WRAP "${CMAKE_BINARY_DIR}/armasm64_wrapper.bat")
|
|
||||||
file(WRITE "${_WRAP}"
|
|
||||||
"@echo off\r\n\"${_ARMASM64_EXE}\" %*\r\n")
|
|
||||||
|
|
||||||
# Use wrapper as compiler (no spaces in path)
|
|
||||||
set(CMAKE_ASM_MASM_COMPILER
|
|
||||||
"${_WRAP}"
|
|
||||||
CACHE FILEPATH "" FORCE)
|
|
||||||
|
|
||||||
# Quote ONLY object and source (compiler path has no spaces now)
|
|
||||||
set(CMAKE_ASM_MASM_COMPILE_OBJECT
|
|
||||||
"<CMAKE_ASM_MASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
|
|
||||||
CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
|
message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Wrapper without spaces to avoid quoting hell on NMake/cmd.exe
|
||||||
|
set(_WRAP "${CMAKE_BINARY_DIR}/armasm64_wrapper.bat")
|
||||||
|
file(WRITE "${_WRAP}"
|
||||||
|
"@echo off\r\n"
|
||||||
|
"setlocal enabledelayedexpansion\r\n"
|
||||||
|
"set ARGS=\r\n"
|
||||||
|
"for %%A in (%*) do (\r\n"
|
||||||
|
" if /I not \"%%~A\"==\"/experimental:c11atomics\" (\r\n"
|
||||||
|
" set ARGS=!ARGS! %%A\r\n"
|
||||||
|
" )\r\n"
|
||||||
|
")\r\n"
|
||||||
|
"\"${_ARMASM64_EXE}\" !ARGS!\r\n")
|
||||||
|
|
||||||
|
# Use wrapper as compiler (no spaces in path)
|
||||||
|
set(CMAKE_ASM_MASM_COMPILER
|
||||||
|
"${_WRAP}"
|
||||||
|
CACHE FILEPATH "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_ASM_MARMASM_COMPILER
|
||||||
|
"${_WRAP}"
|
||||||
|
CACHE FILEPATH "" FORCE)
|
||||||
|
|
||||||
|
# Quote ONLY object and source (compiler path has no spaces now)
|
||||||
|
set(CMAKE_ASM_MASM_COMPILE_OBJECT
|
||||||
|
"<CMAKE_ASM_MASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
|
||||||
|
CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_ASM_MARMASM_COMPILE_OBJECT
|
||||||
|
"<CMAKE_ASM_MARMASM_COMPILER> /nologo -o \"<OBJECT>\" \"<SOURCE>\""
|
||||||
|
CACHE STRING "" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
|
add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
|
||||||
|
|
@ -61,7 +82,7 @@ if (CMAKE_OSX_ARCHITECTURES)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1)
|
if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1 AND NOT (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*"))
|
||||||
# Use invokeNative C version instead of asm code version
|
# Use invokeNative C version instead of asm code version
|
||||||
# if WAMR_BUILD_INVOKE_NATIVE_GENERAL is explicitly set.
|
# if WAMR_BUILD_INVOKE_NATIVE_GENERAL is explicitly set.
|
||||||
# Note:
|
# Note:
|
||||||
|
|
@ -117,15 +138,21 @@ elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
|
||||||
if (NOT WAMR_BUILD_SIMD EQUAL 1)
|
if (NOT WAMR_BUILD_SIMD EQUAL 1)
|
||||||
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
|
set(_WAMR_ARM64_MASM_SOURCE ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
|
||||||
set(_WAMR_ARM64_MASM_SOURCES ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
|
set(_WAMR_ARM64_MASM_OBJ ${CMAKE_CURRENT_BINARY_DIR}/invokeNative_armasm64.obj)
|
||||||
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES}
|
add_custom_command(
|
||||||
PROPERTIES
|
OUTPUT ${_WAMR_ARM64_MASM_OBJ}
|
||||||
LANGUAGE ASM_MASM
|
COMMAND ${CMAKE_ASM_MASM_COMPILER} /nologo -o "${_WAMR_ARM64_MASM_OBJ}" "${_WAMR_ARM64_MASM_SOURCE}"
|
||||||
COMPILE_DEFINITIONS ""
|
DEPENDS ${_WAMR_ARM64_MASM_SOURCE}
|
||||||
INCLUDE_DIRECTORIES ""
|
COMMENT "Assembling invokeNative_armasm64.asm"
|
||||||
COMPILE_OPTIONS "/nologo"
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
set_source_files_properties(${_WAMR_ARM64_MASM_OBJ}
|
||||||
|
PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE
|
||||||
|
)
|
||||||
|
set (source_all ${c_source_all} ${_WAMR_ARM64_MASM_OBJ})
|
||||||
|
else ()
|
||||||
|
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
|
||||||
endif ()
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
|
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
|
||||||
|
|
@ -133,15 +160,21 @@ elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
|
||||||
else()
|
else()
|
||||||
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
|
set(_WAMR_ARM64_MASM_SIMD_SOURCE ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
|
||||||
set(_WAMR_ARM64_MASM_SOURCES_SIMD ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
|
set(_WAMR_ARM64_MASM_SIMD_OBJ ${CMAKE_CURRENT_BINARY_DIR}/invokeNative_armasm64_simd.obj)
|
||||||
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES_SIMD}
|
add_custom_command(
|
||||||
PROPERTIES
|
OUTPUT ${_WAMR_ARM64_MASM_SIMD_OBJ}
|
||||||
LANGUAGE ASM_MASM
|
COMMAND ${CMAKE_ASM_MASM_COMPILER} /nologo -o "${_WAMR_ARM64_MASM_SIMD_OBJ}" "${_WAMR_ARM64_MASM_SIMD_SOURCE}"
|
||||||
COMPILE_DEFINITIONS ""
|
DEPENDS ${_WAMR_ARM64_MASM_SIMD_SOURCE}
|
||||||
INCLUDE_DIRECTORIES ""
|
COMMENT "Assembling invokeNative_armasm64_simd.asm"
|
||||||
COMPILE_OPTIONS "/nologo"
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
set_source_files_properties(${_WAMR_ARM64_MASM_SIMD_OBJ}
|
||||||
|
PROPERTIES GENERATED TRUE EXTERNAL_OBJECT TRUE
|
||||||
|
)
|
||||||
|
set (source_all ${c_source_all} ${_WAMR_ARM64_MASM_SIMD_OBJ})
|
||||||
|
else ()
|
||||||
|
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
|
||||||
endif ()
|
endif ()
|
||||||
else ()
|
else ()
|
||||||
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
|
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,9 @@ set(CMAKE_CXX_STANDARD 17)
|
||||||
# Set WAMR_BUILD_TARGET, currently values supported:
|
# Set WAMR_BUILD_TARGET, currently values supported:
|
||||||
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", "MIPS", "XTENSA"
|
# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", "MIPS", "XTENSA"
|
||||||
if (NOT DEFINED WAMR_BUILD_TARGET)
|
if (NOT DEFINED WAMR_BUILD_TARGET)
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64|ARM64|AARCH64)")
|
||||||
|
set (WAMR_BUILD_TARGET "AARCH64")
|
||||||
|
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
# Build as X86_64 by default in 64-bit platform
|
# Build as X86_64 by default in 64-bit platform
|
||||||
set (WAMR_BUILD_TARGET "X86_64")
|
set (WAMR_BUILD_TARGET "X86_64")
|
||||||
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,11 @@ if (NOT WAMR_BUILD_PLATFORM STREQUAL "windows")
|
||||||
project (aot-compiler)
|
project (aot-compiler)
|
||||||
else()
|
else()
|
||||||
project (aot-compiler C ASM CXX)
|
project (aot-compiler C ASM CXX)
|
||||||
enable_language (ASM_MASM)
|
if (WAMR_BUILD_TARGET STREQUAL "AARCH64")
|
||||||
|
enable_language (ASM_MARMASM)
|
||||||
|
else()
|
||||||
|
enable_language (ASM_MASM)
|
||||||
|
endif()
|
||||||
add_definitions(-DCOMPILING_WASM_RUNTIME_API=1)
|
add_definitions(-DCOMPILING_WASM_RUNTIME_API=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user