Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Unified Diff: docs/linux_build_instructions.md

Issue 2544793004: More edits to the linux build instructions. (Closed)
Patch Set: tweak debian, gentoo instructions Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « docs/linux_arch_build_instructions.md ('k') | docs/linux_debian_build_instructions.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: docs/linux_build_instructions.md
diff --git a/docs/linux_build_instructions.md b/docs/linux_build_instructions.md
index 945205354e9625065cc941dca04c6ef72913ad05..53ac6c9bedc4b1ccf29bd76e7e0081ef393da26d 100644
--- a/docs/linux_build_instructions.md
+++ b/docs/linux_build_instructions.md
@@ -76,15 +76,9 @@ $ cd src
Once you have checked out the code, and assuming you're using Ubuntu, run
[build/install-build-deps.sh](/build/install-build-deps.sh)
-Here are some instructions for what to do instead for
-
-* [Debian](linux_debian_build_instructions.md)
-* [Fedora](linux_fedora_build_instructions.md)
-* [Arch Linux](linux_arch_build_instructions.md)
-* [Open SUSE](linux_open_suse_build_instrctions.md)
-* [Mandriva](linux_mandriva_build_instrctions.md)
-
-For Gentoo, you can just run `emerge www-client/chromium`.
+You may need to adjust the build dependencies for other distros. There are
+some [notes](#notes) at the end of this document, but we make no guarantees
+for their accuracy.
### Run the hooks
@@ -125,9 +119,108 @@ $ gn gen out/Default
### Faster builds
+This section contains some things you can change to speed up your builds,
+sorted so that the things that make the biggest difference are first.
+
+#### Disable NaCl
+
+By default, the build includes support for
+[Native Client (NaCl)](https://developer.chrome.com/native-client), but
+most of the time you won't need it. You can set the GN argument
+`enable_nacl=false` and it won't be built.
+
+#### Include fewer debug symbols
+
+By default GN produces a build with all of the debug assertions enabled
+(`is_debug=true`) and including full debug info (`symbol_level=2`). Setting
+`symbol_level=1` will produce enough information for stack traces, but not
+line-by-line debugging. Setting `symbol_level=0` will include no debug
+symbols at all. Either will speed up the build compared to full symbols.
+
See [faster builds on Linux](linux_faster_builds.md) for various tips and
settings that may speed up your build.
+#### Disable debug symbols for Blink
+
+Due to its extensive use of templates, the Blink code produces about half
+of our debug symbols. If you don't ever need to debug Blink, you can set
+the GN arg `remove_webcore_debug_symbols=true`.
+
+#### Use Icecc
+
+[Icecc](https://github.com/icecc/icecream) is the distributed compiler with a
+central scheduler to share build load. Currently, many external contributors use
+it. e.g. Intel, Opera, Samsung (Googlers use an internal system called Goma).
+
+In order to use `icecc`, set the following GN args:
+
+```
+linux_use_bundled_binutils=false
+use_debug_fission=false
+is_clang=false
+use_sysroot=false
+```
+
+See these links for more on the
+[bundled_binutils limitation](https://github.com/icecc/icecream/commit/b2ce5b9cc4bd1900f55c3684214e409fa81e7a92),
+the [debug fission limitation](http://gcc.gnu.org/wiki/DebugFission).
+
+Using the system linker may also be necessary when using glibc 2.21 or newer.
+See [related bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=808181).
+
+#### ccache
+
+You can use [ccache](https://ccache.samba.org) to speed up local builds (again,
+this is not useful if you're using a Googler using Goma).
+
+Increase your ccache hit rate by setting `CCACHE_BASEDIR` to a parent directory
+that the working directories all have in common (e.g.,
+`/home/yourusername/development`). Consider using
+`CCACHE_SLOPPINESS=include_file_mtime` (since if you are using multiple working
+directories, header times in svn sync'ed portions of your trees will be
+different - see
+[the ccache troubleshooting section](http://ccache.samba.org/manual.html#_troubleshooting)
+for additional information). If you use symbolic links from your home directory
+to get to the local physical disk directory where you keep those working
+development directories, consider putting
+
+ alias cd="cd -P"
+
+in your `.bashrc` so that `$PWD` or `cwd` always refers to a physical, not
+logical directory (and make sure `CCACHE_BASEDIR` also refers to a physical
+parent).
+
+If you tune ccache correctly, a second working directory that uses a branch
+tracking trunk and is up to date with trunk and was gclient sync'ed at about the
+same time should build chrome in about 1/3 the time, and the cache misses as
+reported by `ccache -s` should barely increase.
+
+This is especially useful if you use `git-new-workdir` and keep multiple local
+working directories going at once.
+
+#### Using tmpfs
+
+You can use tmpfs for the build output to reduce the amount of disk writes
+required. I.e. mount tmpfs to the output directory where the build output goes:
+
+As root:
+
+ mount -t tmpfs -o size=20G,nr_inodes=40k,mode=1777 tmpfs /path/to/out
+
+*** note
+**Caveat:** You need to have enough RAM + swap to back the tmpfs. For a full
+debug build, you will need about 20 GB. Less for just building the chrome target
+or for a release build.
+***
+
+Quick and dirty benchmark numbers on a HP Z600 (Intel core i7, 16 cores
+hyperthreaded, 12 GB RAM)
+
+* With tmpfs:
+ * 12m:20s
+* Without tmpfs
+ * 15m:40s
+
## Build Chromium
Build Chromium (the "chrome" target) with Ninja using the command:
@@ -217,8 +310,197 @@ other settings):
* Want to use your built version as your default browser? See
[LinuxDevBuildAsDefaultBrowser](linux_dev_build_as_default_browser.md).
-### Next Steps
+## 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.
+
+## Notes for other distros <a name="notes"></a>
+
+### Arch Linux
+
+Instead of running `install-build-deps.sh` to install build dependencies, run:
+
+```shell
+$ 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
+```
+
+For the optional packages on Arch Linux:
+
+* `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.
+
+### Debian
+
+`build/install-build-deps.sh` doesn't currently run on Debian, but you can
+probably hack it to get it to work. You will probably need to update the
+following package names:
+
+* `libexpat-dev` → `libexpat1-dev`
+* `freetype-dev` → `libfreetype6-dev`
+* `libbzip2-dev` → `libbz2-dev`
+* `libcupsys2-dev` → `libcups2-dev`
+
+### Fedora
+
+Instead of running `build/install-build-deps.sh`, run:
+
+```shell
+su -c 'yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
+bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
+cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
+freetype-devel gcc-c++ GConf2-devel glib2-devel glibc.i686 gperf \
+glib2-devel gtk2-devel gtk3-devel java-1.*.0-openjdk-devel libatomic \
+libcap-devel libffi-devel libgcc.i686 libgnome-keyring-devel libjpeg-devel \
+libstdc++.i686 libX11-devel libXScrnSaver-devel libXtst-devel \
+libxkbcommon-x11-devel ncurses-compat-libs nspr-devel nss-devel pam-devel \
+pango-devel pciutils-devel pulseaudio-libs-devel zlib.i686 httpd mod_ssl \
+php php-cli python-psutil wdiff'
+```
+
+The `msttcorefonts` packages can be obtained by following [these
+instructions](http://www.fedorafaq.org/#installfonts). For the optional
+packages:
+
+* `php-cgi` is provided by the `php-cli` package.
+* `sun-java6-fonts` doesn't exist in Fedora repositories, needs investigating.
+
+### Gentoo
+
+You can just run `emerge www-client/chromium`.
+
+### Mandriva
+
+Instead of running `build/install-build-deps.sh`, run:
+
+```shell
+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
+```
+
+* `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.
+
+### OpenSUSE
+
+Use `zypper` command to install dependencies:
+
+(openSUSE 11.1 and higher)
+
+```shell
+sudo zypper in subversion pkg-config python perl \
+ bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
+ wdiff lighttpd gcc gcc-c++ gconf2-devel mozilla-nspr \
+ mozilla-nspr-devel php5-fastcgi alsa-devel libexpat-devel \
+ libjpeg-devel libbz2-devel
+```
+
+For 11.0, use `libnspr4-0d` and `libnspr4-dev` instead of `mozilla-nspr` and
+`mozilla-nspr-devel`, and use `php5-cgi` instead of `php5-fastcgi`. And need
+`gtk2-devel`.
+
+(openSUSE 11.0)
+
+```shell
+sudo zypper in subversion pkg-config python perl \
+ bison flex gperf mozilla-nss-devel glib2-devel gtk-devel \
+ libnspr4-0d libnspr4-dev wdiff lighttpd gcc gcc-c++ libexpat-devel \
+ php5-cgi gconf2-devel alsa-devel gtk2-devel jpeg-devel
+```
+
+The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
+Since this package requires Java as a prerequisite anyway, we can do the same
+thing by just installing the equivalent openSUSE Sun Java package:
+
+```shell
+sudo zypper in java-1_6_0-sun
+```
+
+WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
+
+```shell
+sudo zypper in fetchmsttfonts pullin-msttf-fonts
+```
+
+To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
+create symlinks to the appropriate locations:
+
+```shell
+sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
+sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
+sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
+sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
+sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
+sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
+sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
+```
+
+The Ubuntu package `sun-java6-fonts` contains a subset of Java of the fonts used.
+Since this package requires Java as a prerequisite anyway, we can do the same
+thing by just installing the equivalent openSUSE Sun Java package:
+
+```shell
+sudo zypper in java-1_6_0-sun
+```
+
+WebKit is currently hard-linked to the Microsoft fonts. To install these using `zypper`
+
+```shell
+sudo zypper in fetchmsttfonts pullin-msttf-fonts
+```
+
+To make the fonts installed above work, as the paths are hardcoded for Ubuntu,
+create symlinks to the appropriate locations:
+
+```shell
+sudo mkdir -p /usr/share/fonts/truetype/msttcorefonts
+sudo ln -s /usr/share/fonts/truetype/arial.ttf /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
+sudo ln -s /usr/share/fonts/truetype/arialbd.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/arialbi.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/ariali.ttf /usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/comic.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf
+sudo ln -s /usr/share/fonts/truetype/comicbd.ttf /usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/cour.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf
+sudo ln -s /usr/share/fonts/truetype/courbd.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/courbi.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/couri.ttf /usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/impact.ttf /usr/share/fonts/truetype/msttcorefonts/Impact.ttf
+sudo ln -s /usr/share/fonts/truetype/times.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf
+sudo ln -s /usr/share/fonts/truetype/timesbd.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/timesbi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/timesi.ttf /usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/verdana.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanab.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanai.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf
+sudo ln -s /usr/share/fonts/truetype/verdanaz.ttf /usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf
+```
+
+And then for the Java fonts:
+
+```shell
+sudo mkdir -p /usr/share/fonts/truetype/ttf-lucida
+sudo find /usr/lib*/jvm/java-1.6.*-sun-*/jre/lib -iname '*.ttf' -print \
+ -exec ln -s {} /usr/share/fonts/truetype/ttf-lucida \;
+```
« no previous file with comments | « docs/linux_arch_build_instructions.md ('k') | docs/linux_debian_build_instructions.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698