blob: 96179886ce416843a6f0dac4c432590142ac5718 [file] [log] [blame] [view]
# Building Emdawnwebgpu
**Emdawnwebgpu is easiest to use as a pre-built package from
<https://github.com/google/dawn/releases>. For information on using those,
and other general information, read [`pkg/README.md`](pkg/README.md) instead.**
This README discusses building the pre-packaged `emdawnwebgpu_pkg`, building the
in-tree Dawn samples/tests for Wasm, and using our CMake or GN build files to
link either Dawn (for native) or Emdawnwebgpu (for Wasm).
## Setting up a CMake project that automatically chooses Dawn or Emdawnwebgpu
Please read <https://developer.chrome.com/docs/web-platform/webgpu/build-app>.
## Building emdawnwebgpu and emdawnwebgpu_pkg
First, get the Dawn code and its dependencies.
See [building.md](../../docs/building.md).
To build the package, you'll build Dawn's `emdawnwebgpu_pkg` target using
Emscripten. `out/yourbuild/emdawnwebgpu_pkg` combines files from:
- `src/emdawnwebgpu`
- `third_party/emdawnwebgpu`
- `out/yourbuild/gen`
### Set up Emscripten
Get an emsdk toolchain (at least Emscripten 4.0.3, which includes the necessary
tools in the package release). There are two options to do this:
- Set the `dawn_wasm` gclient variable (use
[`standalone-with-wasm.gclient`](../../scripts/standalone-with-wasm.gclient)
as your `.gclient`), and `gclient sync`.
This installs emsdk in `//third_party/emsdk`.
- Install it manually following the official
[instructions](https://emscripten.org/docs/getting_started/downloads.html#installation-instructions-using-the-emsdk-recommended).
### Standalone with CMake
Set up the build directory using emcmake:
```sh
mkdir out/cmake-wasm
cd out/cmake-wasm
path/to/emsdk/upstream/emscripten/emcmake cmake ../..
# Package
make -j8 emdawnwebgpu_pkg
```
Samples and tests:
```sh
# Samples (for a list of samples, see ENABLE_EMSCRIPTEN targets in src/dawn/samples/CMakeLists.txt)
make -j8 HelloTriangle
# Tests
make -j8 emdawnwebgpu_tests_asyncify emdawnwebgpu_tests_jspi
```
(To use Ninja instead of Make, for better parallelism, add `-GNinja` to the
`cmake` invocation, and build using `ninja`.)
Samples and tests produce HTML files which can be served and viewed in a compatible browser.
### Standalone with GN
- Set up Emscripten as per instructions above using `dawn_wasm`.
- Build the `emdawnwebgpu` and `samples` GN build targets.
Samples and tests produce HTML files in `out/<dir>/wasm` which can be served and viewed in a compatible browser.