build: document electron goma usage and add the external binaries (#21622)
This commit is contained in:
parent
0a850fbc5d
commit
e18acb4380
4 changed files with 85 additions and 2 deletions
2
build/args/goma.gn
Normal file
2
build/args/goma.gn
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
goma_dir = rebase_path("//electron/external_binaries/goma")
|
||||||
|
use_goma = true
|
61
docs/development/goma.md
Normal file
61
docs/development/goma.md
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
# Goma
|
||||||
|
|
||||||
|
> Goma is a distributed compiler service for open-source projects such as
|
||||||
|
> Chromium and Android.
|
||||||
|
|
||||||
|
Electron has a deployment of a custom Goma Backend that we make available to
|
||||||
|
all Electron Maintainers. See the [Access](#access) section below for details
|
||||||
|
on authentication.
|
||||||
|
|
||||||
|
## Enabling Goma
|
||||||
|
|
||||||
|
Currently Electron Goma supports both Windows and Linux, we may add macOS
|
||||||
|
support at some point in the future. If you are on a supported platform
|
||||||
|
you can enable goma by importing the `goma.gn` config file when using `gn`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\") import(\"//electron/build/args/goma.gn\")"
|
||||||
|
```
|
||||||
|
|
||||||
|
You must ensure that you do not have `cc_wrapper` configured, this means you
|
||||||
|
can't use `sccache` or similar technology.
|
||||||
|
|
||||||
|
Before you can use goma to build Electron you need to authenticate against
|
||||||
|
the Goma service. You only need to do this once per-machine.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd electron/external_binaries/goma
|
||||||
|
goma_auth.py login
|
||||||
|
```
|
||||||
|
|
||||||
|
Once authenticated you need to make sure the goma daemon is running on your
|
||||||
|
machine.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd electron/external_binaries/goma
|
||||||
|
goma_ctl.py ensure_start
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building with Goma
|
||||||
|
|
||||||
|
When you are using Goma you can run `ninja` with a substantially higher `j`
|
||||||
|
value than would normally be supported by your machine. Please do not set
|
||||||
|
a value higher than **300**, we monitor the goma system and users found to
|
||||||
|
be abusing it with unreasonable concurrency will be de-activated.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ninja -C out/Testing electron -j 200
|
||||||
|
```
|
||||||
|
|
||||||
|
## Monitoring Goma
|
||||||
|
|
||||||
|
If you access [http://localhost:8088](http://localhost:8088) on your local
|
||||||
|
machine you can monitor compile jobs as they flow through the goma system.
|
||||||
|
|
||||||
|
## Access
|
||||||
|
|
||||||
|
For security and cost reasons access to Electron Goma is currently restricted
|
||||||
|
to Electron Maintainers. If you want access please head to `#access-requests` in
|
||||||
|
Slack and ping `@goma-squad` to ask for access. Please be aware that being a
|
||||||
|
maintainer does not *automatically* grant access and access is determined on a
|
||||||
|
case by case basis.
|
|
@ -43,6 +43,21 @@
|
||||||
"url": "sccache-win32-x64.zip",
|
"url": "sccache-win32-x64.zip",
|
||||||
"platform": "win32",
|
"platform": "win32",
|
||||||
"sha": "b6a20fd1c2026f3792e7286bc768a7ebc261847b76449b49f55455e1f841fecd"
|
"sha": "b6a20fd1c2026f3792e7286bc768a7ebc261847b76449b49f55455e1f841fecd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "goma-win.zip",
|
||||||
|
"platform": "win32",
|
||||||
|
"sha": "f97c88aa5d49395ae20387b6329ad406fd019f5fb4aac4ba639ca928b7151f6b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "goma-linux.tgz",
|
||||||
|
"platform": "linux",
|
||||||
|
"sha": "1cb3099a40f6200ae57216efa26af795c587b6ac7ae97955d1078d0b1e3011a6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "goma-mac.tgz",
|
||||||
|
"platform": "darwin",
|
||||||
|
"sha": "da1e7de82fbf3b99f1a9d0f9bf51b25e75e8778fec180deb72cff873813d717c"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import errno
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import tarfile
|
||||||
|
|
||||||
from lib.config import PLATFORM, get_target_arch
|
from lib.config import PLATFORM, get_target_arch
|
||||||
from lib.util import add_exec_bit, download, extract_zip, rm_rf, \
|
from lib.util import add_exec_bit, download, extract_zip, rm_rf, \
|
||||||
|
@ -51,8 +52,12 @@ def main():
|
||||||
|
|
||||||
temp_path = download_binary(base_url, version, binary['url'], binary['sha'])
|
temp_path = download_binary(base_url, version, binary['url'], binary['sha'])
|
||||||
|
|
||||||
# We assume that all binaries are in zip archives.
|
if temp_path.endswith('.zip'):
|
||||||
extract_zip(temp_path, output_dir)
|
extract_zip(temp_path, output_dir)
|
||||||
|
else:
|
||||||
|
tar = tarfile.open(temp_path, "r:gz")
|
||||||
|
tar.extractall(output_dir)
|
||||||
|
tar.close()
|
||||||
|
|
||||||
# Hack alert. Set exec bit for sccache binaries.
|
# Hack alert. Set exec bit for sccache binaries.
|
||||||
# https://bugs.python.org/issue15795
|
# https://bugs.python.org/issue15795
|
||||||
|
|
Loading…
Reference in a new issue