blob: bad0b873b31e6aba91b24d44c2d78a1c9b7ea684 [file] [log] [blame] [view]
# 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. **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](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.
**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.
## Compilation
The weird "`src/`" directory is an artifact of `gclient`. Start with:
$ cd src
### Faster builds
See [Linux Faster Builds](linux_faster_builds.md)
### Build every test
$ ninja -C out/Debug
The above builds all libraries and tests in all components. **It will take
hours.**
Specifying other target names to restrict the build to just what you're
interested in. To build just the simplest unit test:
$ ninja -C out/Debug base_unittests
### Clang builds
Information about building with Clang can be found [here](clang.md).
### Output
Executables are written in `src/out/Debug/` for Debug builds, and
`src/out/Release/` for Release builds.
### Release mode
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
ninja invocation.
$ ninja -v -C out/Debug chrome
This is useful if, for example, you are debugging gyp changes, or otherwise need
to see what ninja is actually doing.
### Clean builds
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
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
If, during the final link stage:
LINK(target) 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
```
you are probably running out of memory when linking. Try one of:
1. Use the `gold` linker
1. Build on a 64-bit computer
1. Build in Release mode (debugging symbols require a lot of memory)
1. Build as shared libraries (note: this build is for developers only, and may
have broken functionality)
Most of these are described on the [Linux Faster Builds](linux_faster_builds.md)
page.
## Advanced Features
* Building frequently? See [LinuxFasterBuilds](linux_faster_builds.md).
* Cross-compiling for ARM? See [LinuxChromiumArm](linux_chromium_arm.md).
* Want to use Eclipse as your IDE? See
[LinuxEclipseDev](linux_eclipse_dev.md).
* Built version as Default Browser? See
[LinuxDevBuildAsDefaultBrowser](linux_dev_build_as_default_browser.md).
## Next Steps
If you want to contribute to the effort toward a Chromium-based browser for
Linux, please check out the [Linux Development page](linux_development.md) for
more information.