| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | # Build Instructions (Linux)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Follow the guidelines below for building Electron on Linux. | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Prerequisites
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 16:26:18 +09:00
										 |  |  | * At least 25GB disk space and 8GB RAM. | 
					
						
							| 
									
										
										
										
											2015-06-05 19:38:30 -04:00
										 |  |  | * Python 2.7.x. Some distributions like CentOS still use Python 2.6.x | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  |   so you may need to check your Python version with `python -V`. | 
					
						
							|  |  |  | * Node.js v0.12.x. There are various ways to install Node. You can download | 
					
						
							|  |  |  |   source code from [Node.js](http://nodejs.org) and compile from source. | 
					
						
							|  |  |  |   Doing so permits installing Node on your own home directory as a standard user. | 
					
						
							|  |  |  |   Or try repositories such as [NodeSource](https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories). | 
					
						
							|  |  |  | * Clang 3.4 or later. | 
					
						
							|  |  |  | * Development headers of GTK+ and libnotify. | 
					
						
							| 
									
										
										
										
											2014-02-20 18:56:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-05 19:38:30 -04:00
										 |  |  | On Ubuntu, install the following libraries: | 
					
						
							| 
									
										
										
										
											2014-02-20 18:56:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2015-04-08 19:46:37 +08:00
										 |  |  | $ sudo apt-get install build-essential clang libdbus-1-dev libgtk2.0-dev \ | 
					
						
							|  |  |  |                        libnotify-dev libgnome-keyring-dev libgconf2-dev \ | 
					
						
							|  |  |  |                        libasound2-dev libcap-dev libcups2-dev libxtst-dev \ | 
					
						
							| 
									
										
										
										
											2016-03-25 23:47:47 -03:00
										 |  |  |                        libxss1 libnss3-dev gcc-multilib g++-multilib curl | 
					
						
							| 
									
										
										
										
											2014-05-15 14:12:40 +08:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:01:44 +02:00
										 |  |  | On Fedora, install the following libraries: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ sudo yum install clang dbus-devel gtk2-devel libnotify-devel libgnome-keyring-devel \ | 
					
						
							|  |  |  |                    xorg-x11-server-utils libcap-devel cups-devel libXtst-devel \ | 
					
						
							|  |  |  |                    alsa-lib-devel libXrandr-devel GConf2-devel nss-devel | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | Other distributions may offer similar packages for installation via package | 
					
						
							| 
									
										
										
										
											2015-09-01 16:01:44 +02:00
										 |  |  | managers such as pacman. Or one can compile from source code. | 
					
						
							| 
									
										
										
										
											2015-06-05 19:38:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | ## Getting the Code
 | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2016-03-31 16:49:59 -07:00
										 |  |  | $ git clone https://github.com/electron/electron.git | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Bootstrapping
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The bootstrap script will download all necessary build dependencies and create | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | the build project files. You must have Python 2.7.x for the script to succeed. | 
					
						
							|  |  |  | Downloading certain files can take a long time. Notice that we are using | 
					
						
							| 
									
										
										
										
											2015-06-04 21:03:45 -04:00
										 |  |  | `ninja` to build Electron so there is no `Makefile` generated. | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2015-04-16 11:31:12 +08:00
										 |  |  | $ cd electron | 
					
						
							| 
									
										
										
										
											2014-12-08 20:07:00 +03:00
										 |  |  | $ ./script/bootstrap.py -v | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | ### Cross compilation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | If you want to build for an `arm` target you should also install the following | 
					
						
							| 
									
										
										
										
											2015-07-13 15:26:35 -07:00
										 |  |  | dependencies: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \ | 
					
						
							|  |  |  |                        g++-arm-linux-gnueabihf | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | And to cross compile for `arm` or `ia32` targets, you should pass the | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | `--target_arch` parameter to the `bootstrap.py` script: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/bootstrap.py -v --target_arch=arm | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ## Building
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-04 21:03:45 -04:00
										 |  |  | If you would like to build both `Release` and `Debug` targets: | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/build.py | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-04 21:03:45 -04:00
										 |  |  | This script will cause a very large Electron executable to be placed in | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | the directory `out/R`. The file size is in excess of 1.3 gigabytes. This | 
					
						
							|  |  |  | happens because the Release target binary contains debugging symbols. | 
					
						
							| 
									
										
										
										
											2015-06-04 21:03:45 -04:00
										 |  |  | To reduce the file size, run the `create-dist.py` script: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/create-dist.py | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | This will put a working distribution with much smaller file sizes in | 
					
						
							|  |  |  | the `dist` directory. After running the create-dist.py script, you | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | may want to remove the 1.3+ gigabyte binary which is still in `out/R`. | 
					
						
							| 
									
										
										
										
											2015-06-04 21:03:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | You can also build the `Debug` target only: | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2015-04-10 21:56:02 +08:00
										 |  |  | $ ./script/build.py -c D | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-02 15:54:14 +08:00
										 |  |  | After building is done, you can find the `electron` debug binary under `out/D`. | 
					
						
							| 
									
										
										
										
											2015-06-06 18:04:11 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Cleaning
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To clean the build files: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/clean.py | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ## Troubleshooting
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | ### Error While Loading Shared Libraries: libtinfo.so.5
 | 
					
						
							| 
									
										
										
										
											2015-07-04 10:27:29 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-08 23:25:27 +03:00
										 |  |  | Prebulit `clang` will try to link to `libtinfo.so.5`. Depending on the host | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | architecture, symlink to appropriate `libncurses`: | 
					
						
							| 
									
										
										
										
											2015-07-04 10:27:29 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ## Tests
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 22:30:12 -07:00
										 |  |  | Test your changes conform to the project coding style using: | 
					
						
							| 
									
										
										
										
											2015-08-08 23:25:27 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2016-05-02 16:26:18 +09:00
										 |  |  | $ npm run lint | 
					
						
							| 
									
										
										
										
											2015-08-08 23:25:27 +03:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Test functionality using: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 18:39:24 +08:00
										 |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/test.py | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2016-05-02 16:35:33 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Advanced topics
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The default building configuration is targeted for major desktop Linux | 
					
						
							|  |  |  | distributions, to build for a specific distribution or device, following | 
					
						
							|  |  |  | information may help you. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 22:32:43 +09:00
										 |  |  | ### Building `libchromiumcontent` locally
 | 
					
						
							| 
									
										
										
										
											2016-05-02 16:35:33 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 22:32:43 +09:00
										 |  |  | To avoid using the prebuilt binaries of `libchromiumcontent`, you can pass the | 
					
						
							| 
									
										
										
										
											2016-05-02 16:35:33 +09:00
										 |  |  | `--build_libchromiumcontent` switch to `bootstrap.py` script: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/bootstrap.py -v --build_libchromiumcontent | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that by default the `shared_library` configuration is not built, so you can | 
					
						
							|  |  |  | only build `Release` version of Electron if you use this mode: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							| 
									
										
										
										
											2016-05-02 22:32:43 +09:00
										 |  |  | $ ./script/build.py -c R | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Using system `clang` instead of downloaded `clang` binaries
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | By default Electron is built with prebuilt `clang` binaries provided by Chromium | 
					
						
							|  |  |  | project. If for some reason you want to build with the `clang` installed in your | 
					
						
							|  |  |  | system, you can call `bootstrap.py` with `--clang_dir=<path>` switch. By passing | 
					
						
							|  |  |  | it the build script will assume the clang binaries reside in `<path>/bin/`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For example if you installed `clang` under `/user/local/bin/clang`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ ./script/bootstrap.py -v --build_libchromiumcontent --clang_dir /usr/local | 
					
						
							|  |  |  | $ ./script/build.py -c R | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Using other compilers other than `clang`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To build Electron with compilers like `g++`, you first need to disable `clang` | 
					
						
							|  |  |  | with `--disable_clang` switch first, and then set `CC` and `CXX` environment | 
					
						
							|  |  |  | variables to the ones you want. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For example building with GCC toolchain: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ env CC=gcc CXX=g++ ./script/bootstrap.py -v --build_libchromiumcontent --disable_clang | 
					
						
							|  |  |  | $ ./script/build.py -c R | 
					
						
							| 
									
										
										
										
											2016-05-02 16:35:33 +09:00
										 |  |  | ``` |