Skip to content

Commit

Permalink
build: enable WAMR and WAVM runtimes. (#162)
Browse files Browse the repository at this point in the history
Signed-off-by: Takeshi Yoneda <takeshi@tetrate.io>

Co-authored-by: Piotr Sikora <piotrsikora@google.com>
  • Loading branch information
mathetake and PiotrSikora authored May 16, 2021
1 parent e4042ae commit 21af4d7
Show file tree
Hide file tree
Showing 14 changed files with 259 additions and 31 deletions.
3 changes: 3 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
build --action_env=CC=clang
build --action_env=CXX=clang++

build --enable_platform_specific_config

build:linux --cxxopt=-std=c++17
Expand Down
23 changes: 15 additions & 8 deletions .github/workflows/cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,26 +55,33 @@ jobs:
addlicense -check .
build:
name: build (${{ matrix.runtime }})

runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
# TODO(mathetake): Add other runtimes.
runtime: [ "wasmtime" ]
runtime: ["wamr", "wasmtime", "wavm"]

steps:
- uses: actions/checkout@v2

- name: Mount bazel cache
uses: actions/cache@v1
- name: Install dependency
run: sudo apt-get install ninja-build

- name: Mount Bazel cache
uses: actions/cache@v2
with:
path: "/home/runner/.cache/bazel"
key: bazel-${{ matrix.runtime }}
path: |
~/.cache/bazel
~/.cache/bazelisk
key: bazel-${{ matrix.runtime }}-${{ hashFiles('WORKSPACE', '.bazelrc', '.bazelversion', 'bazel/cargo/Cargo.raze.lock', 'bazel/dependencies.bzl', 'bazel/repositories.bzl') }}

- name: Test
run: |
bazel test --define runtime=${{ matrix.runtime }} //...
bazel test --define runtime=${{ matrix.runtime }} //test/...
- name: Test (signed Wasm module)
run: |
bazel test --define runtime=${{ matrix.runtime }} --cxxopt=-DPROXY_WASM_VERIFY_WITH_ED25519_PUBKEY=\"$(xxd -p -c 256 test/test_data/signature_key1.pub | cut -b9-)\" //test:signature_util_test
bazel test --define runtime=${{ matrix.runtime }} --per_file_copt=//...@-DPROXY_WASM_VERIFY_WITH_ED25519_PUBKEY=\"$(xxd -p -c 256 test/test_data/signature_key1.pub | cut -b9-)\" //test:signature_util_test
19 changes: 11 additions & 8 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,12 @@ cc_library(
cc_library(
name = "wamr_lib",
srcs = glob([
# TODO(@mathetake): Add WAMR lib.
# "src/wamr/*.h",
# "src/wamr/*.cc",
"src/wamr/*.h",
"src/wamr/*.cc",
]),
deps = [
":common_lib",
# TODO(@mathetake): Add WAMR lib.
"@wamr//:wamr_lib",
],
)

Expand All @@ -78,13 +77,17 @@ cc_library(
cc_library(
name = "wavm_lib",
srcs = glob([
# TODO(@mathetake): Add WAVM lib.
# "src/wavm/*.h",
# "src/wavm/*.cc",
"src/wavm/*.h",
"src/wavm/*.cc",
]),
copts = [
'-DWAVM_API=""',
"-Wno-non-virtual-dtor",
"-Wno-old-style-cast",
],
deps = [
":common_lib",
# TODO(@mathetake): Add WAVM lib.
"@wavm//:wavm_lib",
],
)

Expand Down
115 changes: 115 additions & 0 deletions bazel/external/llvm.BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")

licenses(["notice"]) # Apache 2

package(default_visibility = ["//visibility:public"])

filegroup(
name = "srcs",
srcs = glob(["**"]),
)

cmake(
name = "llvm_lib",
cache_entries = {
# Disable both: BUILD and INCLUDE, since some of the INCLUDE
# targets build code instead of only generating build files.
"LLVM_BUILD_BENCHMARKS": "off",
"LLVM_INCLUDE_BENCHMARKS": "off",
"LLVM_BUILD_DOCS": "off",
"LLVM_INCLUDE_DOCS": "off",
"LLVM_BUILD_EXAMPLES": "off",
"LLVM_INCLUDE_EXAMPLES": "off",
"LLVM_BUILD_RUNTIME": "off",
"LLVM_BUILD_RUNTIMES": "off",
"LLVM_INCLUDE_RUNTIMES": "off",
"LLVM_BUILD_TESTS": "off",
"LLVM_INCLUDE_TESTS": "off",
"LLVM_BUILD_TOOLS": "off",
"LLVM_INCLUDE_TOOLS": "off",
"LLVM_BUILD_UTILS": "off",
"LLVM_INCLUDE_UTILS": "off",
"LLVM_ENABLE_LIBEDIT": "off",
"LLVM_ENABLE_LIBXML2": "off",
"LLVM_ENABLE_TERMINFO": "off",
"LLVM_ENABLE_ZLIB": "off",
"LLVM_TARGETS_TO_BUILD": "X86",
# Workaround for the issue with statically linked libstdc++
# using -l:libstdc++.a.
"CMAKE_CXX_FLAGS": "-lstdc++",
},
env_vars = {
# Workaround for the -DDEBUG flag added in fastbuild on macOS,
# which conflicts with DEBUG macro used in LLVM.
"CFLAGS": "-UDEBUG",
"CXXFLAGS": "-UDEBUG",
"ASMFLAGS": "-UDEBUG",
},
generate_args = ["-GNinja"],
lib_source = ":srcs",
out_static_libs = [
"libLLVMInterpreter.a",
"libLLVMWindowsManifest.a",
"libLLVMLibDriver.a",
"libLLVMObjectYAML.a",
"libLLVMCoverage.a",
"libLLVMLineEditor.a",
"libLLVMDlltoolDriver.a",
"libLLVMOption.a",
"libLLVMTableGen.a",
"libLLVMFuzzMutate.a",
"libLLVMSymbolize.a",
"libLLVMCoroutines.a",
"libLLVMDebugInfoPDB.a",
"libLLVMLTO.a",
"libLLVMObjCARCOpts.a",
"libLLVMMIRParser.a",
"libLLVMOrcJIT.a",
"libLLVMOrcError.a",
"libLLVMJITLink.a",
"libLLVMPasses.a",
"libLLVMipo.a",
"libLLVMInstrumentation.a",
"libLLVMVectorize.a",
"libLLVMLinker.a",
"libLLVMIRReader.a",
"libLLVMAsmParser.a",
"libLLVMX86Disassembler.a",
"libLLVMX86AsmParser.a",
"libLLVMX86CodeGen.a",
"libLLVMCFGuard.a",
"libLLVMGlobalISel.a",
"libLLVMSelectionDAG.a",
"libLLVMAsmPrinter.a",
"libLLVMDebugInfoDWARF.a",
"libLLVMCodeGen.a",
"libLLVMScalarOpts.a",
"libLLVMInstCombine.a",
"libLLVMAggressiveInstCombine.a",
"libLLVMTransformUtils.a",
"libLLVMBitWriter.a",
"libLLVMX86Desc.a",
"libLLVMMCDisassembler.a",
"libLLVMX86Utils.a",
"libLLVMX86Info.a",
"libLLVMMCJIT.a",
"libLLVMExecutionEngine.a",
"libLLVMTarget.a",
"libLLVMAnalysis.a",
"libLLVMProfileData.a",
"libLLVMRuntimeDyld.a",
"libLLVMObject.a",
"libLLVMTextAPI.a",
"libLLVMMCParser.a",
"libLLVMBitReader.a",
"libLLVMMC.a",
"libLLVMDebugInfoCodeView.a",
"libLLVMDebugInfoMSF.a",
"libLLVMCore.a",
"libLLVMRemarks.a",
"libLLVMBitstreamReader.a",
"libLLVMBinaryFormat.a",
"libLLVMSupport.a",
"libLLVMDemangle.a",
],
)
2 changes: 2 additions & 0 deletions bazel/external/proxy-wasm-cpp-sdk.BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("@rules_cc//cc:defs.bzl", "cc_library")

licenses(["notice"]) # Apache 2

package(default_visibility = ["//visibility:public"])
Expand Down
16 changes: 11 additions & 5 deletions bazel/external/wamr.BUILD
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
licenses(["notice"]) # Apache 2

load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")

licenses(["notice"]) # Apache 2

package(default_visibility = ["//visibility:public"])

filegroup(
name = "srcs",
srcs = glob(["**"]),
visibility = ["//visibility:public"],
)

cmake(
name = "libiwasm",
name = "wamr_lib",
cache_entries = {
"LLVM_DIR": "$EXT_BUILD_DEPS/copy_llvm/llvm/lib/cmake/llvm",
"WAMR_BUILD_INTERP": "1",
"WAMR_BUILD_JIT": "0",
"WAMR_BUILD_AOT": "0",
"WAMR_BUILD_SIMD": "0",
"WAMR_BUILD_MULTI_MODULE": "1",
"WAMR_BUILD_LIBC_WASI": "0",
"WAMR_BUILD_TAIL_CALL": "1",
},
defines = ["WASM_WAMR"],
generate_args = ["-GNinja"],
lib_source = ":srcs",
out_shared_libs = ["libiwasm.so"],
out_static_libs = ["libvmlib.a"],
deps = [
"@llvm//:llvm_lib",
],
)
2 changes: 2 additions & 0 deletions bazel/external/wasm-c-api.BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("@rules_cc//cc:defs.bzl", "cc_library")

licenses(["notice"]) # Apache 2

package(default_visibility = ["//visibility:public"])
Expand Down
1 change: 1 addition & 0 deletions bazel/external/wasmtime.BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
load("@rules_cc//cc:defs.bzl", "cc_library")
load("@rules_rust//rust:rust.bzl", "rust_library")

licenses(["notice"]) # Apache 2
Expand Down
38 changes: 38 additions & 0 deletions bazel/external/wavm.BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")

licenses(["notice"]) # Apache 2

package(default_visibility = ["//visibility:public"])

filegroup(
name = "srcs",
srcs = glob(["**"]),
)

cmake(
name = "wavm_lib",
cache_entries = {
"LLVM_DIR": "$EXT_BUILD_DEPS/copy_llvm/llvm/lib/cmake/llvm",
"WAVM_ENABLE_STATIC_LINKING": "on",
"WAVM_ENABLE_RELEASE_ASSERTS": "on",
"WAVM_ENABLE_UNWIND": "on",
# Workaround for the issue with statically linked libstdc++
# using -l:libstdc++.a.
"CMAKE_CXX_FLAGS": "-lstdc++ -Wno-unused-command-line-argument",
},
defines = ["WASM_WAVM"],
env_vars = {
# Workaround for the -DDEBUG flag added in fastbuild on macOS,
# which conflicts with DEBUG macro used in LLVM.
"CFLAGS": "-UDEBUG",
"CXXFLAGS": "-UDEBUG",
"ASMFLAGS": "-UDEBUG",
},
generate_args = ["-GNinja"],
lib_source = ":srcs",
out_static_libs = [
"libWAVM.a",
"libWAVMUnwind.a",
],
deps = ["@llvm//:llvm_lib"],
)
22 changes: 19 additions & 3 deletions bazel/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ def proxy_wasm_cpp_host_repositories():
http_archive(
name = "wamr",
build_file = "@proxy_wasm_cpp_host//bazel/external:wamr.BUILD",
sha256 = "1d870f396bb6bdcb5c816326655b19a2877bbdf879255c335b8e84ce4ee37780",
strip_prefix = "wasm-micro-runtime-9710d9325f426121cc1f2c62386a71d0c022d613",
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/9710d9325f426121cc1f2c62386a71d0c022d613.tar.gz",
sha256 = "46ad365a1c0668797e69cb868574fd526cd8e26a503213caf782c39061e6d2e1",
strip_prefix = "wasm-micro-runtime-17a216748574499bd3a5130e7e6a20b84fe76798",
url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/17a216748574499bd3a5130e7e6a20b84fe76798.tar.gz",
)

http_archive(
Expand Down Expand Up @@ -80,3 +80,19 @@ def proxy_wasm_cpp_host_repositories():
strip_prefix = "rules_foreign_cc-0.2.0",
url = "https://github.com/bazelbuild/rules_foreign_cc/archive/0.2.0.tar.gz",
)

http_archive(
name = "llvm",
build_file = "@proxy_wasm_cpp_host//bazel/external:llvm.BUILD",
sha256 = "df83a44b3a9a71029049ec101fb0077ecbbdf5fe41e395215025779099a98fdf",
strip_prefix = "llvm-10.0.0.src",
url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/llvm-10.0.0.src.tar.xz",
)

http_archive(
name = "wavm",
build_file = "@proxy_wasm_cpp_host//bazel/external:wavm.BUILD",
sha256 = "ce899269516313b400005a8cc9bc3bcd8329663f43f7b4baae211ea0cd456a39",
strip_prefix = "WAVM-79c3aa29366615d9b1593cd527e5b4b94cc6072a",
url = "https://github.com/WAVM/WAVM/archive/79c3aa29366615d9b1593cd527e5b4b94cc6072a.tar.gz",
)
1 change: 1 addition & 0 deletions src/null/null_vm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#include <string.h>

#include <limits>
#include <memory>
#include <unordered_map>
#include <utility>
Expand Down
2 changes: 1 addition & 1 deletion src/wavm/wavm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ namespace {
} while (0)

std::string getFailMessage(std::string_view function_name, WAVM::Runtime::Exception *exception) {
std::string message = "Function " + std::string(function_name) +
std::string message = "Function: " + std::string(function_name) +
" failed: " + WAVM::Runtime::describeExceptionType(exception->type) +
"\nProxy-Wasm plugin in-VM backtrace:\n";
std::vector<std::string> callstack_descriptions =
Expand Down
Loading

0 comments on commit 21af4d7

Please sign in to comment.