| Index: docs/linux_build_instructions.md
|
| diff --git a/docs/linux_build_instructions.md b/docs/linux_build_instructions.md
|
| index 1e73b398b5b5b4b52bfafd2bbb6b12efab3cbbda..bad0b873b31e6aba91b24d44c2d78a1c9b7ea684 100644
|
| --- a/docs/linux_build_instructions.md
|
| +++ b/docs/linux_build_instructions.md
|
| @@ -1,122 +1,44 @@
|
| -# Build instructions for Linux
|
| +# Linux-specific build instructions
|
|
|
| [TOC]
|
|
|
| +## Get the code
|
| +
|
| +[Get the Code](http://dev.chromium.org/developers/how-tos/get-the-code). The
|
| +general instructions on the "Get the code" page cover basic Linux build setup
|
| +and configuration.
|
| +
|
| +This page documents some additional Linux-specific build issues.
|
| +
|
| ## Overview
|
|
|
| Due its complexity, Chromium uses a set of custom tools to check out and build.
|
| Here's an overview of the steps you'll run:
|
|
|
| 1. **gclient**. A checkout involves pulling nearly 100 different SVN
|
| - repositories of code. This process is managed with a tool called `gclient`.
|
| -1. **gyp**. The cross-platform build configuration system is called `gyp`, and
|
| - on Linux it generates ninja build files. Running `gyp` is analogous to the
|
| - `./configure` step seen in most other software.
|
| + repositories of code. This process is managed with a tool called `gclient`.
|
| +1. **GN** / **gyp**. Cross-platform build configuration systems (GYP is the
|
| + older one, GN is the one being transitioned to). It generates ninja build
|
| + files. Running `gn`/`gyp` is analogous to the `./configure` step seen in
|
| + most other software.
|
| 1. **ninja**. The actual build itself uses `ninja`. A prebuilt binary is in
|
| `depot_tools` and should already be in your path if you followed the steps
|
| to check out Chromium.
|
| 1. We don't provide any sort of "install" step.
|
| -1. You may want to [use a chroot](using_a_linux_chroot.md) to isolate yourself
|
| - from versioning or packaging conflicts (or to run the layout tests).
|
| +1. You may want to
|
| + [use a chroot](http://code.google.com/p/chromium/wiki/UsingALinuxChroot) to
|
| + isolate yourself from versioning or packaging conflicts (or to run the
|
| + layout tests).
|
|
|
| ## Getting a checkout
|
|
|
| -* [Prerequisites](linux_build_instructions_prerequisites.md): what you need
|
| - before you build.
|
| -* [Get the Code](http://dev.chromium.org/developers/how-tos/get-the-code):
|
| - check out the source code.
|
| +[Prerequisites](linux_build_instructions_prerequisites.md): what you need before
|
| +you build.
|
|
|
| -*** note
|
| -Note: if you are working on Chromium OS and already have sources in
|
| +**Note**. If you are working on Chromium OS and already have sources in
|
| `chromiumos/chromium`, you **must** run `chrome_set_ver --runhooks` to set the
|
| correct dependencies. This step is otherwise performed by `gclient` as part of
|
| your checkout.
|
| -***
|
| -
|
| -## First Time Build Bootstrap
|
| -
|
| -* Make sure your dependencies are up to date by running the
|
| - `install-build-deps.sh` script:
|
| -
|
| - .../chromium/src$ build/install-build-deps.sh
|
| -
|
| -* Before you build, you should also
|
| - [install API keys](https://sites.google.com/a/chromium.org/dev/developers/how-tos/api-keys).
|
| -
|
| -## `gyp` (configuring)
|
| -
|
| -After `gclient sync` finishes, it will run `gyp` automatically to generate the
|
| -ninja build files. For standard chromium builds, this automatic step is
|
| -sufficient and you can start [compiling](linux_build_instructions.md).
|
| -
|
| -To manually configure `gyp`, run `gclient runhooks` or run `gyp` directly via
|
| -`build/gyp_chromium`. See [Configuring the Build](https://code.google.com/p/chromium/wiki/CommonBuildTasks#Configuring_the_Build) for detailed `gyp` options.
|
| -
|
| -[GypUserDocumentation](https://code.google.com/p/gyp/wiki/GypUserDocumentation) gives background on `gyp`, but is not necessary if you are just building Chromium.
|
| -
|
| -### Configuring `gyp`
|
| -
|
| -See [Configuring the Build](common_build_tasks.md) for details; most often
|
| -you'll be changing the `GYP_DEFINES` options, which is discussed here.
|
| -
|
| -`gyp` supports a minimal amount of build configuration via the `-D` flag.
|
| -
|
| - build/gyp_chromium -Dflag1=value1 -Dflag2=value2
|
| -
|
| -You can store these in the `GYP_DEFINES` environment variable, separating flags
|
| -with spaces, as in:
|
| -
|
| - export GYP_DEFINES="flag1=value1 flag2=value2"
|
| -
|
| -After changing your `GYP_DEFINES` you need to rerun `gyp`, either implicitly via
|
| -`gclient sync` (which also syncs) or `gclient runhooks` or explicitly via
|
| -`build/gyp_chromium`.
|
| -
|
| -Note that quotes are not necessary for a single flag, but are useful for
|
| -clarity; `GYP_DEFINES=flag1=value1` is syntactically valid but can be confusing
|
| -compared to `GYP_DEFINES="flag1=value1"`.
|
| -
|
| -If you have various flags for various purposes, you may find it more legible to
|
| -break them up across several lines, taking care to include spaces, such as like
|
| -this:
|
| -
|
| - export GYP_DEFINES="flag1=value1 flag2=value2"
|
| -
|
| -or like this (allowing comments):
|
| -
|
| - export GYP_DEFINES="flag1=value1" # comment
|
| - GYP_DEFINES+=" flag2=value2" # another comment
|
| -
|
| -
|
| -### Sample configurations
|
| -
|
| -* **gcc warnings**. By default we fail to build if there are any compiler
|
| - warnings. If you're getting warnings, can't build because of that, but just
|
| - want to get things done, you can specify `-Dwerror=` to turn that off:
|
| -
|
| -```script
|
| -# one-off
|
| -build/gyp_chromium -Dwerror=
|
| -# via variable
|
| -export GYP_DEFINES="werror="
|
| -build/gyp_chromium
|
| -```
|
| -
|
| -* **ChromeOS**. `-Dchromeos=1` builds the ChromeOS version of Chrome. This is
|
| - **not** all of ChromeOS (see
|
| - [the ChromiumOS](http://www.chromium.org/chromium-os) page for full build
|
| - instructions), this is just the slightly tweaked version of the browser that
|
| - runs on that system. Its not designed to be run outside of ChromeOS and some
|
| - features won't work, but compiling on your Linux desktop can be useful for
|
| - certain types of development and testing.
|
| -
|
| -```shell
|
| -# one-off
|
| -build/gyp_chromium -Dchromeos=1
|
| -# via variable
|
| -export GYP_DEFINES="chromeos=1"
|
| -build/gyp_chromium
|
| -```
|
|
|
| ## Compilation
|
|
|
| @@ -124,11 +46,6 @@ The weird "`src/`" directory is an artifact of `gclient`. Start with:
|
|
|
| $ cd src
|
|
|
| -### Build just chrome
|
| -
|
| - $ ninja -C out/Debug chrome
|
| -
|
| -
|
| ### Faster builds
|
|
|
| See [Linux Faster Builds](linux_faster_builds.md)
|
| @@ -160,7 +77,6 @@ Pass `-C out/Release` to the ninja invocation:
|
|
|
| $ ninja -C out/Release chrome
|
|
|
| -
|
| ### Seeing the commands
|
|
|
| If you want to see the actual commands that ninja is invoking, add `-v` to the
|
| @@ -173,14 +89,21 @@ to see what ninja is actually doing.
|
|
|
| ### Clean builds
|
|
|
| -All built files are put into the `out/` directory, so to start over with a clean
|
| -build, just
|
| +If you're using GN, you can clean the build directory (`out/Default` in this
|
| +example):
|
| +
|
| + gn clean out/Default
|
| +
|
| +This will delete all files except a bootstrap ninja file necessary for
|
| +recreating the build.
|
| +
|
| +If you're using GYP, do:
|
|
|
| rm -rf out
|
| + gclient runhooks
|
|
|
| -and run `gclient runhooks` or `build\gyp_chromium` again to recreate the ninja
|
| -build files (which are also stored in `out/`). Or you can run `ninja -C
|
| -out/Debug -t clean`.
|
| +Ninja can also be used to clean a build with `ninja -C out/Debug -t clean` but
|
| +this will not be as complete as the above methods.
|
|
|
| ### Linker Crashes
|
|
|
| @@ -188,7 +111,6 @@ If, during the final link stage:
|
|
|
| LINK(target) out/Debug/chrome
|
|
|
| -
|
| You get an error like:
|
|
|
| ```
|
| @@ -197,8 +119,7 @@ instance of 'std::bad_alloc'
|
|
|
| collect2: ld terminated with signal 11 [Segmentation fault], core dumped
|
| ```
|
| -
|
| -you are probably running out of memory when linking. Try one of:
|
| +you are probably running out of memory when linking. Try one of:
|
|
|
| 1. Use the `gold` linker
|
| 1. Build on a 64-bit computer
|
| @@ -206,7 +127,7 @@ you are probably running out of memory when linking. Try one of:
|
| 1. Build as shared libraries (note: this build is for developers only, and may
|
| have broken functionality)
|
|
|
| -Most of these are described on the [LinuxFasterBuilds](linux_faster_builds.md)
|
| +Most of these are described on the [Linux Faster Builds](linux_faster_builds.md)
|
| page.
|
|
|
| ## Advanced Features
|
|
|