2015-08-30 23:30:12 -06:00
# Build Instructions (Linux)
2021-04-19 09:50:00 -06:00
Follow the guidelines below for building **Electron itself** on Linux, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
[application-distribution]: ../tutorial/application-distribution.md
2014-02-20 03:39:24 -07:00
## Prerequisites
2016-05-02 01:26:18 -06:00
* At least 25GB disk space and 8GB RAM.
2022-04-11 17:05:21 -06:00
* Python >= 3.7.
2016-09-13 20:41:53 -06:00
* Node.js. There are various ways to install Node. You can download
2018-01-12 08:24:48 -07:00
source code from [nodejs.org ](https://nodejs.org ) and compile it.
2015-08-30 23:30:12 -06:00
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 ).
2017-07-27 11:29:41 -06:00
* [clang ](https://clang.llvm.org/get_started.html ) 3.4 or later.
2020-03-30 22:06:25 -06:00
* Development headers of GTK 3 and libnotify.
2014-02-20 03:56:59 -07:00
2022-01-26 08:29:16 -07:00
On Ubuntu >= 20.04, install the following libraries:
```sh
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \
libnotify-dev libasound2-dev libcap-dev \
libcups2-dev libxtst-dev \
libxss1 libnss3-dev gcc-multilib g++-multilib curl \
gperf bison python3-dbusmock openjdk-8-jre
```
On Ubuntu < 20.04 , install the following libraries:
2014-02-20 03:56:59 -07:00
2017-11-24 03:13:57 -07:00
```sh
2018-02-15 14:08:55 -07:00
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk-3-dev \
2019-07-29 06:33:47 -06:00
libnotify-dev libgnome-keyring-dev \
2015-04-08 05:46:37 -06:00
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
2016-08-10 12:08:14 -06:00
libxss1 libnss3-dev gcc-multilib g++-multilib curl \
2019-05-08 16:28:55 -06:00
gperf bison python-dbusmock openjdk-8-jre
2014-05-15 00:12:40 -06:00
```
2016-12-14 20:05:24 -07:00
On RHEL / CentOS, install the following libraries:
2017-11-24 03:13:57 -07:00
```sh
2018-02-15 14:08:55 -07:00
$ sudo yum install clang dbus-devel gtk3-devel libnotify-devel \
2016-12-14 20:05:24 -07:00
libgnome-keyring-devel xorg-x11-server-utils libcap-devel \
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
2019-07-29 06:33:47 -06:00
nss-devel python-dbusmock openjdk-8-jre
2016-12-14 20:05:24 -07:00
```
2015-09-01 08:01:44 -06:00
On Fedora, install the following libraries:
2017-11-24 03:13:57 -07:00
```sh
2022-07-25 00:25:42 -06:00
$ sudo dnf install clang dbus-devel gperf gtk3-devel \
libnotify-devel libgnome-keyring-devel libcap-devel \
2016-12-14 20:05:24 -07:00
cups-devel libXtst-devel alsa-lib-devel libXrandr-devel \
2022-07-25 00:25:42 -06:00
nss-devel python-dbusmock
2015-09-01 08:01:44 -06:00
```
2021-01-06 23:41:08 -07:00
On Arch Linux / Manjaro, install the following libraries:
```sh
$ sudo pacman -Syu base-devel clang libdbus gtk2 libnotify \
libgnome-keyring alsa-lib libcap libcups libxtst \
libxss nss gcc-multilib curl gperf bison \
python2 python-dbusmock jdk8-openjdk
```
2015-07-02 01:54:14 -06:00
Other distributions may offer similar packages for installation via package
2015-09-01 08:01:44 -06:00
managers such as pacman. Or one can compile from source code.
2015-06-05 17:38:30 -06:00
2015-07-02 01:54:14 -06:00
### Cross compilation
2015-08-30 23:30:12 -06:00
If you want to build for an `arm` target you should also install the following
2015-07-13 16:26:35 -06:00
dependencies:
2017-11-24 03:13:57 -07:00
```sh
2015-07-13 16:26:35 -06:00
$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \
g++-arm-linux-gnueabihf
```
2017-10-31 08:09:12 -06:00
Similarly for `arm64` , install the following:
2017-11-24 03:13:57 -07:00
```sh
2017-10-31 08:09:12 -06:00
$ sudo apt-get install libc6-dev-arm64-cross linux-libc-dev-arm64-cross \
g++-aarch64-linux-gnu
```
2022-04-22 16:36:22 -06:00
And to cross-compile for `arm` or targets, you should pass the
2018-09-08 19:15:32 -06:00
`target_cpu` parameter to `gn gen` :
2015-07-02 01:54:14 -06:00
2017-11-24 03:13:57 -07:00
```sh
2019-11-07 12:51:44 -07:00
$ gn gen out/Testing --args='import(...) target_cpu="arm"'
2015-07-02 01:54:14 -06:00
```
2014-02-20 03:39:24 -07:00
## Building
2018-09-08 19:15:32 -06:00
See [Build Instructions: GN ](build-instructions-gn.md )
2017-03-17 12:44:18 -06:00
2014-02-20 03:39:24 -07:00
## Troubleshooting
2015-08-30 23:30:12 -06:00
### Error While Loading Shared Libraries: libtinfo.so.5
2015-07-03 22:57:29 -06:00
2017-06-19 09:45:06 -06:00
Prebuilt `clang` will try to link to `libtinfo.so.5` . Depending on the host
2015-08-30 23:30:12 -06:00
architecture, symlink to appropriate `libncurses` :
2015-07-03 22:57:29 -06:00
2017-11-24 03:13:57 -07:00
```sh
2015-07-03 22:57:29 -06:00
$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
```
2016-05-02 01:35:33 -06:00
## Advanced topics
The default building configuration is targeted for major desktop Linux
2017-07-27 11:29:41 -06:00
distributions. To build for a specific distribution or device, the following
2016-05-02 01:35:33 -06:00
information may help you.
2016-05-02 07:32:43 -06:00
### Using system `clang` instead of downloaded `clang` binaries
2018-01-12 08:24:48 -07:00
By default Electron is built with prebuilt
2017-07-27 11:29:41 -06:00
[`clang` ](https://clang.llvm.org/get_started.html ) binaries provided by the
2018-01-12 08:24:48 -07:00
Chromium project. If for some reason you want to build with the `clang`
2018-09-08 19:15:32 -06:00
installed in your system, you can specify the `clang_base_path` argument in the
GN args.
2016-05-02 07:32:43 -06:00
2018-09-08 19:15:32 -06:00
For example if you installed `clang` under `/usr/local/bin/clang` :
2016-05-02 07:32:43 -06:00
2017-11-24 03:13:57 -07:00
```sh
2019-11-07 12:51:44 -07:00
$ gn gen out/Testing --args='import("//electron/build/args/testing.gn") clang_base_path = "/usr/local/bin"'
2016-05-02 07:32:43 -06:00
```
2017-07-27 11:29:41 -06:00
### Using compilers other than `clang`
2016-05-02 07:32:43 -06:00
2018-09-08 19:15:32 -06:00
Building Electron with compilers other than `clang` is not supported.