Index: docs/linux_build_instructions.md |
diff --git a/docs/linux_build_instructions.md b/docs/linux_build_instructions.md |
index 1731c7930fd17395028c1488cefd5db1b0d44f4a..88c4dcef9a0bd6292b2d53c653bac4d37fda916b 100644 |
--- a/docs/linux_build_instructions.md |
+++ b/docs/linux_build_instructions.md |
@@ -13,49 +13,59 @@ Google employee? See [go/building-chrome](https://goto.google.com/building-chrom |
* At least 100GB of free disk space. |
* You must have Git and Python installed already. |
-Most development is done on Ubuntu (currently 14.04, Trusty Tahr). There are |
+Most development is done on Ubuntu (currently 14.04, Trusty Tahr). There are |
some instructions for other distros below, but they are mostly unsupported. |
## Install `depot_tools` |
-Clone the depot_tools repository: |
+Clone the `depot_tools` repository: |
- $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
+```shell |
+$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
+``` |
-Add depot_tools to the end of your PATH (you will probably want to put this |
-in your ~/.bashrc or ~/.zshrc). Assuming you cloned depot_tools |
-to /path/to/depot_tools: |
+Add `depot_tools` to the end of your PATH (you will probably want to put this |
+in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to |
+`/path/to/depot_tools`: |
- $ export PATH=$PATH:/path/to/depot_tools |
+```shell |
+$ export PATH="$PATH:/path/to/depot_tools" |
+``` |
## Get the code |
-Create a chromium directory for the checkout and change to it (you can call |
-this whatever you like and put it wherever you like, as |
-long as the full path has no spaces): |
- |
- $ mkdir chromium |
- $ cd chromium |
+Create a `chromium` directory for the checkout and change to it (you can call |
+this whatever you like and put it wherever you like, as long as the full path |
+has no spaces): |
+ |
+```shell |
+$ mkdir ~/chromium && cd ~/chromium |
+``` |
Run the `fetch` tool from depot_tools to check out the code and its |
dependencies. |
- $ fetch --nohooks chromium |
+```shell |
+$ fetch --nohooks chromium |
+``` |
If you don't want the full repo history, you can save a lot of time by |
-adding the `--no-history` flag to fetch. |
+adding the `--no-history` flag to `fetch`. |
Expect the command to take 30 minutes on even a fast connection, and many |
hours on slower ones. |
If you've already installed the build dependencies on the machine (from another |
-checkout, for example), you can omit the `--nohooks` flag and fetch |
+checkout, for example), you can omit the `--nohooks` flag and `fetch` |
will automatically execute `gclient runhooks` at the end. |
-When fetch completes, it will have created a directory called `src`. |
-The remaining instructions assume you are now in that directory: |
+When `fetch` completes, it will have created a hidden `.gclient` file and a |
+directory called `src` in the working directory. The remaining instructions |
+assume you have switched to the `src` directory: |
- $ cd src |
+```shell |
+$ cd src |
+``` |
### Install additional build dependencies |
@@ -75,29 +85,35 @@ For Gentoo, you can just run `emerge www-client/chromium`. |
### Run the hooks |
Once you've run `install-build-deps` at least once, you can now run the |
-chromium-specific hooks, which will download additional binaries and other |
+Chromium-specific hooks, which will download additional binaries and other |
things you might need: |
- $ gclient runhooks |
+```shell |
+$ gclient runhooks |
+``` |
-*Optional*: You can also [install API keys](https://www.chromium.org/developers/how-tos/api-keys) |
-if you want to talk to some of the Google services, but this is not necessary |
-for most development and testing purposes. |
+*Optional*: You can also [install API |
+keys](https://www.chromium.org/developers/how-tos/api-keys) if you want your |
+build to talk to some Google services, but this is not necessary for most |
+development and testing purposes. |
-## Seting up the Build |
+## Setting up the Build |
-Chromium uses [Ninja](https://ninja-build.org) as its main build tool, and |
-a tool called [GN](../tools/gn/docs/quick_start.md) to generate |
-the .ninja files to do the build. To create a build directory, run: |
+Chromium uses [Ninja](https://ninja-build.org) as its main build tool along |
+with a tool called [GN](../tools/gn/docs/quick_start.md) to generate `.ninja` |
+files. You can create any number of *build directories* with different |
+configurations. To create a build directory, run: |
- $ gn gen out/Default |
+```shell |
+$ gn gen out/Default |
+``` |
-* You only have to do run this command once, it will self-update the build |
- files as needed after that. |
-* You can replace `out/Default` with another directory name, but we recommend |
- it should still be a subdirectory of `out`. |
-* To specify build parameters for GN builds, including release settings, |
- see [GN build configuration](https://www.chromium.org/developers/gn-build-configuration). |
+* You only have to run this once for each new build directory, Ninja will |
+ update the build files as needed. |
+* You can replace `Default` with another name, but |
+ it should be a subdirectory of `out`. |
+* For other build arguments, including release settings, see [GN build |
+ configuration](https://www.chromium.org/developers/gn-build-configuration). |
The default will be a debug component build matching the current host |
operating system and CPU. |
* For more info on GN, run `gn help` on the command line or read the |
@@ -112,25 +128,31 @@ settings that may speed up your build. |
Build Chromium (the "chrome" target) with Ninja using the command: |
- $ ninja -C out/Default chrome |
+```shell |
+$ ninja -C out/Default chrome |
+``` |
-You can get a list of all of the other build targets from GN by running |
-`gn ls out/Default` from the command line. To compile one, pass to Ninja |
-the GN label with no preceding "//" (so for `//chrome/test:unit_tests` |
-use ninja -C out/Default chrome/test:unit_tests`). |
+You can get a list of all of the other build targets from GN by running `gn ls |
+out/Default` from the command line. To compile one, pass the GN label to Ninja |
+with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C |
+out/Default chrome/test:unit_tests`). |
## Run Chromium |
Once it is built, you can simply run the browser: |
- $ out/Default/chrome |
+```shell |
+$ out/Default/chrome |
+``` |
## Running test targets |
You can run the tests in the same way. You can also limit which tests are |
run using the `--gtest_filter` arg, e.g.: |
- $ ninja -C out/Default unit_tests --gtest_filter="PushClientTest.*" |
+```shell |
+$ ninja -C out/Default unit_tests --gtest_filter="PushClientTest.*" |
+``` |
You can find out more about GoogleTest at its |
[GitHub page](https://github.com/google/googletest). |
@@ -139,16 +161,18 @@ You can find out more about GoogleTest at its |
To update an existing checkout, you can run |
- $ git rebase-update |
- $ gclient sync |
+```shell |
+$ git rebase-update |
+$ gclient sync |
+``` |
The first command updates the primary Chromium source repository and rebases |
-any of your local branches on top of tip-of-tree (aka the Git branch `origin/master`). |
-If you don't want to use this script, you can also just use `git pull` or |
-other common Git commands to update the repo. |
+any of your local branches on top of tip-of-tree (aka the Git branch |
+`origin/master`). If you don't want to use this script, you can also just use |
+`git pull` or other common Git commands to update the repo. |
-The second command syncs the subrepositories to the appropriate versions and |
-re-runs the hooks as needed. |
+The second command syncs dependencies to the appropriate versions and re-runs |
+hooks as needed. |
## Tips, tricks, and troubleshooting |
@@ -156,25 +180,27 @@ re-runs the hooks as needed. |
If, during the final link stage: |
- LINK out/Debug/chrome |
+``` |
+LINK out/Debug/chrome |
+``` |
You get an error like: |
- collect2: ld terminated with signal 6 Aborted terminate called after throwing an |
- instance of 'std::bad_alloc' |
- |
- collect2: ld terminated with signal 11 [Segmentation fault], core dumped |
+``` |
+collect2: ld terminated with signal 6 Aborted terminate called after throwing an instance of 'std::bad_alloc' |
+collect2: ld terminated with signal 11 [Segmentation fault], core dumped |
+``` |
you are probably running out of memory when linking. You *must* use a 64-bit |
system to build. Try the following build settings (see [GN build |
configuration](https://www.chromium.org/developers/gn-build-configuration) for |
-setting): |
+other settings): |
-* Build in release mode (debugging symbols require more memory). |
+* Build in release mode (debugging symbols require more memory): |
`is_debug = false` |
-* Turn off symbols. `symbol_level = 0` |
-* Build in component mode (this is for developers only, it will be slower and |
- may have broken functionality). `is_component_build = true` |
+* Turn off symbols: `symbol_level = 0` |
+* Build in component mode (this is for development only, it will be slower and |
+ may have broken functionality): `is_component_build = true` |
### More links |