blob: 0141bbac009aff42fc8844040a9fe76a292bbf67 [file] [log] [blame] [view]
andybons22afb312015-08-31 02:24:511# Cr
andybons3322f762015-08-24 21:37:092
andybons10c162b2015-08-31 15:37:403Cr is a tool that tries to hide some of the tools used for working on Chromium
4behind an abstraction layer. Nothing that cr does can't be done manually, but cr
5attempts to make things nicer. Its main additional feature is that it allows you
6to build many configurations and run targets within a single checkout (by not
7relying on a directory called 'out'). This is especially important when you want
qyearsleyc0dc6f42016-12-02 22:13:398to cross-compile (for instance, building Android from Linux or building arm from
andybons22afb312015-08-31 02:24:519intel), but it extends to any build variation.
10
11[TOC]
andybons3322f762015-08-24 21:37:0912
13## A quick example
14
andybons22afb312015-08-31 02:24:5115The following is all you need to prepare an output directory, and then build and
16run the release build of chrome for the host platform:
17
18```shell
19cr init
20cr run
andybons3322f762015-08-24 21:37:0921```
22
andybons22afb312015-08-31 02:24:5123## How do I get it?
andybons3322f762015-08-24 21:37:0924
25You already have it, it lives in `src/tools/cr`
26
andybons22afb312015-08-31 02:24:5127You can run the cr.py file by hand, but if you are using bash it is much easier
28to source the bash helpers. This will add a cr function to your bash shell that
29runs with pyc generation turned off, and also installs the bash tab completion
30handler (which is very primitive at the moment, it only completes the command
31not the options) It also adds a function you can use in your prompt to tell you
32your selected build (`_cr_ps1`), and an helper to return you to the root of your
33active tree (`crcd`). I recommend you add the following lines to the end of your
34`~/.bashrc` (with a more correct path):
35
36```shell
37CR_CLIENT_PATH="/path/to/chromium"
38source ${CR_CLIENT_PATH}/src/tools/cr/cr-bash-helpers.sh
andybons3322f762015-08-24 21:37:0939```
andybons22afb312015-08-31 02:24:5140
andybons3322f762015-08-24 21:37:0941At that point the cr command is available to you.
42
andybons22afb312015-08-31 02:24:5143## How do I use it?
andybons3322f762015-08-24 21:37:0944
45It should be mostly self documenting
andybons22afb312015-08-31 02:24:5146
47 cr --help
48
andybons3322f762015-08-24 21:37:0949will list all the commands installed
andybons22afb312015-08-31 02:24:5150
51 cr --help command
52
andybons3322f762015-08-24 21:37:0953will give you more detailed help for a specific command.
54
qyearsleyc0dc6f42016-12-02 22:13:3955_**A note to existing Android developers:**_
andybons3322f762015-08-24 21:37:0956
andybons22afb312015-08-31 02:24:5157* Do not source envsetup! ever!
58* If you use cr in a shell that has had envsetup sourced, miscellaneous things
59 will be broken. The cr tool does all the work that envsetup used to do in a
60 way that does not pollute your current shell.
61* If you really need a shell that has had the environment modified like
62 envsetup used to do, see the cr shell command, also probably file a bug for
63 a missing cr feature!
andybons3322f762015-08-24 21:37:0964
andybons22afb312015-08-31 02:24:5165## The commands
andybons3322f762015-08-24 21:37:0966
andybons22afb312015-08-31 02:24:5167Below are some common workflows, but first there is a quick overview of the
68commands currently in the system.
andybons3322f762015-08-24 21:37:0969
andybons22afb312015-08-31 02:24:5170### Output directory commands
andybons3322f762015-08-24 21:37:0971
andybons22afb312015-08-31 02:24:5172 init
andybons3322f762015-08-24 21:37:0973
andybons22afb312015-08-31 02:24:5174Create and configure an output directory. Also runs select to make it the
75default.
andybons3322f762015-08-24 21:37:0976
andybons22afb312015-08-31 02:24:5177 select
andybons3322f762015-08-24 21:37:0978
andybons22afb312015-08-31 02:24:5179Select an output directory. This makes it the default output for all commands,
80so you can omit the --out option if you want to.
andybons3322f762015-08-24 21:37:0981
andybons22afb312015-08-31 02:24:5182 prepare
83
84Prepares an output directory. This runs any preparation steps needed for an
85output directory to be viable, which at the moment means run gyp.
86
87### Build commands
88
89 build
90
91Build a target.
92
93 install
94
95Install a binary. Does build first unless `--builder==skip`. This does nothing
qyearsleyc0dc6f42016-12-02 22:13:3996on Linux, and installs the apk onto the device for Android builds.
andybons22afb312015-08-31 02:24:5197
98 run
99
100Invoke a target. Does an install first, unless `--installer=skip`.
101
102 debug
103
104Debug a target. Does a run first, unless `--runner=skip`. Uses the debugger
105specified by `--debugger`.
106
107### Other commands
108
109 sync
110
111Sync the source tree. Uses gclient sync to do the real work.
112
113 shell
114
115Run an exernal command in a cr environment. This is an escape hatch, if passed
116a command it runs it in the correct environment for the current output
117directory, otherwise it starts a sub shell with that environment. This allows
118you to run any commands that don't have shims, or are too specialized to get
qyearsleyc0dc6f42016-12-02 22:13:39119one. This is especially important on Android where the environment is heavily
andybons22afb312015-08-31 02:24:51120modified.
121
122## Preparing to build
andybons3322f762015-08-24 21:37:09123
124The first thing you need to do is prepare an output directory to build into.
125You do this with:
andybons3322f762015-08-24 21:37:09126
andybons22afb312015-08-31 02:24:51127 cr init
andybons3322f762015-08-24 21:37:09128
qyearsleyc0dc6f42016-12-02 22:13:39129By default on Linux this will prepare a Linux x86 release build output
130directory, called `out_linux/Release`, if you want an Android debug one, you can
andybons22afb312015-08-31 02:24:51131use:
andybons3322f762015-08-24 21:37:09132
andybons22afb312015-08-31 02:24:51133 cr init --out=out_android/Debug
andybons3322f762015-08-24 21:37:09134
andybons22afb312015-08-31 02:24:51135The output directory can be called anything you like, but if you pick a non
136standard name cr might not be able to infer the platform, in which case you need
137to specify it. The second part **must** be either Release or Debug. All options
138can be shortened to the shortest non ambiguous prefix, so the short command line
qyearsleyc0dc6f42016-12-02 22:13:39139to prepare an Android debug output directory in out is:
andybons22afb312015-08-31 02:24:51140
141 cr init --o=out/Debug --p=android
142
143It is totally safe to do this in an existing output directory, and is an easy
144way to migrate an existing output directory to use in cr if you don't want to
145start from scratch.
146
147Most commands in cr take a --out parameter to tell them which output directory
148you want to operate on, but it will default to the last value passed to init or
149select. This enables you to omit it from most commands.
150
151Both init and select do additional work to prepare the output directory, which
Piet Schouten47e859f2024-12-12 21:46:24152include things like running gyp. You can do that work on its own with the
andybons22afb312015-08-31 02:24:51153prepare command if you want, something you need to do when changing between
154branches where you have modified the build files.
155
156If you want to set custom GYP defines for your build you can do this by adding
157adding the `-s GYP_DEFINES` argument, for example:
158
159 cr init --o=out/Debug -s GYP_DEFINES=component=shared_library
160
161## Running chrome
andybons3322f762015-08-24 21:37:09162
163If you just want to do a basic build and run, then you do
andybons3322f762015-08-24 21:37:09164
andybons22afb312015-08-31 02:24:51165 cr run
andybons3322f762015-08-24 21:37:09166
andybons22afb312015-08-31 02:24:51167which will build, install if necessary, and run chrome, with some default args
168to open on https://www.google.com/. The same command line will work for any
169supported platform and mode. If you want to just run it again, you can turn off
170the build and install steps,
171
172 cr run --installer=skip
173
174note that turning off install automatically turns off build (which you could do
175with `--builder=skip`) as there is no point building if you are not going to
176install.
177
178## Debugging chrome
andybons3322f762015-08-24 21:37:09179
180To start chrome under a debugger you use
andybons3322f762015-08-24 21:37:09181
andybons22afb312015-08-31 02:24:51182 cr debug
183
184which will build, install, and run chrome, and attach a debugger to it. This
185works on any supported platform, and if multiple debuggers are available, you
186can select which one you want with `--debugger=my_debugger`
187
188## Help, it went wrong!
andybons3322f762015-08-24 21:37:09189
190There are a few things to do, and you should probably do all of them.
andybons22afb312015-08-31 02:24:51191Run your commands with dry-run and/or verbose turned on to see what the tool is
192really doing, for instance
andybons3322f762015-08-24 21:37:09193
andybons22afb312015-08-31 02:24:51194 cr --d -vvvv init
andybons3322f762015-08-24 21:37:09195
andybons22afb312015-08-31 02:24:51196The number of v's matter, it's the verbosity level, you can also just specify
197the value with -v=4 if you would rather.
andybons3322f762015-08-24 21:37:09198
andybons22afb312015-08-31 02:24:51199[Report a bug], even if it is just something that confused or annoyed rather
200than broke, we want this tool to be very low friction for developers.
andybons3322f762015-08-24 21:37:09201
andybons22afb312015-08-31 02:24:51202## Known issues
203
204You can see the full list of issues with
205[this](https://code.google.com/p/chromium/issues/list?can=2&q=label%3Atool-cr)
206query, but here are the high level issues:
207
208* **Only supports gtest** : You run tests using the run command, which tries
209 to infer from the target whether it is a runnable binary or a test. The
210 inference could be improved, and it needs to handle the other test types as
211 well.
qyearsleyc0dc6f42016-12-02 22:13:39212* **No support for Windows or Mac** : allowed for in the design, but need
andybons22afb312015-08-31 02:24:51213 people with expertise on those platforms to help out
214* **Bash completion** : The hooks for it are there, but at the moment it only
215 ever completes the command, not any of the arguments
216
217[Report a bug]:
218https://code.google.com/p/chromium/issues/entry?comment=%3CDont%20forget%20to%20attach%20the%20command%20lines%20used%20with%20-v=4%20if%20possible%3E&pri=2&labels=OS-Android,tool-cr,Build-Tools,Type-Bug&owner=iancottrell@chromium.org&status=Assigned