prysm-pulse/tools/cross-toolchain
Preston Van Loon 65db331eaf
Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725)
* Check in go-ethereum crypto/sepc256k1 package with proper build rules

* gaz

* Add karalabe/usb

* viz improvement

* Remove bazel-go-ethereum, use vendored libraries only

* move vendor stuff to third_party so that go mod wont be mad anymore

* fix geth e2e flags

* fix geth e2e flags

* remove old rules_foreign_cc toolchain

* Update cross compile docker image to support os x

* works for geth build

* remove copy of sepc256k1

* revert changes in tools/cross-toolchain

* gaz

* Update go-ethereum to 1.10.10

* Revert "revert changes in tools/cross-toolchain"

This reverts commit 2e8128f7c3a2d20a16e50b88ec7e5b69c70ddf2b.

* revert tags changes

Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
2021-10-19 00:00:22 +00:00
..
configs Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
BUILD.bazel First cut at multi-arch cross compiling toolchain (#4945) 2020-03-05 16:59:56 +00:00
cc_toolchain_config_linux_arm64.bzl.tpl First cut at multi-arch cross compiling toolchain (#4945) 2020-03-05 16:59:56 +00:00
cc_toolchain_config_osx.bzl.tpl Update rules_go (#7202) 2020-11-10 03:01:56 +00:00
cc_toolchain_config_windows.bzl.tpl Fix Windows Builds For Blst (#7803) 2020-11-13 07:17:39 +00:00
cc_toolchain.BUILD.bazel.tpl Fix //... for darwin (#9273) 2021-07-23 18:26:49 +00:00
common_osxcross.sh Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
Dockerfile Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
empty.bzl First cut at multi-arch cross compiling toolchain (#4945) 2020-03-05 16:59:56 +00:00
install_clang_cross10.sh Fix All Deep Source Shell Issues and Go Issues (#8661) 2021-03-24 19:57:27 +00:00
install_osxcross.sh Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
link_osxcross.sh Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
prysm_toolchains.bzl First cut at multi-arch cross compiling toolchain (#4945) 2020-03-05 16:59:56 +00:00
rbe_toolchains_config.bzl Remove bazel-go-ethereum fork, use upstream go-ethereum (#9725) 2021-10-19 00:00:22 +00:00
README.md Remove Kafka from Prysm (#9470) 2021-08-26 23:59:00 +00:00
regenerate.sh Update rules_go (#7202) 2020-11-10 03:01:56 +00:00

Multiarch Cross Compiling Toolchain

Toolchain suite

This package declares a c++ toolchain suite with cross compilers for targeting four platforms:

  • linux_amd64
  • linux_arm64
  • osx_amd64
  • windows_amd64

This toolchain suite describes cross compile configuration with a Dockerfile with the appropriate host dependencies. These toolchains can be used locally (see caveats), Remote Build Execution (RBE), and in a docker sandbox (like RBE, but local).

Cross compile target support

target linux_amd64 linux_arm64 osx_amd64 windows_amd64
//beacon-chain ✔️ docker-sandbox and RBE, supported locally only ✔️ docker-sandbox and RBE ✔️ docker-sandbox ✔️ docker-sandbox
//validator ✔️ docker-sandbox and RBE ✔️ docker-sandbox and RBE ✔️ docker-sandbox ✔️

The configurations above are enforced via pull request presubmit checks.

Bazel config flag values

Use these values with --config=<flag>, multiple times if more than one value is defined in the table. Example: bazel build //beacon-chain --config=windows_amd64_docker to build windows binary in a docker sandbox.

Config linux_amd64 linux_arm64 osx_amd64 windows_amd64
Local run linux_amd64 linux_arm64 osx_amd64 windows_amd64
Docker sandbox linux_amd64_docker linux_arm64_docker osx_amd64_docker windows_amd64_docker
RBE (See Caveats) linux_amd64 and remote linux_arm64 and remote osx_amd64 and remote windows_amd64 and remote

Caveats

There are a few caveats to each of these strategies.

  • Local runs require clang compiler and the appropriate cross compilers installed. These runs should only be considered for a power user or user with specific build requirements. See the Dockerfile setup scripts to understand what dependencies must be installed and where.
  • Docker sandbox is slow. Like really slow! The purpose of the docker sandbox is to test RBE builds without deploying a full RBE system. Each build action is executed in its own container. Given the large number of small targets in this project, the overhead of creating docker containers makes this strategy the slowest of all, but requires zero additional setup.
  • Remote Build Execution is by far the fastest, if you have a RBE backend available. This is another advanced use case which will require two config flags above as well as additional flags to specify the --remote_executor. Some of these flags are present in the project .bazelrc with example values, but commented out.