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 \; |
+``` |