blob: 07cf465571be5b73c7aefc4a01fdb99109cd0e0b [file] [log] [blame] [view]
Scott Grahamf94d84d2017-06-26 18:24:401# Checking out and building on Fuchsia
2
David Dorwinf3fad4e2021-09-17 19:40:363***If you have followed the instructions below and things still having trouble,
4try `#cr-fuchsia` on [Chromium Slack](https://www.chromium.org/developers/slack)
5if something seems awry.***
Scott Grahamf94d84d2017-06-26 18:24:406
Scott Graham6b17c6522018-09-25 20:39:367There are instructions for other platforms linked from the
David Dorwinf3fad4e2021-09-17 19:40:368[get the code](../get_the_code.md) page.
Scott Grahamf94d84d2017-06-26 18:24:409
Fabrice de Gans-Riberi4468e912019-08-23 23:43:5410[TOC]
11
Scott Grahamf94d84d2017-06-26 18:24:4012## System requirements
13
14* A 64-bit Intel machine with at least 8GB of RAM. More than 16GB is highly
15 recommended.
16* At least 100GB of free disk space.
17* You must have Git and Python installed already.
18
Fabrice de Gans-Riberibbc67a1b2018-08-30 13:19:2119Most development is done on Ubuntu. Mac build is supported on a best-effort
20basis.
Scott Grahamf94d84d2017-06-26 18:24:4021
22## Install `depot_tools`
23
24Clone the `depot_tools` repository:
25
26```shell
27$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
28```
29
Jaeheon Yi9eaf5b522021-10-01 23:17:5630Add `depot_tools` to the end of your PATH (you will probably want to put this in
31your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to
Scott Grahamf94d84d2017-06-26 18:24:4032`/path/to/depot_tools`:
33
34```shell
35$ export PATH="$PATH:/path/to/depot_tools"
36```
37
38## Get the code
39
40Create a `chromium` directory for the checkout and change to it (you can call
41this whatever you like and put it wherever you like, as long as the full path
42has no spaces):
43
44```shell
45$ mkdir ~/chromium && cd ~/chromium
46```
47
48Run the `fetch` tool from depot_tools to check out the code and its
49dependencies.
50
51```shell
52$ fetch --nohooks chromium
53```
54
Jaeheon Yi9eaf5b522021-10-01 23:17:5655Expect the command to take 30 minutes on even a fast connection, and many hours
56on slower ones.
Scott Grahamf94d84d2017-06-26 18:24:4057
58If you've already installed the build dependencies on the machine (from another
Jaeheon Yi9eaf5b522021-10-01 23:17:5659checkout, for example), you can omit the `--nohooks` flag and `fetch` will
60automatically execute `gclient runhooks` at the end.
Scott Grahamf94d84d2017-06-26 18:24:4061
62When `fetch` completes, it will have created a hidden `.gclient` file and a
Adam MacBethc6fc88b52017-06-30 17:26:3163directory called `src` in the working directory.
Scott Grahamf94d84d2017-06-26 18:24:4064
65### Configure for building on Fuchsia
66
67Edit `.gclient` to include (this is a list, so it could also include `android`,
68etc. if necessary.)
69
70```
71target_os = ['fuchsia']
72```
73
Scott Graham9ffcea62017-06-30 21:31:3774Note that this should be added as a top-level statement in the `.gclient` file,
Sharon Yang66f3cee2019-03-19 21:16:5275not an entry inside the `solutions` dict. An example `.gclient` file would look
76as follows:
77
78```
79solutions = [
80 {
81 "url": "https://chromium.googlesource.com/chromium/src.git",
82 "managed": False,
83 "name": "src",
84 "custom_deps": {},
85 "custom_vars": {}
86 }
87]
88target_os = ['fuchsia']
89```
Scott Graham9ffcea62017-06-30 21:31:3790
Jaeheon Yi9eaf5b522021-10-01 23:17:5691The Fuchsia boot images (also called "SDK companion images") to check out are
92specified by the `checkout_fuchsia_boot_images` variable. For instance, adding
93`"checkout_fuchsia_boot_images": "qemu.x64,workstation.qemu-x64-release",` to
94the `custom_vars` section of your `.gclient` file would allow you to check out
95both images. The set of available images is listed in the
96[DEPS file](https://source.chromium.org/chromium/chromium/src/+/main:DEPS).
Chong Gu96fe8db2021-09-29 21:28:0097
Jaeheon Yi9eaf5b522021-10-01 23:17:5698Note: fxbug.dev/85552 tracks migration away from the legacy image names, like
99`qemu.x64`, which is mapped to `terminal.qemu-x64-release` by the
100[`update_images.py`](https://source.chromium.org/chromium/chromium/src/+/main:build/fuchsia/update_images.py)
101helper script.
Chong Gu96fe8db2021-09-29 21:28:00102
Scott Graham6b17c6522018-09-25 20:39:36103You will then need to run:
104
105```shell
Kevin Marshall173a1802020-06-09 18:03:32106$ gclient sync
Scott Graham6b17c6522018-09-25 20:39:36107```
108
109This makes sure the Fuchsia SDK is available in third\_party and keeps it up to
110date.
Scott Grahamf94d84d2017-06-26 18:24:40111
Adam MacBethc6fc88b52017-06-30 17:26:31112The remaining instructions assume you have switched to the `src` directory:
113
114```shell
115$ cd src
116```
Scott Grahamf94d84d2017-06-26 18:24:40117
Wezc03808e2018-11-06 06:27:35118### (Linux-only) Install any required host packages
119
Jaeheon Yi9eaf5b522021-10-01 23:17:56120Chromium relies on some platform packages to be present in order to build. You
121can install the current set of required packages with:
Wezc03808e2018-11-06 06:27:35122
123```shell
124$ build/install-build-deps.sh
125```
126
127Note that you need to do this only once, and thereafter only if new dependencies
128are added - these will be announced to the chromium-dev@ group.
129
Scott Graham6b17c6522018-09-25 20:39:36130### Update your checkout
131
132To update an existing checkout, you can run
133
134```shell
135$ git rebase-update
136$ gclient sync
137```
138
Jaeheon Yi9eaf5b522021-10-01 23:17:56139The first command updates the primary Chromium source repository and rebases any
140of your local branches on top of tip-of-tree (aka the Git branch `origin/main`).
141If you don't want to use this script, you can also just use `git pull` or other
142common Git commands to update the repo.
Scott Graham6b17c6522018-09-25 20:39:36143
144The second command syncs dependencies to the appropriate versions and re-runs
145hooks as needed. `gclient sync` updates dependencies to the versions specified
146in `DEPS`, so any time that file is modified (pulling, changing branches, etc.)
147`gclient sync` should be run.
148
Fabrice de Gans-Riberibbc67a1b2018-08-30 13:19:21149## (Mac-only) Download additional required Clang binaries
150
Jaeheon Yi9eaf5b522021-10-01 23:17:56151Go to
152[this page](https://chrome-infra-packages.appspot.com/p/fuchsia/clang/mac-amd64/+/)
153and download the most recent build. Extract `bin/llvm-ar` to the clang folder in
154Chromium:
Fabrice de Gans-Riberibbc67a1b2018-08-30 13:19:21155
156```shell
157$ unzip /path/to/clang.zip bin/llvm-ar -d ${CHROMIUM_SRC}/third_party/llvm-build/Release+Asserts
158```
159
Scott Grahamf94d84d2017-06-26 18:24:40160## Setting up the build
161
Tom Bridgwatereef401542018-08-17 00:54:43162Chromium uses [Ninja](https://ninja-build.org) as its main build tool along with
Jaeheon Yi9eaf5b522021-10-01 23:17:56163a tool called [GN](https://gn.googlesource.com/gn/+/main/docs/quick_start.md) to
164generate `.ninja` files. You can create any number of *build directories* with
165different configurations. To create a build directory, run:
Scott Grahamf94d84d2017-06-26 18:24:40166
167```shell
Adam MacBethddd50f32017-07-10 01:42:26168$ gn gen out/fuchsia --args="is_debug=false dcheck_always_on=true is_component_build=false target_os=\"fuchsia\""
Scott Grahamf94d84d2017-06-26 18:24:40169```
170
Wez2102c3be2017-07-12 01:09:26171You can also build for Debug, with `is_debug=true`, but since we don't currently
172have any Debug build-bots, it may be more broken than Release.
173
Scott Grahamb69a2f62017-06-26 19:32:20174`use_goma=true` is fine to use also if you're a Googler.
175
Sharon Yangf6e51ee2020-09-25 14:59:51176Architecture options are x64 (default) and arm64. This can be set with
Aidan Wolter53cde642020-10-29 16:02:26177`target_cpu=\"arm64\"`.
Sharon Yangf6e51ee2020-09-25 14:59:51178
Scott Grahamf94d84d2017-06-26 18:24:40179## Build
180
Scott Graham4c9dc312018-11-07 19:52:41181All targets included in the GN build should build successfully. You can also
182build a specific binary, for example, base\_unittests:
Scott Grahamf94d84d2017-06-26 18:24:40183
184```shell
Max Morozf5b31fcd2018-08-10 21:55:48185$ autoninja -C out/fuchsia base_unittests
Scott Grahamf94d84d2017-06-26 18:24:40186```
187
Dirk Pranke8bd55f22018-10-24 21:22:10188(`autoninja` is a wrapper that automatically provides optimal values for the
189arguments passed to `ninja`.)
Max Morozf5b31fcd2018-08-10 21:55:48190
Scott Grahamf94d84d2017-06-26 18:24:40191## Run
192
Wezc03808e2018-11-06 06:27:35193Once you've built a package, you'll want to run it!
194
195### (Recommended)(Linux-only) Enable KVM acceleration
196
197Under Linux, if your host and target CPU architectures are the same (e.g. you're
198building for Fuchsia/x64 on a Linux/x64 host) then you can benefit from QEMU's
199support for the KVM hypervisor:
200
Jaeheon Yi9eaf5b522021-10-01 23:17:562011. Install the KVM module for your kernel, to get a /dev/kvm device.
2022. Ensure that your system has a "kvm" group, and it owns /dev/kvm. You can do
203 that by installing the QEMU system common package: `shell $ sudo apt-get
204 install qemu-system-common`
2053. Add users to the "kvm" group, and have them login again, to pick-up the new
206 group. `shell $ sudo adduser <user> kvm $ exit [log in again]`
Wezc03808e2018-11-06 06:27:35207
Fabrice de Gans-Ribericfa0fb7d82019-07-02 18:23:09208### Running test suites
209
Chong Gu4749ec12021-02-17 01:41:06210There are three types of tests available to run on Fuchsia:
Scott Grahamf94d84d2017-06-26 18:24:40211
Jaeheon Yi9eaf5b522021-10-01 23:17:562121. [Gtests](gtests.md)
2132. [GPU integration tests](gpu_testing.md)
2143. [Blink tests](web_tests.md)
Scott Grahamf94d84d2017-06-26 18:24:40215
Chong Gu4749ec12021-02-17 01:41:06216Check the documentations to learn more about how to run these tests.