summaryrefslogtreecommitdiff
path: root/media/libjxl/src/doc/building_wasm.md
diff options
context:
space:
mode:
Diffstat (limited to 'media/libjxl/src/doc/building_wasm.md')
-rw-r--r--media/libjxl/src/doc/building_wasm.md83
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
+```