README.md
1# Prerequisites
2
3To compile CanvasKit, you will first need to [install `emscripten`][1]. This
4will set the environment `EMSDK` (among others) which is required for
5compilation.
6
7# Compile and Test Locally
8
9```
10make release # make debug is much faster and has better error messages
11make local-example
12```
13
14This will print a local endpoint for viewing the example. You can experiment
15with the CanvasKit API by modifying `./canvaskit/example.html` and refreshing
16the page. For some more experimental APIs, there's also `./canvaskit/extra.html`.
17
18For other available build targets, see `Makefile` and `compile.sh`.
19For example, building a stripped-down version of CanvasKit with no text support or
20any of the "extras", one might run:
21
22 ./compile.sh no_skottie no_particles no_font
23
24Such a stripped-down version is about half the size of the default release build.
25
26[1]: https://emscripten.org/docs/getting_started/downloads.html
27
28
29# Infrastructure Playbook
30
31When dealing with CanvasKit (or PathKit) on our bots, we use Docker. Check out
32$SKIA_ROOT/infra/wasm-common/docker/README.md for more on building/editing the
33images used for building and testing.
34
35## Updating the version of Emscripten we build/test with
36
37This presumes you have updated emscripten locally to a newer version of the
38sdk and verified/fixed any build issues that have arisen.
39
40 1. Edit `$SKIA_ROOT/infra/wasm-common/docker/emsdk-base/Dockerfile` to install
41 and activate the desired version of Emscripten.
42 2. Edit `$SKIA_ROOT/infra/wasm-common/docker/Makefile` to have `EMSDK_VERSION` be
43 set to that desired version. If there is a suffix that is not `_v1`, reset
44 it to be `_v1`. If testing the image later does not work and edits are made
45 to the emsdk-base Dockerfile to correct that, increment to `_v2`,`_v3`, etc
46 to force the bots to pick up the new image.
47 3. In `$SKIA_ROOT/infra/wasm-common/docker/`, run `make publish_emsdk_base`
48 4. Edit `$SKIA_ROOT/infra/canvaskit/docker/canvaskit-emsdk/Dockerfile` to be based
49 off the new version from step 2. CanvasKit has its own docker image because
50 it needs a few extra dependencies to build with font support.
51 5. Edit `$SKIA_ROOT/infra/canvaskit/docker/Makefile` to have the same version
52 from step 2. It's easiest to keep the `emsdk-base` and `canvaskit-emsdk` versions
53 be in lock-step.
54 6. In `$SKIA_ROOT/infra/canvaskit/docker/`, make `publish_canvaskit_emsdk`.
55 7. In `$SKIA_ROOT/infra/bots/recipe_modules/build/`, update `canvaskit.py`
56 and `pathkit.py` to have `DOCKER_IMAAGE` point to the desired tagged Docker
57 containers from steps 2 and 5 (which should be the same).
58 9. In `$SKIA_ROOT/infra/bots/`, run `make train` to re-train the recipes.
59 10. Optional: Run something like `git grep 1\\.38\\.` in `$SKIA_ROOT` to see if
60 there are any other references that need updating.
61 11. Upload a CL with all the changes. Run all Test.+CanvasKit, Perf.+CanvasKit,
62 Test.+PathKit, Perf.+PathKit jobs to make sure the new builds pass all
63 tests and don't crash the perf harnesses.
64 12. Send out CL for review. Feel free to point the reviewer at these steps.