Current section
Files
Jump to
Current section
Files
cmake/modules/emscripten/CMakeLists.txt
message("Compiling for WebAssembly/Emscripten")
set(EMSCRIPTEN ON)
set(IREE_BUILD_COMPILER OFF)
set(IREE_BUILD_TESTS OFF)
# Emscripten builds don't support embedded ELF libraries.
set(IREE_HAL_DRIVER_DEFAULTS OFF)
set(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF OFF)
set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF OFF)
set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF)
set(IREE_HAL_EXECUTABLE_LOADER_SYSTEM_LIBRARY ON)
set(IREE_HAL_DRIVER_LOCAL_SYNC ON)
set(HAVE_POSIX_REGEX 0)
# Either WASM=1 SIDE_MODULE=1 or WASM=<0|2> MAIN_MODULE=1
set(EXPORTED_RUNTIME_METHODS_LIST "ccall" "cwrap" "getValue" "setValue")
set(EXPORTED_RUNTIME_METHODS "")
foreach(METHOD IN LISTS EXPORTED_RUNTIME_METHODS_LIST)
set(EXPORTED_RUNTIME_METHODS "${EXPORTED_RUNTIME_METHODS}\"${METHOD}\", ")
endforeach()
string(REGEX REPLACE ", $" "" EXPORTED_RUNTIME_METHODS "${EXPORTED_RUNTIME_METHODS}")
set(EXPORTED_RUNTIME_METHODS "[${EXPORTED_RUNTIME_METHODS}]")
set(EXPORTED_FUNCTIONS_LIST "_malloc" "_free" "_ensure_malloc_free")
set(EXPORTED_FUNCTIONS "")
foreach(METHOD IN LISTS EXPORTED_FUNCTIONS_LIST)
set(EXPORTED_FUNCTIONS "${EXPORTED_FUNCTIONS}\"${METHOD}\", ")
endforeach()
string(REGEX REPLACE ", $" "" EXPORTED_FUNCTIONS "${EXPORTED_FUNCTIONS}")
set(EXPORTED_FUNCTIONS "[${EXPORTED_FUNCTIONS}]")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-DEMSCRIPTEN -fvisibility=default \
-O3 -sMAIN_MODULE=2 -sENVIRONMENT=web \
-sNO_DISABLE_EXCEPTION_CATCHING -sNO_DISABLE_EXCEPTION_THROWING \
--no-entry -sWASM_BIGINT -sALLOW_MEMORY_GROWTH=1 \
-sEXPORTED_FUNCTIONS='${EXPORTED_FUNCTIONS}' \
-sEXPORTED_RUNTIME_METHODS='${EXPORTED_RUNTIME_METHODS}' \
-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE=free,malloc")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lembind")
# Define the output files for both WebAssembly and JavaScript
set(WASM_OUTPUT "${CMAKE_BINARY_DIR}/${_NAME}.wasm")
set(JS_OUTPUT "${CMAKE_BINARY_DIR}/${_NAME}.mjs")
# Build the WebAssembly executable
add_executable(${_NAME} ${iree_runtime_sources})
set_target_properties(${_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
SUFFIX ".mjs"
)
install(
FILES ${WASM_OUTPUT} ${JS_OUTPUT}
DESTINATION "."
)
target_link_libraries(${_NAME}
iree_runtime_runtime
iree_hal_local_executable_plugin_manager
iree_hal_local_loaders_system_library_loader
iree_hal_local_loaders_vmvx_module_loader
iree_hal_drivers_local_sync_sync_driver
)