bazelbuild/bazel

bazel cross-compiling bazel

Open

#11,054 opened on Apr 1, 2020

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (25,384 stars) (4,465 forks)batch import
P3help wantedteam-Documentationteam-OSStype: documentation (cleanup)

Description

Description of the problem / feature request:

I'm trying to cross-compile bazel (with bazel). I'm using the 2.2.0 dist zip. However, I can't make it work. The problems I'm running into are illustrative of problems I've had cross-compiling other bazel projects.

Feature requests: what underlying problem are you trying to solve with this feature?

I want to be able to cross-compile Bazel for various architectures on an x86_64 host.

Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

First, with the --cpu flag:

$ bazel build --config=aarch64 //src:bazel-dev
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=1 --terminal_columns=161
ERROR: Config value aarch64 is not defined in any .rc file

Its unclear what the right --cpu value is. I've tried variants like arm64, arm, etc, and none of them work.

Trying with CC/CXX env vars:

$ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ bazel build //src:bazel-dev
INFO: Analyzed target //src:bazel-dev (227 packages loaded, 9905 targets configured).
INFO: Found 1 target...
INFO: Deleting stale sandbox base /home/paleozogt/.cache/bazel/_bazel_paleozogt/c342016f43074582e446517e0df80fa6/sandbox
ERROR: /home/paleozogt/.cache/bazel/_bazel_paleozogt/c342016f43074582e446517e0df80fa6/external/com_google_protobuf/BUILD.bazel:431:1: Linking of rule '@com_google_protobuf//:protoc' failed (Exit 1) aarch64-linux-gnu-gcc failed: error executing command /usr/bin/aarch64-linux-gnu-gcc @bazel-out/host/bin/external/com_google_protobuf/protoc-2.params

Use --sandbox_debug to see verbose messages from the sandbox
/usr/bin/ld.gold: fatal error: /usr/lib/gcc-cross/aarch64-linux-gnu/7/../../../../aarch64-linux-gnu/lib/../lib/Scrt1.o: unsupported ELF machine number 183
collect2: error: ld returned 1 exit status
Target //src:bazel-dev failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 732.262s, Critical Path: 13.61s
INFO: 416 processes: 416 linux-sandbox.
FAILED: Build did NOT complete successfully

While it seems to be compiling things correctly, the linking is falling down. (I suspect its using the host x86_64 linker.) I've tried using LD env var but that doesn't work. How can the linker get passed to the build?

I also tried building by using an arm64 Docker image (emulated with qemu-user-static). Aside from being a ridiculous way to build software, it doesn't work.

What operating system are you running Bazel on?

Ubuntu 18.04 for amd64.

What's the output of bazel info release?

release 2.2.0

Contributor guide