-
Notifications
You must be signed in to change notification settings - Fork 786
Expand file tree
/
Copy pathiwasm_common.cmake
More file actions
163 lines (148 loc) · 6.36 KB
/
iwasm_common.cmake
File metadata and controls
163 lines (148 loc) · 6.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
set (IWASM_COMMON_DIR ${CMAKE_CURRENT_LIST_DIR})
include_directories (${IWASM_COMMON_DIR})
if (MSVC AND WAMR_BUILD_PLATFORM STREQUAL "windows" AND WAMR_BUILD_TARGET MATCHES "AARCH64.*")
if (DEFINED ENV{VCToolsInstallDir})
# Detect host tool dir
set(_ARMASM64_CANDIDATES
"$ENV{VCToolsInstallDir}/bin/HostX64/ARM64/armasm64.exe"
"$ENV{VCToolsInstallDir}/bin/HostARM64/arm64/armasm64.exe")
set(_ARMASM64_EXE "")
foreach(_p IN LISTS _ARMASM64_CANDIDATES)
if (EXISTS "${_p}")
set(_ARMASM64_EXE "${_p}")
break()
endif()
endforeach()
if (_ARMASM64_EXE STREQUAL "")
message(FATAL_ERROR "armasm64.exe not found under VCToolsInstallDir")
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()
message(FATAL_ERROR "VCToolsInstallDir is not defined. Please run from a Developer Command Prompt or specify armasm64.exe manually.")
endif()
endif()
add_definitions(-DBH_MALLOC=wasm_runtime_malloc)
add_definitions(-DBH_FREE=wasm_runtime_free)
file (GLOB c_source_all ${IWASM_COMMON_DIR}/*.c)
if (WAMR_DISABLE_APP_ENTRY EQUAL 1)
list(REMOVE_ITEM c_source_all "${IWASM_COMMON_DIR}/wasm_application.c")
endif ()
if (CMAKE_OSX_ARCHITECTURES)
string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" OSX_ARCHS)
list(FIND OSX_ARCHS arm64 OSX_AARCH64)
list(FIND OSX_ARCHS x86_64 OSX_X86_64)
if (NOT "${OSX_AARCH64}" STREQUAL "-1" AND NOT "${OSX_X86_64}" STREQUAL "-1")
set(OSX_UNIVERSAL_BUILD 1)
endif()
endif()
if (WAMR_BUILD_INVOKE_NATIVE_GENERAL EQUAL 1)
# Use invokeNative C version instead of asm code version
# if WAMR_BUILD_INVOKE_NATIVE_GENERAL is explicitly set.
# Note:
# the maximum number of native arguments is limited to 20,
# and there are possible issues when passing arguments to
# native function for some cpus, e.g. int64 and double arguments
# in arm and mips need to be 8-bytes aligned, and some arguments
# of x86_64 are passed by registers but not stack
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_general.c)
elseif (OSX_UNIVERSAL_BUILD EQUAL 1)
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_osx_universal.s)
elseif (WAMR_BUILD_TARGET STREQUAL "X86_64" OR WAMR_BUILD_TARGET STREQUAL "AMD_64")
if (NOT WAMR_BUILD_SIMD EQUAL 1)
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
if (NOT MINGW)
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64.asm)
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mingw_x64.s)
endif ()
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64.s)
endif ()
else ()
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
if (NOT MINGW)
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64_simd.asm)
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mingw_x64_simd.s)
endif ()
else()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_em64_simd.s)
endif()
endif ()
elseif (WAMR_BUILD_TARGET STREQUAL "X86_32")
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_ia32.asm)
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_ia32.s)
endif ()
elseif (WAMR_BUILD_TARGET MATCHES "ARM.*")
if (WAMR_BUILD_TARGET MATCHES "ARM.*_VFP")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arm_vfp.s)
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arm.s)
endif ()
elseif (WAMR_BUILD_TARGET MATCHES "THUMB.*")
if (WAMR_BUILD_TARGET MATCHES "THUMB.*_VFP")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_thumb_vfp.s)
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_thumb.s)
endif ()
elseif (WAMR_BUILD_TARGET MATCHES "AARCH64.*")
if (NOT WAMR_BUILD_SIMD EQUAL 1)
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
if (MSVC)
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
set(_WAMR_ARM64_MASM_SOURCES ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64.asm)
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES}
PROPERTIES
LANGUAGE ASM_MASM
COMPILE_DEFINITIONS ""
INCLUDE_DIRECTORIES ""
COMPILE_OPTIONS "/nologo"
)
endif ()
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64.s)
endif ()
else()
if (WAMR_BUILD_PLATFORM STREQUAL "windows")
if (MSVC)
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
set(_WAMR_ARM64_MASM_SOURCES_SIMD ${IWASM_COMMON_DIR}/arch/invokeNative_armasm64_simd.asm)
set_source_files_properties(${_WAMR_ARM64_MASM_SOURCES_SIMD}
PROPERTIES
LANGUAGE ASM_MASM
COMPILE_DEFINITIONS ""
INCLUDE_DIRECTORIES ""
COMPILE_OPTIONS "/nologo"
)
endif ()
else ()
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_aarch64_simd.s)
endif ()
endif()
elseif (WAMR_BUILD_TARGET STREQUAL "MIPS")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_mips.s)
elseif (WAMR_BUILD_TARGET STREQUAL "XTENSA")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_xtensa.s)
elseif (WAMR_BUILD_TARGET MATCHES "RISCV*")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_riscv.S)
elseif (WAMR_BUILD_TARGET STREQUAL "ARC")
set (source_all ${c_source_all} ${IWASM_COMMON_DIR}/arch/invokeNative_arc.s)
else ()
message (FATAL_ERROR "Build target isn't set")
endif ()
set (IWASM_COMMON_SOURCE ${source_all})