Building V8 with GN
V8 is built with the help of GN. GN is a meta build system of sorts, as it generates build files for a number of other build systems. How you build therefore depends on what “back-end” build system and compiler you’re using.
The instructions below assume that you already have a checkout of V8 and that you have installed the build dependencies.
More information on GN can be found in Chromium’s documentation or GN’s own docs.
Building V8 from source involves three steps:
- generating build files
- running tests
There are two workflows for building V8:
- the convenience workflow using a helper script called
gmthat nicely combines all three steps
- the raw workflow, where you run separate commands on a lower level for each step manually
Building V8 using
gm (the convenience workflow) #
gm is a convenience all-in-one script that generates build files, triggers the build and optionally also runs the tests. It can be found at
tools/dev/gm.py in your V8 checkout. We recommend adding an alias to your shell configuration:
You can then use
gm to build V8 for known configurations, such as
To run the tests right after the build, run:
gm outputs all the commands it’s executing, making it easy to track and re-execute them if necessary.
gm enables building the required binaries and running specific tests with a single command:
gm x64.debug mjsunit/foo cctest/test-bar/*
Building V8: the raw, manual workflow #
Step 1: generate build files #
There are several ways of generating the build files:
- The raw, manual workflow involves using
- A helper script named
v8genstreamlines the process for common configurations.
Generating build files using
Generate build files for the directory
gn args out/foo
This opens an editor window for specifying the
gn arguments. Alternatively, you can pass the arguments on the command line:
gn gen out/foo --args='is_debug=false target_cpu="x64" v8_target_cpu="arm64" use_goma=true'
This generates build files for compiling V8 with the arm64 simulator in release mode using
goma for compilation.
For an overview of all available
gn arguments, run:
gn args out/foo --list
Generate build files using
The V8 repository includes a
v8gen convenience script to more easily generate build files for common configurations. We recommend adding an alias to your shell configuration:
v8gen --help for more information.
List available configurations (or bots from a master):
v8gen list -m client.v8
Build like a particular bot from the
client.v8 waterfall in folder
v8gen -b 'V8 Linux64 - debug builder' -m client.v8 foo
Step 2: compile V8 #
To build all of V8 (assuming
gn generated to the
x64.release folder), run:
ninja -C out/x64.release
To build specific targets like
d8, append them to the command:
ninja -C out/x64.release d8
Step 3: run tests #
You can pass the output directory to the test driver. Other relevant flags are inferred from the build:
tools/run-tests.py --outdir out/foo
You can also test your most recently compiled build (in
Build issues? File a bug at v8.dev/bug or ask for help on firstname.lastname@example.org.