blob: 8376ece586afedf7a33feefd9b668ad25a49df7a [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
30Add `depot_tools` to the end of your PATH (you will probably want to put this
31in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to
32`/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
Scott Grahamf94d84d2017-06-26 18:24:4055Expect the command to take 30 minutes on even a fast connection, and many
56hours on slower ones.
57
58If you've already installed the build dependencies on the machine (from another
59checkout, for example), you can omit the `--nohooks` flag and `fetch`
60will automatically execute `gclient runhooks` at the end.
61
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
Chong Gu96fe8db2021-09-29 21:28:0091The Fuchsia boot images that are checked out is controlled by the
92`checkout_fuchsia_boot_images` variable. For instance, adding
93```
94"checkout_fuchsia_boot_images": "qemu.x64,workstation.qemu-x64-release",
95```
96to the `custom_vars` section of your `.gclient` file would allow you to check
97out both images.
98
99```
100
Scott Graham6b17c6522018-09-25 20:39:36101You will then need to run:
102
103```shell
Kevin Marshall173a1802020-06-09 18:03:32104$ gclient sync
Scott Graham6b17c6522018-09-25 20:39:36105```
106
107This makes sure the Fuchsia SDK is available in third\_party and keeps it up to
108date.
Scott Grahamf94d84d2017-06-26 18:24:40109
Adam MacBethc6fc88b52017-06-30 17:26:31110The remaining instructions assume you have switched to the `src` directory:
111
112```shell
113$ cd src
114```
Scott Grahamf94d84d2017-06-26 18:24:40115
Wezc03808e2018-11-06 06:27:35116### (Linux-only) Install any required host packages
117
118Chromium relies on some platform packages to be present in order to build.
119You can install the current set of required packages with:
120
121```shell
122$ build/install-build-deps.sh
123```
124
125Note that you need to do this only once, and thereafter only if new dependencies
126are added - these will be announced to the chromium-dev@ group.
127
Scott Graham6b17c6522018-09-25 20:39:36128### Update your checkout
129
130To update an existing checkout, you can run
131
132```shell
133$ git rebase-update
134$ gclient sync
135```
136
137The first command updates the primary Chromium source repository and rebases
138any of your local branches on top of tip-of-tree (aka the Git branch
Andrew Williamsbbc1a1e2021-07-21 01:51:22139`origin/main`). If you don't want to use this script, you can also just use
Scott Graham6b17c6522018-09-25 20:39:36140`git pull` or other common Git commands to update the repo.
141
142The second command syncs dependencies to the appropriate versions and re-runs
143hooks as needed. `gclient sync` updates dependencies to the versions specified
144in `DEPS`, so any time that file is modified (pulling, changing branches, etc.)
145`gclient sync` should be run.
146
Fabrice de Gans-Riberibbc67a1b2018-08-30 13:19:21147## (Mac-only) Download additional required Clang binaries
148
149Go to [this page](https://chrome-infra-packages.appspot.com/p/fuchsia/clang/mac-amd64/+/)
150and download the most recent build. Extract `bin/llvm-ar` to the clang folder
151in Chromium:
152
153```shell
154$ unzip /path/to/clang.zip bin/llvm-ar -d ${CHROMIUM_SRC}/third_party/llvm-build/Release+Asserts
155```
156
Scott Grahamf94d84d2017-06-26 18:24:40157## Setting up the build
158
Tom Bridgwatereef401542018-08-17 00:54:43159Chromium uses [Ninja](https://ninja-build.org) as its main build tool along with
Andrew Williamsbbc1a1e2021-07-21 01:51:22160a tool called [GN](https://gn.googlesource.com/gn/+/main/docs/quick_start.md)
Tom Bridgwatereef401542018-08-17 00:54:43161to generate `.ninja` files. You can create any number of *build directories*
162with different configurations. To create a build directory, run:
Scott Grahamf94d84d2017-06-26 18:24:40163
164```shell
Adam MacBethddd50f32017-07-10 01:42:26165$ 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:40166```
167
Wez2102c3be2017-07-12 01:09:26168You can also build for Debug, with `is_debug=true`, but since we don't currently
169have any Debug build-bots, it may be more broken than Release.
170
Scott Grahamb69a2f62017-06-26 19:32:20171`use_goma=true` is fine to use also if you're a Googler.
172
Sharon Yangf6e51ee2020-09-25 14:59:51173Architecture options are x64 (default) and arm64. This can be set with
Aidan Wolter53cde642020-10-29 16:02:26174`target_cpu=\"arm64\"`.
Sharon Yangf6e51ee2020-09-25 14:59:51175
Scott Grahamf94d84d2017-06-26 18:24:40176## Build
177
Scott Graham4c9dc312018-11-07 19:52:41178All targets included in the GN build should build successfully. You can also
179build a specific binary, for example, base\_unittests:
Scott Grahamf94d84d2017-06-26 18:24:40180
181```shell
Max Morozf5b31fcd2018-08-10 21:55:48182$ autoninja -C out/fuchsia base_unittests
Scott Grahamf94d84d2017-06-26 18:24:40183```
184
Dirk Pranke8bd55f22018-10-24 21:22:10185(`autoninja` is a wrapper that automatically provides optimal values for the
186arguments passed to `ninja`.)
Max Morozf5b31fcd2018-08-10 21:55:48187
Scott Grahamf94d84d2017-06-26 18:24:40188## Run
189
Wezc03808e2018-11-06 06:27:35190Once you've built a package, you'll want to run it!
191
192### (Recommended)(Linux-only) Enable KVM acceleration
193
194Under Linux, if your host and target CPU architectures are the same (e.g. you're
195building for Fuchsia/x64 on a Linux/x64 host) then you can benefit from QEMU's
196support for the KVM hypervisor:
197
1981. Install the KVM module for your kernel, to get a /dev/kvm device.
1992. Ensure that your system has a "kvm" group, and it owns /dev/kvm.
200You can do that by installing the QEMU system common package:
201```shell
202$ sudo apt-get install qemu-system-common
203```
2043. Add users to the "kvm" group, and have them login again, to pick-up the new
205group.
Mukesh Agrawal7f695402020-03-11 16:43:15206```shell
207$ sudo adduser <user> kvm
208$ exit
209[log in again]
210```
Wezc03808e2018-11-06 06:27:35211
Fabrice de Gans-Ribericfa0fb7d82019-07-02 18:23:09212### Running test suites
213
Chong Gu4749ec12021-02-17 01:41:06214There are three types of tests available to run on Fuchsia:
Scott Grahamf94d84d2017-06-26 18:24:40215
Chong Gu4749ec12021-02-17 01:41:062161. [Gtests](gtests.md)
2172. [GPU integration tests](gpu_testing.md)
2183. [Blink tests](web_tests.md)
Scott Grahamf94d84d2017-06-26 18:24:40219
Chong Gu4749ec12021-02-17 01:41:06220Check the documentations to learn more about how to run these tests.