diff --git a/.bazelrc b/.bazelrc index a8212233d..86e814d38 100644 --- a/.bazelrc +++ b/.bazelrc @@ -53,6 +53,7 @@ build:clang-tsan --copt -fsanitize=thread build:clang-tsan --linkopt -fsanitize=thread # Use Clang-Tidy tool. +build:clang-tidy --config=clang build:clang-tidy --aspects @bazel_clang_tidy//clang_tidy:clang_tidy.bzl%clang_tidy_aspect build:clang-tidy --@bazel_clang_tidy//:clang_tidy_config=@proxy_wasm_cpp_host//:clang_tidy_config build:clang-tidy --output_groups=report diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 1f0f44628..1065c0519 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -122,7 +122,7 @@ jobs: - uses: actions/checkout@v2 - name: Install dependencies (Linux) - run: sudo apt update -y && sudo apt install -y clang-tidy-12 + run: sudo apt update -y && sudo apt install -y clang-tidy-12 lld-12 && sudo ln -sf /usr/bin/lld-12 /usr/bin/lld - name: Bazel cache uses: PiotrSikora/cache@v2.1.7-with-skip-cache diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bee94b318..eba4f62ad 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -167,19 +167,35 @@ jobs: arch: x86_64 action: test cache: true - - name: 'WAMR on Linux/x86_64' - engine: 'wamr' + - name: 'WAMR interp on Linux/x86_64' + engine: 'wamr-interp' repo: 'com_github_bytecodealliance_wasm_micro_runtime' os: ubuntu-20.04 arch: x86_64 action: test flags: --config=clang - - name: 'WAMR on macOS/x86_64' - engine: 'wamr' + - name: 'WAMR interp on macOS/x86_64' + engine: 'wamr-interp' repo: 'com_github_bytecodealliance_wasm_micro_runtime' os: macos-11 arch: x86_64 action: test + - name: 'WAMR jit on Linux/x86_64' + engine: 'wamr-jit' + repo: 'com_github_bytecodealliance_wasm_micro_runtime' + os: ubuntu-20.04 + arch: x86_64 + action: test + flags: --config=clang + deps: lld-12 + cache: true + - name: 'WAMR jit on macOS/x86_64' + engine: 'wamr-jit' + repo: 'com_github_bytecodealliance_wasm_micro_runtime' + os: macos-11 + arch: x86_64 + action: test + cache: true - name: 'WasmEdge on Linux/x86_64' engine: 'wasmedge' repo: 'com_github_wasmedge_wasmedge' diff --git a/bazel/BUILD b/bazel/BUILD index 4a83aa444..650fa29d8 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -27,8 +27,13 @@ config_setting( ) config_setting( - name = "engine_wamr", - values = {"define": "engine=wamr"}, + name = "engine_wamr_interp", + values = {"define": "engine=wamr-interp"}, +) + +config_setting( + name = "engine_wamr_jit", + values = {"define": "engine=wamr-jit"}, ) config_setting( diff --git a/bazel/external/wamr.BUILD b/bazel/external/wamr.BUILD index 9e7445ffc..9ef6850e9 100644 --- a/bazel/external/wamr.BUILD +++ b/bazel/external/wamr.BUILD @@ -11,20 +11,38 @@ filegroup( cmake( name = "wamr_lib", - cache_entries = { - "WAMR_BUILD_AOT": "0", - "WAMR_BUILD_FAST_INTERP": "1", - "WAMR_BUILD_INTERP": "1", - "WAMR_BUILD_JIT": "0", - "WAMR_BUILD_LIBC_WASI": "0", - "WAMR_BUILD_MULTI_MODULE": "0", - "WAMR_BUILD_SIMD": "0", - "WAMR_BUILD_TAIL_CALL": "1", - "WAMR_BUILD_WASM_CACHE": "0", - "WAMR_DISABLE_HW_BOUND_CHECK": "0", - "WAMR_DISABLE_STACK_HW_BOUND_CHECK": "1", - }, - generate_args = ["-GNinja"], + generate_args = [ + "-DWAMR_BUILD_LIBC_WASI=0", + "-DWAMR_BUILD_MULTI_MODULE=0", + "-DWAMR_BUILD_TAIL_CALL=1", + "-DWAMR_DISABLE_HW_BOUND_CHECK=0", + "-DWAMR_DISABLE_STACK_HW_BOUND_CHECK=1", + "-GNinja", + ] + select({ + "@proxy_wasm_cpp_host//bazel:engine_wamr_jit": [ + "-DLLVM_DIR=$EXT_BUILD_DEPS/copy_llvm_13_0_1/llvm/lib/cmake/llvm", + "-DWAMR_BUILD_AOT=1", + "-DWAMR_BUILD_FAST_INTERP=0", + "-DWAMR_BUILD_INTERP=0", + "-DWAMR_BUILD_JIT=1", + "-DWAMR_BUILD_SIMD=1", + ], + "//conditions:default": [ + "-DWAMR_BUILD_AOT=0", + "-DWAMR_BUILD_FAST_INTERP=1", + "-DWAMR_BUILD_INTERP=1", + "-DWAMR_BUILD_JIT=0", + "-DWAMR_BUILD_SIMD=0", + ], + }), lib_source = ":srcs", + linkopts = select({ + "@proxy_wasm_cpp_host//bazel:engine_wamr_jit": ["-ldl"], + "//conditions:default": [], + }), out_static_libs = ["libvmlib.a"], + deps = select({ + "@proxy_wasm_cpp_host//bazel:engine_wamr_jit": ["@llvm-13_0_1//:llvm_13_0_1_lib"], + "//conditions:default": [], + }), ) diff --git a/bazel/external/wamr_llvm.BUILD b/bazel/external/wamr_llvm.BUILD new file mode 100644 index 000000000..0efdbc9b6 --- /dev/null +++ b/bazel/external/wamr_llvm.BUILD @@ -0,0 +1,136 @@ +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_13_0_1_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_IDE": "off", + "LLVM_ENABLE_LIBEDIT": "off", + "LLVM_ENABLE_LIBXML2": "off", + "LLVM_ENABLE_TERMINFO": "off", + "LLVM_ENABLE_ZLIB": "off", + "LLVM_TARGETS_TO_BUILD": "X86", + "CMAKE_CXX_FLAGS": "-Wno-unused-command-line-argument", + }, + # `lld` doesn't work on MacOS + generate_args = select({ + "@platforms//os:linux": [ + "-GNinja", + "-DLLVM_USE_LINKER=lld", + ], + "//conditions:default": [ + "-GNinja", + ], + }), + lib_source = ":srcs", + out_data_dirs = [ + "bin", + "include", + "lib", + "libexec", + "share", + ], + out_static_libs = [ + # How to get the library list: + # build LLVM with "-DLLVM_INCLUDE_TOOLS=ON" + # cd bin and run "./llvm-config --libnames" + "libLLVMWindowsManifest.a", + "libLLVMXRay.a", + "libLLVMLibDriver.a", + "libLLVMDlltoolDriver.a", + "libLLVMCoverage.a", + "libLLVMLineEditor.a", + "libLLVMX86Disassembler.a", + "libLLVMX86AsmParser.a", + "libLLVMX86CodeGen.a", + "libLLVMX86Desc.a", + "libLLVMX86Info.a", + "libLLVMOrcJIT.a", + "libLLVMMCJIT.a", + "libLLVMJITLink.a", + "libLLVMInterpreter.a", + "libLLVMExecutionEngine.a", + "libLLVMRuntimeDyld.a", + "libLLVMOrcTargetProcess.a", + "libLLVMOrcShared.a", + "libLLVMDWP.a", + "libLLVMSymbolize.a", + "libLLVMDebugInfoPDB.a", + "libLLVMDebugInfoGSYM.a", + "libLLVMOption.a", + "libLLVMObjectYAML.a", + "libLLVMMCA.a", + "libLLVMMCDisassembler.a", + "libLLVMLTO.a", + "libLLVMPasses.a", + "libLLVMCFGuard.a", + "libLLVMCoroutines.a", + "libLLVMObjCARCOpts.a", + "libLLVMipo.a", + "libLLVMVectorize.a", + "libLLVMLinker.a", + "libLLVMInstrumentation.a", + "libLLVMFrontendOpenMP.a", + "libLLVMFrontendOpenACC.a", + "libLLVMExtensions.a", + "libLLVMDWARFLinker.a", + "libLLVMGlobalISel.a", + "libLLVMMIRParser.a", + "libLLVMAsmPrinter.a", + "libLLVMDebugInfoMSF.a", + "libLLVMDebugInfoDWARF.a", + "libLLVMSelectionDAG.a", + "libLLVMCodeGen.a", + "libLLVMIRReader.a", + "libLLVMAsmParser.a", + "libLLVMInterfaceStub.a", + "libLLVMFileCheck.a", + "libLLVMFuzzMutate.a", + "libLLVMTarget.a", + "libLLVMScalarOpts.a", + "libLLVMInstCombine.a", + "libLLVMAggressiveInstCombine.a", + "libLLVMTransformUtils.a", + "libLLVMBitWriter.a", + "libLLVMAnalysis.a", + "libLLVMProfileData.a", + "libLLVMObject.a", + "libLLVMTextAPI.a", + "libLLVMMCParser.a", + "libLLVMMC.a", + "libLLVMDebugInfoCodeView.a", + "libLLVMBitReader.a", + "libLLVMCore.a", + "libLLVMRemarks.a", + "libLLVMBitstreamReader.a", + "libLLVMBinaryFormat.a", + "libLLVMTableGen.a", + "libLLVMSupport.a", + "libLLVMDemangle.a", + ], +) diff --git a/bazel/repositories.bzl b/bazel/repositories.bzl index 48b3c75ca..b56aa4c1b 100644 --- a/bazel/repositories.bzl +++ b/bazel/repositories.bzl @@ -159,10 +159,10 @@ def proxy_wasm_cpp_host_repositories(): http_archive, name = "com_github_bytecodealliance_wasm_micro_runtime", build_file = "@proxy_wasm_cpp_host//bazel/external:wamr.BUILD", - # WAMR-2022-12-07 - sha256 = "6a5263ad022176257a93b39b02f95f615c0c590da1798c86c935f501a51c30c4", - strip_prefix = "wasm-micro-runtime-c3d66f916ef8093e5c8cacf3329ed968f807cf58", - url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/c3d66f916ef8093e5c8cacf3329ed968f807cf58.tar.gz", + # WAMR-2022-12-16 + sha256 = "976b928f420040a77e793051e4d742208adf157370b9ad0f5535e126adb31eb0", + strip_prefix = "wasm-micro-runtime-WAMR-1.1.2", + url = "https://github.com/bytecodealliance/wasm-micro-runtime/archive/WAMR-1.1.2.tar.gz", ) native.bind( @@ -170,6 +170,15 @@ def proxy_wasm_cpp_host_repositories(): actual = "@com_github_bytecodealliance_wasm_micro_runtime//:wamr_lib", ) + maybe( + http_archive, + name = "llvm-13_0_1", + build_file = "@proxy_wasm_cpp_host//bazel/external:wamr_llvm.BUILD", + sha256 = "ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834", + strip_prefix = "llvm-13.0.1.src", + url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-13.0.1.src.tar.xz", + ) + # WasmEdge with dependencies. maybe( diff --git a/bazel/select.bzl b/bazel/select.bzl index d79862ace..747aef33c 100644 --- a/bazel/select.bzl +++ b/bazel/select.bzl @@ -28,7 +28,8 @@ def proxy_wasm_select_engine_v8(xs): def proxy_wasm_select_engine_wamr(xs): return select({ - "@proxy_wasm_cpp_host//bazel:engine_wamr": xs, + "@proxy_wasm_cpp_host//bazel:engine_wamr_interp": xs, + "@proxy_wasm_cpp_host//bazel:engine_wamr_jit": xs, "@proxy_wasm_cpp_host//bazel:multiengine": xs, "//conditions:default": [], })