diff options
Diffstat (limited to 'media/libjxl/src/doc/building_wasm.md')
-rw-r--r-- | media/libjxl/src/doc/building_wasm.md | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/media/libjxl/src/doc/building_wasm.md b/media/libjxl/src/doc/building_wasm.md new file mode 100644 index 0000000000..a4a52ee55a --- /dev/null +++ b/media/libjxl/src/doc/building_wasm.md @@ -0,0 +1,83 @@ +# Building WASM artifacts + +This file describes the building and testing of JPEG XL +[Web Assembly](https://webassembly.org/) bundles and wrappers. + +These instructions assume an up-to-date Debian/Ubuntu system. +For other platforms, or if you encounter any difficulties, +please instead use the [Docker container](developing_in_docker.md). + +For the sake of simplicity, it is considered, that the following environment +variables are set: + + * `OPT` - path to the directory containing additional software; + the `emsdk` directory with the Emscripten SDK should reside there; + in the Docker container (mentioned above) this should be `/opt` + +## Requirements + +[CMake](https://cmake.org/) is used as a build system. To install it, follow +[Debian build instructions](developing_in_debian.md). + +[Emscripten SDK](https://emscripten.org/) is required for building +WebAssembly artifacts. To install it, follow the +[Download and Install](https://emscripten.org/docs/getting_started/downloads.html) +guide: + +```bash +cd $OPT + +# Get the emsdk repo. +git clone https://github.com/emscripten-core/emsdk.git + +# Enter that directory. +cd emsdk + +# Download and install the latest SDK tools. +./emsdk install latest + +# Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file) +./emsdk activate latest +``` + +[v8](https://v8.dev/) is a JavaScript engine used for running tests. +v8 has better WASM SIMD support than NodeJS 14. +To install it use [JSVU](https://github.com/GoogleChromeLabs/jsvu): + +```bash +# Fix some v8 version know to work well. +export v8_version="8.5.133" + +# Install JSVU +npm install jsvu -g + +# Trick JSVU to install to specific location instead of user "home". +# Note: "os" flag should match the host OS. +HOME=$OPT jsvu --os=linux64 "v8@${v8_version}" + +# Link v8 binary to version-indepentent path. +ln -s "$OPT/.jsvu/v8-${v8_version}" "$OPT/.jsvu/v8" +``` + +In [Docker container](developing_in_docker.md) +CMake, Emscripten SDK and V8 are pre-installed. + +## Building and testing the project + +```bash +# Setup EMSDK and other environment variables. In practice EMSDK is set to be +# $OPT/emsdk. +source $OPT/emsdk/emsdk_env.sh + +# Specify JS engine binary +export V8=$OPT/.jsvu/v8 + +# If building using the jpegxl-builder docker container prefix the following commands with: +# CMAKE_FLAGS=-I/usr/wasm32/include +# ex. CMAKE_FLAGS=-I/usr/wasm32/include BUILD_TARGET=wasm32 emconfigure ./ci.sh release + +# Either build with regular WASM: +BUILD_TARGET=wasm32 emconfigure ./ci.sh release +# or with SIMD WASM: +BUILD_TARGET=wasm32 ENABLE_WASM_SIMD=1 emconfigure ./ci.sh release +``` |