Build System Overview
gyp for project generation and
ninja for building. Project
configurations can be found in the
gyp files contain the main rules for building Electron:
atom.gypdefines how Electron itself is built.
common.gypiadjusts the build configurations of Node to make it build together with Chromium.
brightrayis built and includes the default configurations for linking with Chromium.
vendor/brightray/brightray.gypiincludes general build configurations about building.
Since Chromium is quite a large project, the final linking stage can take quite a few minutes, which makes it hard for development. In order to solve this, Chromium introduced the "component build", which builds each component as a separate shared library, making linking very quick but sacrificing file size and performance.
In Electron we took a very similar approach: for
Debug builds, the binary
will be linked to a shared library version of Chromium's components to achieve
fast linking time; for
Release builds, the binary will be linked to the static
library versions, so we can have the best possible binary size and performance.
All of Chromium's prebuilt binaries (
libchromiumcontent) are downloaded when
running the bootstrap script. By default both static libraries and shared
libraries will be downloaded and the final size should be between 800MB and 2GB
depending on the platform.
libchromiumcontent is downloaded from Amazon Web Services.
LIBCHROMIUMCONTENT_MIRROR environment variable is set, the bootstrap
script will download from it.
is a mirror for
libchromiumcontent. If you have trouble in accessing AWS, you
can switch the download address to it via
If you only want to build Electron quickly for testing or development, you
can download just the shared library versions by passing the
$ ./script/bootstrap.py --dev $ ./script/build.py -c D
Two-Phrase Project Generation
Electron links with different sets of libraries in
gyp, however, doesn't support configuring different link settings for
To work around this Electron uses a
libchromiumcontent_component to control which link settings to use and only
generates one target when running
Unlike most projects that use
Debug as target names, Electron
D instead. This is because
gyp randomly crashes if there is
Debug build configuration defined, and Electron only has
to generate one target at a time as stated above.
This only affects developers, if you are just building Electron for rebranding you are not affected.