build: use electron-frameworks sccache (#14171)

* build: update-external-binaries fetches sccache

* build: add util.add_exec_bit in scripts/

* build: use util.add_exec_bit in create-dist

* build: use util.add_exec_bit in update-external-binaries

this is needed to work around a bug in python's zipfile module that doesn't preserve the exec bit

https://bugs.python.org/issue18262

* fix: linting errors

* build: vsts, circleci use patched sccache

* build: always look for the x64 sccache

as it's the only arch we have it on

* fix: windows-specific errors in updaste-external-binaries

* fix: tyop

* fix: set SCCACHE_BUCKET, SCCACHE_TWO_TIER on circleci

* fix: syntax error in circleci yaml

* fix: keep churning

* chore: add tracer to file downloader

* docs: add sccache instructions for GN builds

* build: pull down the darwin sccache on mas builds

* build: use gn sync verbosely on circleci and vsts

* docs: copyediting

* build: remove unnecessary cache-dir arg

* docs: fix shell quoting in gn build instructions

* fix: invoke gclient without -verbose in circleci

* refactor: remove debug tracer

* fix: invoke gclient without -verbose in appveyor

* fix: invoke gclient without -verbose in vsts

* fix: pull add_exec_bit from correct source

* fix: remove 'SCCACHE_TWO_TIER' from CI scripts

* refactor: remove SCCACHE_BUCKET from ci scripts

this environment variable will be set via the CI UI instead

* refactor: clarify log message

* fix: set SCCACHE_PATH correctly for Windows CI
This commit is contained in:
Charles Kerr 2018-08-21 14:40:06 -05:00 committed by John Kleinschmidt
parent 73c43eaea7
commit e315e4d308
7 changed files with 57 additions and 30 deletions

View file

@ -5,7 +5,7 @@ build.
> **NOTE**: The GN build system is in _experimental_ status.
## Prerequisites
## Platform prerequisites
Check the build prerequisites for your platform before proceeding
@ -13,7 +13,7 @@ Check the build prerequisites for your platform before proceeding
* [Linux](build-instructions-linux.md#prerequisites)
* [Windows](build-instructions-windows.md#prerequisites)
## Install `depot_tools`
## GN prerequisites
You'll need to install [`depot_tools`][depot-tools], the toolset
used for fetching Chromium and its dependencies.
@ -27,20 +27,33 @@ try to download a Google-internal version that only Googlers have access to).
[depot-tools]: http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
## Getting the Code
## Cached builds (optional step)
### Using a Git cache (optional step)
### GIT_CACHE_PATH
`gclient` fetches about 16G worth of repository data. If you plan on building
more than once, consider using its cache feature to make future calls faster:
If you plan on building Electron more than once, adding a git cache will
speed up subsequent calls to `gclient`. To do this, set a `GIT_CACHE_PATH`
environment variable:
```sh
$ export GIT_CACHE_PATH="$HOME/.git_cache"
$ mkdir -p "$GIT_CACHE_PATH"
# This will take about 16G.
$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# This will use about 16G.
```
### Getting the code with gclient
### sccache
Thousands of files must be compiled to build Chromium and Electron.
You can avoid much of the wait by reusing Electron CI's build output via
[sccache](https://github.com/mozilla/sccache). This requires some
optional steps (listed below) and these two environment variables:
```sh
export SCCACHE_BUCKET="electronjs-sccache"
export SCCACHE_TWO_TIER=true
```
## Getting the code
```sh
$ mkdir electron-gn && cd electron-gn
@ -57,7 +70,9 @@ $ gclient sync --with_branch_heads --with_tags
```sh
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
$ gn gen out/Default --args='import("//electron/build/args/debug.gn")'
# this next line is needed only if building with sccache
$ export GN_EXTRA_ARGS="${GN_EXTRA_ARGS} cc_wrapper=\"${PWD}/electron/external_binaries/sccache\""
$ gn gen out/Default --args="import(\"//electron/build/args/debug.gn\") $GN_EXTRA_ARGS"
```
This will generate a build directory `out/Default` under `src/` with
@ -73,14 +88,14 @@ out/Default --list`.
Electron:**
```sh
$ gn gen out/Default --args='import("//electron/build/args/debug.gn")'
$ gn gen out/Default --args='import("//electron/build/args/debug.gn") $GN_EXTRA_ARGS'
```
**For generating Release (aka "non-component" or "static") build config of
Electron:**
```sh
$ gn gen out/Default --args='import("//electron/build/args/release.gn")'
$ gn gen out/Default --args="import(\"//electron/build/args/release.gn\") $GN_EXTRA_ARGS"
```
**To build, run `ninja` with the `electron:electron_app` target:**