Skip to content

Commit 1eb66a0

Browse files
authored
wamr: update to WAMR-12-30-2021 with LLVM 13.0.0. (#207)
Signed-off-by: Piotr Sikora <[email protected]>
1 parent 2be7a28 commit 1eb66a0

File tree

5 files changed

+189
-35
lines changed

5 files changed

+189
-35
lines changed

bazel/external/llvm13.BUILD

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
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_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+
env_vars = {
41+
# Workaround for the -DDEBUG flag added in fastbuild on macOS,
42+
# which conflicts with DEBUG macro used in LLVM.
43+
"CFLAGS": "-UDEBUG",
44+
"CXXFLAGS": "-UDEBUG",
45+
"ASMFLAGS": "-UDEBUG",
46+
},
47+
generate_args = ["-GNinja"],
48+
lib_source = ":srcs",
49+
out_static_libs = [
50+
"libLLVMWindowsManifest.a",
51+
"libLLVMXRay.a",
52+
"libLLVMLibDriver.a",
53+
"libLLVMDlltoolDriver.a",
54+
"libLLVMCoverage.a",
55+
"libLLVMLineEditor.a",
56+
"libLLVMX86Disassembler.a",
57+
"libLLVMX86AsmParser.a",
58+
"libLLVMX86CodeGen.a",
59+
"libLLVMX86Desc.a",
60+
"libLLVMX86Info.a",
61+
"libLLVMOrcJIT.a",
62+
"libLLVMMCJIT.a",
63+
"libLLVMJITLink.a",
64+
"libLLVMInterpreter.a",
65+
"libLLVMExecutionEngine.a",
66+
"libLLVMRuntimeDyld.a",
67+
"libLLVMOrcTargetProcess.a",
68+
"libLLVMOrcShared.a",
69+
"libLLVMDWP.a",
70+
"libLLVMSymbolize.a",
71+
"libLLVMDebugInfoPDB.a",
72+
"libLLVMDebugInfoGSYM.a",
73+
"libLLVMOption.a",
74+
"libLLVMObjectYAML.a",
75+
"libLLVMMCA.a",
76+
"libLLVMMCDisassembler.a",
77+
"libLLVMLTO.a",
78+
"libLLVMPasses.a",
79+
"libLLVMCFGuard.a",
80+
"libLLVMCoroutines.a",
81+
"libLLVMObjCARCOpts.a",
82+
"libLLVMipo.a",
83+
"libLLVMVectorize.a",
84+
"libLLVMLinker.a",
85+
"libLLVMInstrumentation.a",
86+
"libLLVMFrontendOpenMP.a",
87+
"libLLVMFrontendOpenACC.a",
88+
"libLLVMExtensions.a",
89+
"libLLVMDWARFLinker.a",
90+
"libLLVMGlobalISel.a",
91+
"libLLVMMIRParser.a",
92+
"libLLVMAsmPrinter.a",
93+
"libLLVMDebugInfoMSF.a",
94+
"libLLVMDebugInfoDWARF.a",
95+
"libLLVMSelectionDAG.a",
96+
"libLLVMCodeGen.a",
97+
"libLLVMIRReader.a",
98+
"libLLVMAsmParser.a",
99+
"libLLVMInterfaceStub.a",
100+
"libLLVMFileCheck.a",
101+
"libLLVMFuzzMutate.a",
102+
"libLLVMTarget.a",
103+
"libLLVMScalarOpts.a",
104+
"libLLVMInstCombine.a",
105+
"libLLVMAggressiveInstCombine.a",
106+
"libLLVMTransformUtils.a",
107+
"libLLVMBitWriter.a",
108+
"libLLVMAnalysis.a",
109+
"libLLVMProfileData.a",
110+
"libLLVMObject.a",
111+
"libLLVMTextAPI.a",
112+
"libLLVMMCParser.a",
113+
"libLLVMMC.a",
114+
"libLLVMDebugInfoCodeView.a",
115+
"libLLVMBitReader.a",
116+
"libLLVMCore.a",
117+
"libLLVMRemarks.a",
118+
"libLLVMBitstreamReader.a",
119+
"libLLVMBinaryFormat.a",
120+
"libLLVMTableGen.a",
121+
"libLLVMSupport.a",
122+
"libLLVMDemangle.a",
123+
],
124+
)

