Skip to content

Commit 6223372

Browse files
committed
feat: add WAMR WebAssembly engine support for Halide JIT
1 parent dd187a2 commit 6223372

3 files changed

Lines changed: 464 additions & 11 deletions

File tree

doc/BuildingHalideWithCMake.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ building the core pieces of Halide.
150150
| [flatbuffers] | `~=23.5.26` | `WITH_SERIALIZATION=ON` | |
151151
| [wabt] | `==1.0.39` | `Halide_WASM_BACKEND=wabt` | Does not have a stable API; exact version required. |
152152
| [V8] | trunk | `Halide_WASM_BACKEND=V8` | Difficult to build. See [WebAssembly.md] |
153+
| [WAMR] | `>=2.4.3` | `Halide_WASM_BACKEND=WAMR` | Built natively as static library from source. |
153154
| [Python] | `>=3.10` | `WITH_PYTHON_BINDINGS=ON` | |
154155
| [pybind11] | `~=2.11.1` | `WITH_PYTHON_BINDINGS=ON` | |
155156

@@ -456,7 +457,7 @@ The following option selects the execution engine for in-process WASM testing:
456457

457458
| Option | Default | Description |
458459
| --------------------- | ------- | ---------------------------------------------------------------------------------------- |
459-
| `Halide_WASM_BACKEND` | `wabt` | Select the backend for WASM testing. Can be `wabt`, `V8` or a false value such as `OFF`. |
460+
| `Halide_WASM_BACKEND` | `wabt` | Select the backend for WASM testing. Can be `wabt`, `V8`, `WAMR` or a false value such as `OFF`. |
460461

461462
## Installing
462463

src/CMakeLists.txt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ target_compile_definitions(Halide PUBLIC
580580

581581
set(Halide_WASM_BACKEND "wabt"
582582
CACHE STRING "Which backend to use for Halide's WASM testing.")
583-
set_property(CACHE Halide_WASM_BACKEND PROPERTY STRINGS "wabt;V8;OFF")
583+
set_property(CACHE Halide_WASM_BACKEND PROPERTY STRINGS "wabt;V8;WAMR;OFF")
584584

585585
if (MSVC AND Halide_WASM_BACKEND STREQUAL "wabt")
586586
message(WARNING "wabt is not yet supported on Windows")
@@ -598,6 +598,31 @@ elseif (Halide_WASM_BACKEND STREQUAL "V8")
598598
_Halide_pkgdep(V8)
599599
target_compile_definitions(Halide PRIVATE WITH_V8)
600600
target_link_libraries(Halide PRIVATE V8::V8)
601+
elseif (Halide_WASM_BACKEND STREQUAL "WAMR")
602+
set(Halide_WAMR_ROOT_DIR "" CACHE PATH "Path to root directory of WAMR repository sources")
603+
604+
if ("${Halide_WAMR_ROOT_DIR}" STREQUAL "")
605+
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../wasm-micro-runtime/build-scripts/runtime_lib.cmake")
606+
set(WAMR_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../wasm-micro-runtime")
607+
else()
608+
message(FATAL_ERROR "WAMR backend requires specifying Halide_WAMR_ROOT_DIR or cloning wasm-micro-runtime adjacent to the Halide repository.")
609+
endif()
610+
else()
611+
set(WAMR_ROOT_DIR "${Halide_WAMR_ROOT_DIR}")
612+
endif()
613+
614+
set(WAMR_BUILD_PLATFORM "linux")
615+
set(WAMR_BUILD_TARGET "X86_64")
616+
set(WAMR_BUILD_INTERP 1)
617+
set(WAMR_BUILD_FAST_INTERP 1)
618+
set(WAMR_BUILD_REF_TYPES 1)
619+
set(WAMR_BUILD_SIMD 1)
620+
set(WAMR_BUILD_LIB_SIMDE 1)
621+
include(${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
622+
add_library(wamr_lib STATIC ${WAMR_RUNTIME_LIB_SOURCE})
623+
target_link_libraries(Halide PRIVATE wamr_lib)
624+
target_compile_definitions(Halide PRIVATE WITH_WAMR)
625+
target_include_directories(Halide PRIVATE "${WAMR_ROOT_DIR}/core/iwasm/include")
601626
elseif (Halide_WASM_BACKEND)
602627
message(FATAL_ERROR "Unknown Halide_WASM_BACKEND `${Halide_WASM_BACKEND}`")
603628
endif ()

0 commit comments

Comments
 (0)