This is a fork of the BIRD internet routing daemon which provides the following additional function used by Calico:
To build bird
:
./build.sh
.amd64
for all platforms, run ARCH=all ./build.sh
.amd64
for a specific other platform, run ARCH=<targetarch> ./build.sh
.bird
can be built for one platform - your local one, by default - or for all supported platforms.
When you run the build script - build.sh
- it tries to determine what platforms you want to build it for by looking at the environment variable ARCH
.
ARCH
is unset, it will determine it from the local platform using uname -m
.ARCH
is set to a supported platform, it will try to build from your local platform for that platform.ARCH
is set to all
, it will try to build for all supported architectures from your local platform.As of this writing, the supported architectures are as follows. Multiple entries on each line are aliases:
amd64
/ x86_64
arm64
/ aarch64
ppc64le
/ ppc64el
/ powerpc64le
mips64el
The build works as follows.
If you are building natively, it builds an alpine-linux-based build image from Dockerfile
. It then runs a container bind-mounting the source directory as /code
, builds the binaries statically linked, and saves them to ./dist/<arch>/
.
If you are cross-building, it builds a debian-linux-based build image from Dockerfile-all
. It then runs a container bind-mounting the source directory /code
, builds the binaries statically linked for each architecture, and saves themt to ./dist/<arch>/
.
In the list of architectures above, the first name in the alias as the one used for dist/<arch>
, no matter what architecture you entered. Thus if you use ARCH=x86_64 ./build.sh
, the binaries will be under dist/amd64/
. If you use ARCH=all
, it will create for each.