diff options
Diffstat (limited to 'chromium/docs/linux_build_instructions.md')
-rw-r--r-- | chromium/docs/linux_build_instructions.md | 185 |
1 files changed, 102 insertions, 83 deletions
diff --git a/chromium/docs/linux_build_instructions.md b/chromium/docs/linux_build_instructions.md index 11a3b23e224..4f97bf2ea3e 100644 --- a/chromium/docs/linux_build_instructions.md +++ b/chromium/docs/linux_build_instructions.md @@ -1,133 +1,152 @@ # Linux-specific build instructions -[TOC] +## Common checkout instructions -## Get the code - -[Get the Code](https://www.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. +This page covers Linux-specific setup and configuration. The +[general checkout +instructions](http://dev.chromium.org/developers/how-tos/get-the-code) cover +installing depot tools and checking out the code via git. ## 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**. Cross-platform build configuration system. It generates ninja - build files. Running `gn` 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). +Due its complexity, Chromium uses a set of custom tools to check out and build +rather than configure/make like most projects. You _must_ use gclient and +ninja, and there is no "install" step provided. -## Getting a checkout +### System requirements -[Prerequisites](linux_build_instructions_prerequisites.md): what you need before -you build. +* **64-bits**: x86 builds are not supported on Linux. +* **Memory**: >16GB is highly recommended. +* **Disk space**: Expect a full checkout and build to take nearly 100GB. +* **Distribution**: You should be able to build Chromium on any reasonably modern Linux + distribution, but there are a lot of distributions and we sometimes break + things on one or another. Internally, our development platform has been a + variant of Ubuntu 14.04 (Trusty Tahr); we expect you will have the most + luck on this platform. -**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. +## Software setup -## Compilation +Non-Ubuntu distributions are not officially supported for building and the +instructions below might be outdated. -The "`src/`" directory is an artifact of `gclient`. Start with: +### Ubuntu - $ cd src +Once you have checked out the code, run +[build/install-build-deps.sh](/build/install-build-deps.sh) The script only +supports current releases as listed on https://wiki.ubuntu.com/Releases. +This script is used to set up the canonical builders, and as such is the most +up to date reference for the required prerequisites. -### Faster builds +### Debian -See [Linux Faster Builds](linux_faster_builds.md) +Follow the Ubuntu instructions above. If you want to install the build-deps +manually, note that the original packages are for Ubuntu. Here are the Debian +equivalents: -### Build every test +* libexpat-dev -> libexpat1-dev +* freetype-dev -> libfreetype6-dev +* libbzip2-dev -> libbz2-dev +* libcupsys2-dev -> libcups2-dev - $ ninja -C out/Debug +Additionally, if you're building Chromium components for Android, you'll need to +install the package: lib32z1 -The above builds all libraries and tests in all components. **It will take -hours.** +### openSUSE -Specifying other target names to restrict the build to just what you're -interested in. To build just the simplest unit test: +For openSUSE 11.0 and later, see +[Linux openSUSE Build Instructions](linux_open_suse_build_instructions.md). - $ ninja -C out/Debug base_unittests +### Fedora -### Clang builds +Recent systems: -Information about building with Clang can be found [here](clang.md). + su -c 'yum install subversion pkgconfig python perl gcc-c++ bison flex \ + gperf nss-devel nspr-devel gtk2-devel glib2-devel freetype-devel atk-devel \ + pango-devel cairo-devel fontconfig-devel GConf2-devel dbus-devel \ + alsa-lib-devel libX11-devel expat-devel bzip2-devel dbus-glib-devel \ + elfutils-libelf-devel libjpeg-devel mesa-libGLU-devel libXScrnSaver-devel \ + libgnome-keyring-devel cups-devel libXtst-devel libXt-devel pam-devel httpd \ + mod_ssl php php-cli wdiff' -### Output +The msttcorefonts packages can be obtained by following the instructions +present [here](http://www.fedorafaq.org/#installfonts). For the optional +packages: -Executables are written in `src/out/Debug/` for Debug builds, and -`src/out/Release/` for Release builds. +* php-cgi is provided by the php-cli package +* wdiff doesn't exist in Fedora repositories, a possible alternative would be + dwdiff +* sun-java6-fonts doesn't exist in Fedora repositories, needs investigating -### Release mode +### Arch Linux -Pass `-C out/Release` to the ninja invocation: +Most of these packages are probably already installed since they're often used, +and the parameter --needed ensures that packages up to date are not reinstalled. - $ ninja -C out/Release chrome + sudo pacman -S --needed python perl gcc gcc-libs bison flex gperf pkgconfig \ + nss alsa-lib gconf glib2 gtk2 nspr ttf-ms-fonts freetype2 cairo dbus \ + libgnome-keyring -### Seeing the commands +For the optional packages on Arch Linux: -If you want to see the actual commands that ninja is invoking, add `-v` to the -ninja invocation. +* php-cgi is provided with pacman +* wdiff is not in the main repository but dwdiff is. You can get wdiff in + AUR/yaourt +* sun-java6-fonts do not seem to be in main repository or AUR. - $ ninja -v -C out/Debug chrome +### Mandriva -This is useful if, for example, you are debugging gyp changes, or otherwise need -to see what ninja is actually doing. + urpmi lib64fontconfig-devel lib64alsa2-devel lib64dbus-1-devel \ + lib64GConf2-devel lib64freetype6-devel lib64atk1.0-devel lib64gtk+2.0_0-devel \ + lib64pango1.0-devel lib64cairo-devel lib64nss-devel lib64nspr-devel g++ python \ + perl bison flex subversion gperf -### Clean builds +* msttcorefonts are not available, you will need to build your own (see +instructions, not hard to do, see +[mandriva_msttcorefonts.md](mandriva_msttcorefonts.md)) or use drakfont to +import the fonts from a windows installation +* These packages are for 64 bit, to download the 32 bit packages, +substitute lib64 with lib +* Some of these packages might not be explicitly necessary as they come as + dependencies, there is no harm in including them however. -You can clean the build directory (`out/Default` in this example): +### Gentoo - gn clean out/Default + emerge www-client/chromium -This will delete all files except a bootstrap ninja file necessary for -recreating the build. - -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. +## Troubleshooting ### Linker Crashes If, during the final link stage: - LINK(target) 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 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: + collect2: ld terminated with signal 11 [Segmentation fault], core dumped -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) +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): -Most of these are described on the [Linux Faster Builds](linux_faster_builds.md) -page. +* 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` -## Advanced Features +## More links -* Want to use the (in development) GN build workflow? See - [GN Quick Start](../tools/gn/docs/quick_start.md). -* Building frequently? See [LinuxFasterBuilds](linux_faster_builds.md). +* [Faster builds on Linux](linux_faster_builds.md) +* Information about [building with Clang](clang.md). +* 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). * Cross-compiling for ARM? See [LinuxChromiumArm](linux_chromium_arm.md). * Want to use Eclipse as your IDE? See [LinuxEclipseDev](linux_eclipse_dev.md). |