2.5 KiB
Build system overview
Atom Shell uses gyp for project generation, and ninja for building, project
configurations can be found in .gyp and .gypi files.
Gyp files
Following gyp files contain the main rules of building Atom Shell:
atom.gypdefines how Atom Shell itself is built.common.gypiadjusts the build configurations of Node to make it build together with Chromium.vendor/brightray/brightray.gypdefines howbrightrayis built, and includes the default configurations of linking with Chromium.vendor/brightray/brightray.gypiincludes general build configurations about building.
Component build
Since Chromium is a quite large project, the final linking stage would take quite a few minutes, making it hard for development. In order to solve this, Chromium introduces the "component build", which builds each component as a separate shared library, so linking can be very quick, in sacrifice of file size and performance.
In Atom Shell we took a very similar approach: for Debug build, the binary
will be linked to shared library version of Chromium's components to achieve
fast linking time; for Release build, the binary will be linked to the static
library versions, so we can have best binary size and performance.
Minimal bootstrapping
All the Chromium's prebuilt binaries are downloaded when running the bootstrap script, by default both static libraries and shared libraries will be downloaded, and the final size is between 800MB to 2GB according to the platform.
If you only want to build Atom Shell quickly for testing or development, you
can only download the shared library versions by passing the --dev parameter:
$ ./script/boostrap.by --dev
$ ./script/build.by -c D
Two-phrase project generation
Atom Shell links with different sets of libraries in Release and Debug
builds, however gyp doesn't support configuring different link settings for
different configurations.
To work around this Atom Shell uses a gyp variable
libchromiumcontent_component to control which link settings to use, and only
generates one target when running gyp.
Target names
Unlike most projects that use Release and Debug as target names, Atom Shell
uses R and D instead. This is because gyp randomly crashes if there is
only one Release or Debug build configuration is defined, and Atom Shell has
to only generate one target for one time as stated above.
This only affects developers, if you are only building Atom Shell for rebranding you are not affected.