Flutter Engine
The Flutter Engine
Checkout

Ensure you have a valid checkout by following the Getting the source instructions.

In order to be able to run on all tests modify the ../.gclient file by adding custom variables:

solutions = [
{
"name" : "sdk",
...
"custom_vars" : {
"download_emscripten": True,
"download_firefox": True,
"download_chrome": True,
"checkout_flute": True,
"checkout_javascript_engines": True,
},
},
]

This configures the DEPS to download various tools on the next gclient sync invocation.

Building Dart2Wasm

To build dart2wasm for local running & testing we use

% tools/build.py -mrelease -ax64 dart2wasm

This will

  • generate out/ReleaseX64/dart2wasm_platform.dill
  • make an AOT snapshot of the dart2wasm compiler itself

Building Dart2Wasm as part of the Dart SDK build

Building the Dart SDK with

% tools/build.py -mrelease -ax64 create_sdk

will allow you to run the compiler via dart compile wasm.

Local development

For local development one can use two helper scripts to compile & run wasm apps:

% pkg/dart2wasm/tool/compile_benchmark -O0 -g app.dart app.wasm
% pkg/dart2wasm/tool/run_benchmark --d8 app.wasm

This will

  • compile app.dart with dart2wasm
  • will not run binaryen/wasm-opt for wasm2wasm optimizations (due to -O0)
  • will keep name section for debugging / profiling (due to -g)
  • run the app in D8

(The reason those scripts have "benchmark" in their name is historic - due to them also being used by golem)

(The compilation can also be done using dart compile wasm which accepts similar flags to compile_benchmark)

Run dart2wasm from source

To avoid re-building with tools/build.py ... dart2wasm one run the compiler from source:

  • Use pkg/dart2wasm/tool/compile_benchmark --src ...
  • Use pkg/dart2wasm/tool/compile_benchmark --src --compiler-asserts ...

One can pass through any option to the dart2wasm compiler by adding --extra-compiler-option=--<option>=<value>.

See available options via dart pkg/dart2wasm/bin/dart2wasm.dart --help.

Testing Dart2Wasm

One can run dart2wasm tests as usual with

# Takes approval database into account
% dart tools/test.dart -n dart2wasm-linux-(optimized-){d8,jsc,jsshell}
# Takes only status files into account
% tools/test.py -n dart2wasm-linux-(optimized-){d8,jsc,jsshell}

The test framwork will use the same two scripts to compile & run ( pkg/dart2wasm/tool/{compile,run}_benchmark) as

(The test framework can be asked to use dart compile wasm from the SDK instead using --use-sdk (or update in tools/bots/test_matrix.json))