Changes are largely mechanical. Non-mechanical changes to support newer versions of emscripten are enumerated below, in format ${EMSCRIPTEN_VERSION}: ${RELEVANT_CHANGE}. - 1.39.9: TOTAL_MEMORY has been renamed INITIAL_MEMORY. - 1.39.12: passing of linker flags to wasm-ld has changed in a way that requires supplying `--no-entry` to avoid error message "wasm-ld: error: entry symbol not defined (pass --no-entry to suppress): main". - 1.39.16: The factory function created by using `MODULARIZE` build option now returns a Promise instead of the module instance. As such, the ready.js workaround is removed. Note this is a breaking API change for CanvasKit, which now uses just `then()` and not `ready().then()`. - 1.38.33: `emsdk install` hasn't required the `-64bit` suffix on version names since `1.38.33`, so we remove them. E.g. `emsdk install sdk-1.39.6-64bit` simply becomes `emsdk install sdk-1.39.16`. cf. https://github.com/emscripten-core/emscripten/blob/master/ChangeLog.md Bug: NONE Change-Id: Iabec4bd5ad7db2e0715ad42c2e4cf7d67b192b4c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/291182 Reviewed-by: Kevin Lubick <kjlubick@google.com>
3.1 KiB
Prerequisites
To compile CanvasKit, you will first need to install emscripten
. This
will set the environment EMSDK
(among others) which is required for
compilation.
Compile and Test Locally
make release # make debug is much faster and has better error messages
make local-example
This will print a local endpoint for viewing the example. You can experiment
with the CanvasKit API by modifying ./canvaskit/example.html
and refreshing
the page. For some more experimental APIs, there's also ./canvaskit/extra.html
.
For other available build targets, see Makefile
and compile.sh
.
For example, building a stripped-down version of CanvasKit with no text support or
any of the "extras", one might run:
./compile.sh no_skottie no_particles no_font
Such a stripped-down version is about half the size of the default release build.
Infrastructure Playbook
When dealing with CanvasKit (or PathKit) on our bots, we use Docker. Check out $SKIA_ROOT/infra/wasm-common/docker/README.md for more on building/editing the images used for building and testing.
Updating the version of Emscripten we build/test with
This presumes you have updated emscripten locally to a newer version of the sdk and verified/fixed any build issues that have arisen.
- Edit
$SKIA_ROOT/infra/wasm-common/docker/emsdk-base/Dockerfile
to install and activate the desired version of Emscripten. - Edit
$SKIA_ROOT/infra/wasm-common/docker/Makefile
to haveEMSDK_VERSION
be set to that desired version. If there is a suffix that is not_v1
, reset it to be_v1
. If testing the image later does not work and edits are made to the emsdk-base Dockerfile to correct that, increment to_v2
,_v3
, etc to force the bots to pick up the new image. - In
$SKIA_ROOT/infra/wasm-common/docker/
, runmake publish_emsdk_base
- Edit
$SKIA_ROOT/infra/canvaskit/docker/canvaskit-emsdk/Dockerfile
to be based off the new version from step 2. CanvasKit has its own docker image because it needs a few extra dependencies to build with font support. - Edit
$SKIA_ROOT/infra/canvaskit/docker/Makefile
to have the same version from step 2. It's easiest to keep theemsdk-base
andcanvaskit-emsdk
versions be in lock-step. - In
$SKIA_ROOT/infra/canvaskit/docker/
, runmake publish_canvaskit_emsdk
. - In
$SKIA_ROOT/infra/bots/recipe_modules/build/
, updatecanvaskit.py
andpathkit.py
to haveDOCKER_IMAGE
point to the desired tagged Docker containers from steps 2 and 5 (which should be the same). - In
$SKIA_ROOT/infra/bots/
, runmake train
to re-train the recipes. - Optional: Run something like
git grep 1\\.38\\.
in$SKIA_ROOT
to see if there are any other references that need updating. - Upload a CL with all the changes. Run all Test.+CanvasKit, Perf.+CanvasKit, Test.+PathKit, Perf.+PathKit jobs to make sure the new builds pass all tests and don't crash the perf harnesses.
- Send out CL for review. Feel free to point the reviewer at these steps.