bazel/external/wamr.BUILD

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ filegroup(
1212
cmake(
1313
name = "wamr_lib",
1414
cache_entries = {
15-
"LLVM_DIR": "$EXT_BUILD_DEPS/copy_llvm/llvm/lib/cmake/llvm",
15+
"LLVM_DIR": "$EXT_BUILD_DEPS/copy_llvm13/llvm/lib/cmake/llvm",
1616
"WAMR_BUILD_INTERP": "1",
17+
"WAMR_BUILD_FAST_INTERP": "1",
1718
"WAMR_BUILD_JIT": "0",
19+
"WAMR_BUILD_LAZY_JIT": "0",
1820
"WAMR_BUILD_AOT": "0",
1921
"WAMR_BUILD_SIMD": "0",
2022
"WAMR_BUILD_MULTI_MODULE": "1",
@@ -25,6 +27,6 @@ cmake(
2527
lib_source = ":srcs",
2628
out_static_libs = ["libvmlib.a"],
2729
deps = [
28-
"@llvm//:llvm_lib",
30+
"@llvm13//:llvm_lib",
2931
],
3032
)

bazel/external/wamr.patch

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
1. Automatically detect the host platform. (https://github.com/bytecodealliance/wasm-micro-runtime/pull/929)
2+
3+
diff --git a/CMakeLists.txt b/CMakeLists.txt
4+
index d77473e..bc74e72 100644
5+
--- a/CMakeLists.txt
6+
+++ b/CMakeLists.txt
7+
@@ -6,7 +6,7 @@ cmake_minimum_required (VERSION 2.8...3.16)
8+
project (iwasm)
9+
# set (CMAKE_VERBOSE_MAKEFILE 1)
10+
11+
-set (WAMR_BUILD_PLATFORM "linux")
12+
+string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
13+
14+
# Reset default linker flags
15+
set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")

bazel/repositories.bzl

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,22 @@ def proxy_wasm_cpp_host_repositories():
4343
url = "https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protobuf-all-3.17.3.tar.gz",
4444
)
4545

46+
http_archive(
47+
name = "llvm13",
48+
build_file = "@proxy_wasm_cpp_host//bazel/external:llvm13.BUILD",
49+
sha256 = "408d11708643ea826f519ff79761fcdfc12d641a2510229eec459e72f8163020",
50+
strip_prefix = "llvm-13.0.0.src",
51+
url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/llvm-13.0.0.src.tar.xz",
52+
)
53+
4654
http_archive(
4755
name = "com_github_bytecodealliance_wasm_micro_runtime",
4856
build_file = "@proxy_wasm_cpp_host//bazel/external:wamr.BUILD",
49-
sha256 = "46ad365a1c0668797e69cb868574fd526cd8e26a503213caf782c39061e6d2e1",
50-
strip_prefix = "wasm-micro-runtime-17a216748574499bd3a5130e7e6a20b84fe76798",
51-
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/17a216748574499bd3a5130e7e6a20b84fe76798.tar.gz",
57+
sha256 = "0ccf19f30f744fca635be5428f6460c14dfee19bfa0820c70e0fc9554f79c9b1",
58+
strip_prefix = "wasm-micro-runtime-cdf306364eff8f50fd6473b32a316cb90cc15a2f",
59+
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/cdf306364eff8f50fd6473b32a316cb90cc15a2f.tar.gz",
60+
patches = ["@proxy_wasm_cpp_host//bazel/external:wamr.patch"],
61+
patch_args = ["-p1"],
5262
)
5363

5464
native.bind(

src/wamr/wamr.cc

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,17 @@ static std::string printValue(const wasm_val_t &value) {
153153
}
154154
}
155155

156-
static std::string printValues(const wasm_val_t values[], size_t size) {
157-
if (size == 0) {
156+
static std::string printValues(const wasm_val_vec_t *values) {
157+
if (values->size == 0) {
158158
return "";
159159
}
160160

161161
std::string s;
162-
for (size_t i = 0; i < size; i++) {
162+
for (size_t i = 0; i < values->size; i++) {
163163
if (i) {
164164
s.append(", ");
165165
}
166-
s.append(printValue(values[i]));
166+
s.append(printValue(values->data[i]));
167167
}
168168
return s;
169169
}
@@ -209,7 +209,7 @@ bool Wamr::link(std::string_view debug_name) {
209209
WasmImporttypeVec import_types;
210210
wasm_module_imports(module_.get(), import_types.get());
211211

212-
std::vector<const wasm_extern_t *> imports;
212+
std::vector<wasm_extern_t *> imports;
213213
for (size_t i = 0; i < import_types.get()->size; i++) {
214214
const wasm_name_t *module_name_ptr = wasm_importtype_module(import_types.get()->data[i]);
215215
const wasm_name_t *name_ptr = wasm_importtype_name(import_types.get()->data[i]);
@@ -273,7 +273,8 @@ bool Wamr::link(std::string_view debug_name) {
273273
return false;
274274
}
275275

276-
instance_ = wasm_instance_new(store_.get(), module_.get(), imports.data(), nullptr);
276+
wasm_extern_vec_t imports_vec = {imports.size(), imports.data()};
277+
instance_ = wasm_instance_new(store_.get(), module_.get(), &imports_vec, nullptr);
277278
assert(instance_ != nullptr);
278279

279280
WasmExportTypeVec export_types;
@@ -403,14 +404,10 @@ template <> uint64_t convertValueTypeToArg<uint64_t>(wasm_val_t val) {
403404
template <> double convertValueTypeToArg<double>(wasm_val_t val) { return val.of.f64; }
404405

405406
template <typename T, typename U, std::size_t... I>
406-
constexpr T convertValTypesToArgsTupleImpl(const U &arr, std::index_sequence<I...>) {
407+
constexpr T convertValTypesToArgsTuple(const U &vec, std::index_sequence<I...>) {
407408
return std::make_tuple(
408-
convertValueTypeToArg<typename ConvertWordType<std::tuple_element_t<I, T>>::type>(arr[I])...);
409-
}
410-
411-
template <typename T, typename U, typename Is = std::make_index_sequence<std::tuple_size<T>::value>>
412-
constexpr T convertValTypesToArgsTuple(const U &arr) {
413-
return convertValTypesToArgsTupleImpl<T>(arr, Is());
409+
convertValueTypeToArg<typename ConvertWordType<std::tuple_element_t<I, T>>::type>(
410+
vec->data[I])...);
414411
}
415412

416413
template <typename T, std::size_t... I>
@@ -449,14 +446,15 @@ void Wamr::registerHostFunctionImpl(std::string_view module_name, std::string_vi
449446
WasmFunctypePtr type = newWasmNewFuncType<std::tuple<Args...>>();
450447
WasmFuncPtr func = wasm_func_new_with_env(
451448
store_.get(), type.get(),
452-
[](void *data, const wasm_val_t params[], wasm_val_t results[]) -> wasm_trap_t * {
449+
[](void *data, const wasm_val_vec_t *params, wasm_val_vec_t *results) -> wasm_trap_t * {
453450
auto func_data = reinterpret_cast<HostFuncData *>(data);
454451
const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace);
455452
if (log) {
456453
func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" +
457-
printValues(params, sizeof...(Args)) + ")");
454+
printValues(params) + ")");
458455
}
459-
auto args = convertValTypesToArgsTuple<std::tuple<Args...>>(params);
456+
auto args = convertValTypesToArgsTuple<std::tuple<Args...>>(
457+
params, std::make_index_sequence<sizeof...(Args)>{});
460458
auto fn = reinterpret_cast<void (*)(Args...)>(func_data->raw_func_);
461459
std::apply(fn, args);
462460
if (log) {
@@ -481,17 +479,18 @@ void Wamr::registerHostFunctionImpl(std::string_view module_name, std::string_vi
481479
WasmFunctypePtr type = newWasmNewFuncType<R, std::tuple<Args...>>();
482480
WasmFuncPtr func = wasm_func_new_with_env(
483481
store_.get(), type.get(),
484-
[](void *data, const wasm_val_t params[], wasm_val_t results[]) -> wasm_trap_t * {
482+
[](void *data, const wasm_val_vec_t *params, wasm_val_vec_t *results) -> wasm_trap_t * {
485483
auto func_data = reinterpret_cast<HostFuncData *>(data);
486484
const bool log = func_data->vm_->cmpLogLevel(LogLevel::trace);
487485
if (log) {
488486
func_data->vm_->integration()->trace("[vm->host] " + func_data->name_ + "(" +
489-
printValues(params, sizeof...(Args)) + ")");
487+
printValues(params) + ")");
490488
}
491-
auto args = convertValTypesToArgsTuple<std::tuple<Args...>>(params);
489+
auto args = convertValTypesToArgsTuple<std::tuple<Args...>>(
490+
params, std::make_index_sequence<sizeof...(Args)>{});
492491
auto fn = reinterpret_cast<R (*)(Args...)>(func_data->raw_func_);
493492
R res = std::apply(fn, args);
494-
assignVal<R>(res, results[0]);
493+
assignVal<R>(res, results->data[0]);
495494
if (log) {
496495
func_data->vm_->integration()->trace("[vm<-host] " + func_data->name_ +
497496
" return: " + std::to_string(res));
@@ -534,14 +533,16 @@ void Wamr::getModuleFunctionImpl(std::string_view function_name,
534533
}
535534

536535
*function = [func, function_name, this](ContextBase *context, Args... args) -> void {
537-
wasm_val_t params[] = {makeVal(args)...};
536+
wasm_val_t params_arr[] = {makeVal(args)...};
537+
const wasm_val_vec_t params = WASM_ARRAY_VEC(params_arr);
538+
wasm_val_vec_t results = WASM_EMPTY_VEC;
538539
const bool log = cmpLogLevel(LogLevel::trace);
539540
if (log) {
540-
integration()->trace("[host->vm] " + std::string(function_name) + "(" +
541-
printValues(params, sizeof...(Args)) + ")");
541+
integration()->trace("[host->vm] " + std::string(function_name) + "(" + printValues(&params) +
542+
")");
542543
}
543544
SaveRestoreContext saved_context(context);
544-
WasmTrapPtr trap{wasm_func_call(func, params, nullptr)};
545+
WasmTrapPtr trap{wasm_func_call(func, &params, &results)};
545546
if (trap) {
546547
WasmByteVec error_message;
547548
wasm_trap_message(trap.get(), error_message.get());
@@ -580,15 +581,17 @@ void Wamr::getModuleFunctionImpl(std::string_view function_name,
580581
}
581582

582583
*function = [func, function_name, this](ContextBase *context, Args... args) -> R {
583-
wasm_val_t params[] = {makeVal(args)...};
584-
wasm_val_t results[1];
584+
wasm_val_t params_arr[] = {makeVal(args)...};
585+
const wasm_val_vec_t params = WASM_ARRAY_VEC(params_arr);
586+
wasm_val_t results_arr[1];
587+
wasm_val_vec_t results = WASM_ARRAY_VEC(results_arr);
585588
const bool log = cmpLogLevel(LogLevel::trace);
586589
if (log) {
587-
integration()->trace("[host->vm] " + std::string(function_name) + "(" +
588-
printValues(params, sizeof...(Args)) + ")");
590+
integration()->trace("[host->vm] " + std::string(function_name) + "(" + printValues(&params) +
591+
")");
589592
}
590593
SaveRestoreContext saved_context(context);
591-
WasmTrapPtr trap{wasm_func_call(func, params, results)};
594+
WasmTrapPtr trap{wasm_func_call(func, &params, &results)};
592595
if (trap) {
593596
WasmByteVec error_message;
594597
wasm_trap_message(trap.get(), error_message.get());
@@ -597,7 +600,7 @@ void Wamr::getModuleFunctionImpl(std::string_view function_name,
597600
std::string(error_message.get()->data, error_message.get()->size));
598601
return R{};
599602
}
600-
R ret = convertValueTypeToArg<R>(results[0]);
603+
R ret = convertValueTypeToArg<R>(results.data[0]);
601604
if (log) {
602605
integration()->trace("[host<-vm] " + std::string(function_name) +
603606
" return: " + std::to_string(ret));

0 commit comments

Comments
 (0)