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.
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:
gclient
.gn
/gyp
is analogous to the ./configure
step seen in most other software.ninja
. A prebuilt binary is in depot_tools
and should already be in your path if you followed the steps to check out Chromium.Prerequisites: 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.
The weird “src/
” directory is an artifact of gclient
. Start with:
$ cd src
$ 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
Information about building with Clang can be found here.
Executables are written in src/out/Debug/
for Debug builds, and src/out/Release/
for Release builds.
Pass -C out/Release
to the ninja invocation:
$ ninja -C out/Release chrome
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.
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.
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:
gold
linkerMost of these are described on the Linux Faster Builds page.
If you want to contribute to the effort toward a Chromium-based browser for Linux, please check out the Linux Development page for more information.