From 32954f962d51b2064d900e7111bd52af645532c4 Mon Sep 17 00:00:00 2001 From: Jinny You Date: Thu, 8 Aug 2024 16:09:02 +0900 Subject: [PATCH] wasm/infra: Add build scripts for WebGPU New build script for WASM with WebGPU. Run `wasm_webgpu_build.sh` to have WebGPU WASM binary --- cross/wasm_webgpu.txt | 21 +++++++++++++++++++++ src/renderer/wg_engine/meson.build | 5 ++++- wasm_webgpu_build.sh | 11 +++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 cross/wasm_webgpu.txt create mode 100755 wasm_webgpu_build.sh diff --git a/cross/wasm_webgpu.txt b/cross/wasm_webgpu.txt new file mode 100644 index 00000000..42b59585 --- /dev/null +++ b/cross/wasm_webgpu.txt @@ -0,0 +1,21 @@ +[binaries] +cpp = 'EMSDK:upstream/emscripten/em++.py' +ar = 'EMSDK:upstream/emscripten/emar.py' +strip = '-strip' + +[properties] +root = 'EMSDK:upstream/emscripten/system' +shared_lib_suffix = 'js' +static_lib_suffix = 'js' +shared_module_suffix = 'js' +exe_suffix = 'js' + +[built-in options] +cpp_args = ['-Wshift-negative-value', '-flto', '-Os', '-fno-exceptions'] +cpp_link_args = ['-lembind', '-sMODULARIZE=1', '-sUSE_WEBGPU=1', '-sASYNCIFY=1', '-sFORCE_FILESYSTEM=1', '-sALLOW_MEMORY_GROWTH=1', '-sEXPORT_ES6=1', '-sSINGLE_FILE=1'] + +[host_machine] +system = 'emscripten' +cpu_family = 'wasm32' +cpu = 'wasm32' +endian = 'little' diff --git a/src/renderer/wg_engine/meson.build b/src/renderer/wg_engine/meson.build index 51666993..4165a765 100755 --- a/src/renderer/wg_engine/meson.build +++ b/src/renderer/wg_engine/meson.build @@ -21,7 +21,10 @@ source_file = [ 'tvgWgShaderTypes.cpp' ] -wgpu_dep = dependency('wgpu_native') +wgpu_dep = [] +if not get_option('bindings').contains('wasm_beta') + wgpu_dep = dependency('wgpu_native') +endif engine_dep += [declare_dependency( dependencies : wgpu_dep, diff --git a/wasm_webgpu_build.sh b/wasm_webgpu_build.sh new file mode 100755 index 00000000..1113cdba --- /dev/null +++ b/wasm_webgpu_build.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +#https://github.com/thorvg/thorvg/wiki/WebGPU-Raster-Engine-Development + +if [ ! -d "./build_wasm" ]; then + sed "s|EMSDK:|$1|g" ./cross/wasm_webgpu.txt > /tmp/.wasm_cross.txt + meson -Db_lto=true -Ddefault_library=static -Dstatic=true -Dloaders="all" -Dsavers="all" -Dthreads=false -Dbindings="wasm_beta" -Dengines="wg_beta" --cross-file /tmp/.wasm_cross.txt build_wasm +fi + +ninja -C build_wasm/ +ls -lrt build_wasm/src/bindings/wasm/thorvg-wasm.*