Skip to content

Commit 0f5a0e7

Browse files
authored
wamr: add LLVM-based JIT in addition to interpreter. (#325)
Use `wamr-interp` to represent WAMR Interpreter, and `wamr-jit` to represent WAMR JIT. Signed-off-by: [email protected] <[email protected]>
1 parent 72ce32f commit 0f5a0e7

File tree

8 files changed

+212
-26
lines changed

8 files changed

+212
-26
lines changed

.bazelrc

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ build:clang-tsan --copt -fsanitize=thread
5353
build:clang-tsan --linkopt -fsanitize=thread
5454

5555
# Use Clang-Tidy tool.
56+
build:clang-tidy --config=clang
5657
build:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect
5758
build:clang-tidy --@bazel_clang_tidy//:clang_tidy_config=@proxy_wasm_cpp_host//:clang_tidy_config
5859
build:clang-tidy --output_groups=report

.github/workflows/format.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ jobs:
122122
- uses: actions/checkout@v2
123123

124124
- name: Install dependencies (Linux)
125-
run: sudo apt update -y && sudo apt install -y clang-tidy-12
125+
run: sudo apt update -y && sudo apt install -y clang-tidy-12 lld-12 && sudo ln -sf /usr/bin/lld-12 /usr/bin/lld
126126

127127
- name: Bazel cache
128128
uses: PiotrSikora/[email protected]

.github/workflows/test.yml

+20-4
Original file line numberDiff line numberDiff line change
@@ -167,19 +167,35 @@ jobs:
167167
arch: x86_64
168168
action: test
169169
cache: true
170-
- name: 'WAMR on Linux/x86_64'
171-
engine: 'wamr'
170+
- name: 'WAMR interp on Linux/x86_64'
171+
engine: 'wamr-interp'
172172
repo: 'com_github_bytecodealliance_wasm_micro_runtime'
173173
os: ubuntu-20.04
174174
arch: x86_64
175175
action: test
176176
flags: --config=clang
177-
- name: 'WAMR on macOS/x86_64'
178-
engine: 'wamr'
177+
- name: 'WAMR interp on macOS/x86_64'
178+
engine: 'wamr-interp'
179179
repo: 'com_github_bytecodealliance_wasm_micro_runtime'
180180
os: macos-11
181181
arch: x86_64
182182
action: test
183+
- name: 'WAMR jit on Linux/x86_64'
184+
engine: 'wamr-jit'
185+
repo: 'com_github_bytecodealliance_wasm_micro_runtime'
186+
os: ubuntu-20.04
187+
arch: x86_64
188+
action: test
189+
flags: --config=clang
190+
deps: lld-12
191+
cache: true
192+
- name: 'WAMR jit on macOS/x86_64'
193+
engine: 'wamr-jit'
194+
repo: 'com_github_bytecodealliance_wasm_micro_runtime'
195+
os: macos-11
196+
arch: x86_64
197+
action: test
198+
cache: true
183199
- name: 'WasmEdge on Linux/x86_64'
184200
engine: 'wasmedge'
185201
repo: 'com_github_wasmedge_wasmedge'

bazel/BUILD

+7-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@ config_setting(
2727
)
2828

2929
config_setting(
30-
name = "engine_wamr",
31-
values = {"define": "engine=wamr"},
30+
name = "engine_wamr_interp",
31+
values = {"define": "engine=wamr-interp"},
32+
)
33+
34+
config_setting(
35+
name = "engine_wamr_jit",
36+
values = {"define": "engine=wamr-jit"},
3237
)
3338

3439
config_setting(

bazel/external/wamr.BUILD

+32-14
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,38 @@ filegroup(
1111

1212
cmake(
1313
name = "wamr_lib",
14-
cache_entries = {
15-
"WAMR_BUILD_AOT": "0",
16-
"WAMR_BUILD_FAST_INTERP": "1",
17-
"WAMR_BUILD_INTERP": "1",
18-
"WAMR_BUILD_JIT": "0",
19-
"WAMR_BUILD_LIBC_WASI": "0",
20-
"WAMR_BUILD_MULTI_MODULE": "0",
21-
"WAMR_BUILD_SIMD": "0",
22-
"WAMR_BUILD_TAIL_CALL": "1",
23-
"WAMR_BUILD_WASM_CACHE": "0",
24-
"WAMR_DISABLE_HW_BOUND_CHECK": "0",
25-
"WAMR_DISABLE_STACK_HW_BOUND_CHECK": "1",
26-
},
27-
generate_args = ["-GNinja"],
14+
generate_args = [
15+
"-DWAMR_BUILD_LIBC_WASI=0",
16+
"-DWAMR_BUILD_MULTI_MODULE=0",
17+
"-DWAMR_BUILD_TAIL_CALL=1",
18+
"-DWAMR_DISABLE_HW_BOUND_CHECK=0",
19+
"-DWAMR_DISABLE_STACK_HW_BOUND_CHECK=1",
20+
"-GNinja",
21+
] + select({
22+
"@proxy_wasm_cpp_host//bazel:engine_wamr_jit": [
23+
"-DLLVM_DIR=$EXT_BUILD_DEPS/copy_llvm_13_0_1/llvm/lib/cmake/llvm",
24+
"-DWAMR_BUILD_AOT=1",
25+
"-DWAMR_BUILD_FAST_INTERP=0",
26+
"-DWAMR_BUILD_INTERP=0",
27+
"-DWAMR_BUILD_JIT=1",
28+
"-DWAMR_BUILD_SIMD=1",
29+
],
30+
"//conditions:default": [
31+
"-DWAMR_BUILD_AOT=0",
32+
"-DWAMR_BUILD_FAST_INTERP=1",
33+
"-DWAMR_BUILD_INTERP=1",
34+
"-DWAMR_BUILD_JIT=0",
35+
"-DWAMR_BUILD_SIMD=0",
36+
],
37+
}),
2838
lib_source = ":srcs",
39+
linkopts = select({
40+
"@proxy_wasm_cpp_host//bazel:engine_wamr_jit": ["-ldl"],
41+
"//conditions:default": [],
42+
}),
2943
out_static_libs = ["libvmlib.a"],
44+
deps = select({
45+
"@proxy_wasm_cpp_host//bazel:engine_wamr_jit": ["@llvm-13_0_1//:llvm_13_0_1_lib"],
46+
"//conditions:default": [],
47+
}),
3048
)

bazel/external/wamr_llvm.BUILD

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
2+
3+
licenses(["notice"]) # Apache 2
4+
5+
package(default_visibility = ["//visibility:public"])
6+
7+
filegroup(
8+
name = "srcs",
9+
srcs = glob(["**"]),
10+
)
11+
12+
cmake(
13+
name = "llvm_13_0_1_lib",
14+
cache_entries = {
15+
# Disable both: BUILD and INCLUDE, since some of the INCLUDE
16+
# targets build code instead of only generating build files.
17+
"LLVM_BUILD_BENCHMARKS": "off",
18+
"LLVM_INCLUDE_BENCHMARKS": "off",
19+
"LLVM_BUILD_DOCS": "off",
20+
"LLVM_INCLUDE_DOCS": "off",
21+
"LLVM_BUILD_EXAMPLES": "off",
22+
"LLVM_INCLUDE_EXAMPLES": "off",
23+
"LLVM_BUILD_RUNTIME": "off",
24+
"LLVM_BUILD_RUNTIMES": "off",
25+
"LLVM_INCLUDE_RUNTIMES": "off",
26+
"LLVM_BUILD_TESTS": "off",
27+
"LLVM_INCLUDE_TESTS": "off",
28+
"LLVM_BUILD_TOOLS": "off",
29+
"LLVM_INCLUDE_TOOLS": "off",
30+
"LLVM_BUILD_UTILS": "off",
31+
"LLVM_INCLUDE_UTILS": "off",
32+
"LLVM_ENABLE_IDE": "off",
33+
"LLVM_ENABLE_LIBEDIT": "off",
34+
"LLVM_ENABLE_LIBXML2": "off",
35+
"LLVM_ENABLE_TERMINFO": "off",
36+
"LLVM_ENABLE_ZLIB": "off",
37+
"LLVM_TARGETS_TO_BUILD": "X86",
38+
"CMAKE_CXX_FLAGS": "-Wno-unused-command-line-argument",
39+
},
40+
# `lld` doesn't work on MacOS
41+
generate_args = select({
42+
"@platforms//os:linux": [
43+
"-GNinja",
44+
"-DLLVM_USE_LINKER=lld",
45+
],
46+
"//conditions:default": [
47+
"-GNinja",
48+
],
49+
}),
50+
lib_source = ":srcs",
51+
out_data_dirs = [
52+
"bin",
53+
"include",
54+
"lib",
55+
"libexec",
56+
"share",
57+
],
58+
out_static_libs = [
59+
# How to get the library list:
60+
# build LLVM with "-DLLVM_INCLUDE_TOOLS=ON"
61+
# cd bin and run "./llvm-config --libnames"
62+
"libLLVMWindowsManifest.a",
63+
"libLLVMXRay.a",
64+
"libLLVMLibDriver.a",
65+
"libLLVMDlltoolDriver.a",
66+
"libLLVMCoverage.a",
67+
"libLLVMLineEditor.a",
68+
"libLLVMX86Disassembler.a",
69+
"libLLVMX86AsmParser.a",
70+
"libLLVMX86CodeGen.a",
71+
"libLLVMX86Desc.a",
72+
"libLLVMX86Info.a",
73+
"libLLVMOrcJIT.a",
74+
"libLLVMMCJIT.a",
75+
"libLLVMJITLink.a",
76+
"libLLVMInterpreter.a",
77+
"libLLVMExecutionEngine.a",
78+
"libLLVMRuntimeDyld.a",
79+
"libLLVMOrcTargetProcess.a",
80+
"libLLVMOrcShared.a",
81+
"libLLVMDWP.a",
82+
"libLLVMSymbolize.a",
83+
"libLLVMDebugInfoPDB.a",
84+
"libLLVMDebugInfoGSYM.a",
85+
"libLLVMOption.a",
86+
"libLLVMObjectYAML.a",
87+
"libLLVMMCA.a",
88+
"libLLVMMCDisassembler.a",
89+
"libLLVMLTO.a",
90+
"libLLVMPasses.a",
91+
"libLLVMCFGuard.a",
92+
"libLLVMCoroutines.a",
93+
"libLLVMObjCARCOpts.a",
94+
"libLLVMipo.a",
95+
"libLLVMVectorize.a",
96+
"libLLVMLinker.a",
97+
"libLLVMInstrumentation.a",
98+
"libLLVMFrontendOpenMP.a",
99+
"libLLVMFrontendOpenACC.a",
100+
"libLLVMExtensions.a",
101+
"libLLVMDWARFLinker.a",
102+
"libLLVMGlobalISel.a",
103+
"libLLVMMIRParser.a",
104+
"libLLVMAsmPrinter.a",
105+
"libLLVMDebugInfoMSF.a",
106+
"libLLVMDebugInfoDWARF.a",
107+
"libLLVMSelectionDAG.a",
108+
"libLLVMCodeGen.a",
109+
"libLLVMIRReader.a",
110+
"libLLVMAsmParser.a",
111+
"libLLVMInterfaceStub.a",
112+
"libLLVMFileCheck.a",
113+
"libLLVMFuzzMutate.a",
114+
"libLLVMTarget.a",
115+
"libLLVMScalarOpts.a",
116+
"libLLVMInstCombine.a",
117+
"libLLVMAggressiveInstCombine.a",
118+
"libLLVMTransformUtils.a",
119+
"libLLVMBitWriter.a",
120+
"libLLVMAnalysis.a",
121+
"libLLVMProfileData.a",
122+
"libLLVMObject.a",
123+
"libLLVMTextAPI.a",
124+
"libLLVMMCParser.a",
125+
"libLLVMMC.a",
126+
"libLLVMDebugInfoCodeView.a",
127+
"libLLVMBitReader.a",
128+
"libLLVMCore.a",
129+
"libLLVMRemarks.a",
130+
"libLLVMBitstreamReader.a",
131+
"libLLVMBinaryFormat.a",
132+
"libLLVMTableGen.a",
133+
"libLLVMSupport.a",
134+
"libLLVMDemangle.a",
135+
],
136+
)

bazel/repositories.bzl

+13-4
Original file line numberDiff line numberDiff line change
@@ -159,17 +159,26 @@ def proxy_wasm_cpp_host_repositories():
159159
http_archive,
160160
name = "com_github_bytecodealliance_wasm_micro_runtime",
161161
build_file = "@proxy_wasm_cpp_host//bazel/external:wamr.BUILD",
162-
# WAMR-2022-12-07
163-
sha256 = "6a5263ad022176257a93b39b02f95f615c0c590da1798c86c935f501a51c30c4",
164-
strip_prefix = "wasm-micro-runtime-c3d66f916ef8093e5c8cacf3329ed968f807cf58",
165-
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/c3d66f916ef8093e5c8cacf3329ed968f807cf58.tar.gz",
162+
# WAMR-2022-12-16
163+
sha256 = "976b928f420040a77e793051e4d742208adf157370b9ad0f5535e126adb31eb0",
164+
strip_prefix = "wasm-micro-runtime-WAMR-1.1.2",
165+
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/WAMR-1.1.2.tar.gz",
166166
)
167167

168168
native.bind(
169169
name = "wamr",
170170
actual = "@com_github_bytecodealliance_wasm_micro_runtime//:wamr_lib",
171171
)
172172

173+
maybe(
174+
http_archive,
175+
name = "llvm-13_0_1",
176+
build_file = "@proxy_wasm_cpp_host//bazel/external:wamr_llvm.BUILD",
177+
sha256 = "ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834",
178+
strip_prefix = "llvm-13.0.1.src",
179+
url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz",
180+
)
181+
173182
# WasmEdge with dependencies.
174183

175184
maybe(

bazel/select.bzl

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ def proxy_wasm_select_engine_v8(xs):
2828

2929
def proxy_wasm_select_engine_wamr(xs):
3030
return select({
31-
"@proxy_wasm_cpp_host//bazel:engine_wamr": xs,
31+
"@proxy_wasm_cpp_host//bazel:engine_wamr_interp": xs,
32+
"@proxy_wasm_cpp_host//bazel:engine_wamr_jit": xs,
3233
"@proxy_wasm_cpp_host//bazel:multiengine": xs,
3334
"//conditions:default": [],
3435
})

0 commit comments

Comments
 (0)