golang-crossbuild is a set of Docker images containing the requisite cross-compilers for cross compiling Go applications. The cross-compilers are needed when the application uses cgo.
The base image used is Debian 9 (stretch) unless otherwise specified.
docker.elastic.co/beats-dev/golang-crossbuild:[TAG]
The tags match with the Golang version, and for each supported version there is a release in https://github.com/elastic/golang-crossbuild/releases.
Replace <GOLANG_VERSION> with the version you would like to use, for instance: 1.17.1
docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-arm- linux/arm64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-armel- linux/armv5, linux/armv6docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-armhf- linux/armv7docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-basedocker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-darwin- darwin/amd64 (MacOS 10.11, MacOS 10.14)docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-main- linux/i386, linux/amd64, windows/386, windows/amd64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-main-debian7- linux/i386, linux/amd64, windows/386, windows/amd64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-main-debian8- linux/i386, linux/amd64, windows/386, windows/amd64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-main-debian9- linux/i386, linux/amd64, windows/386, windows/amd64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-main-debian10- linux/i386, linux/amd64, windows/386, windows/amd64docker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-mips- linux/mips64, linux/mips64eldocker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-mips32- linux/mips, linux/mipsledocker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-ppc- linux/ppc64, linux/ppc64ledocker.elastic.co/beats-dev/golang-crossbuild:<GOLANG_VERSION>-s390x- linux/s390x
Debian7 uses glibc 2.13 so the resulting binaries (if dynamically linked) have greater compatibility.
Debian8 uses glibc 2.19.
Debian9 uses glibc 2.24.
Debian10 uses glibc 2.28.
Until Golang version 1.15
| Description | Tags for 1.10 | Tags for 1.11 | Tags for 1.12 | Tags for 1.13 | Tags for 1.14 | Tags for 1.15 |
|---|---|---|---|---|---|---|
| linux/{amd64,386} and windows/{amd64,386} | 1.10.8-main |
1.11.13-main |
1.12.12-main |
1.13.12-main |
1.14.15-main |
1.15.14-main |
| linux/{armv5,armv6,armv7} | 1.10.8-arm |
1.11.13-arm |
1.12.12-arm |
1.13.12-arm |
1.14.15-arm |
1.15.14-arm |
| linux/arm64 | See above | See above | See above | See above | See above | See above |
| linux/{armv5,armv6} | See above | See above | See above | See above | See above | See above |
| linux/{armv7} | See above | See above | See above | See above | See above | See above |
| darwin/{386} | 1.10.8-darwin |
1.11.13-darwin |
1.12.12-darwin |
1.13.12-darwin |
1.14.15-darwin |
1.15.14-darwin |
| darwin/{amd64} | 1.10.8-darwin |
1.11.13-darwin |
1.12.12-darwin |
1.13.12-darwin |
1.14.15-darwin |
1.15.14-darwin |
| linux/{ppc64,ppc64le} | 1.10.8-ppc |
1.11.13-ppc |
1.12.12-ppc |
1.13.12-ppc |
1.14.15-ppc |
1.15.14-ppc |
| linux/{mips,mipsle,mips64,mips64le} | 1.10.8-mips |
1.11.13-mips |
1.12.12-mips |
1.13.12-mips |
1.14.15-mips |
|
| linux/{mips64,mips64le} | See above | See above | See above | See above | See above | See above |
| linux/{mips,mipsle} | See above | See above | See above | See above | See above | See above |
| linux/s390x | 1.10.8-s390x |
1.11.13-s390x |
1.12.12-s390 |
1.13.12-s390 |
1.14.15-s390 |
1.15.14-s390 |
| linux/{amd64,386} and windows/{amd64,386} (Debian 7 (see below)) | 1.10.8-main-debian7 |
1.11.13-main-debian7 |
1.12.12-main-debian7 |
1.13.12-main-debian7 |
1.14.15-main-debian7 |
1.15.14-main-debian7 |
| linux/{amd64,386} and windows/{amd64,386} (Debian 8 (see below)) | 1.10.8-main-debian8 |
1.11.13-main-debian8 |
1.12.12-main-debian8 |
1.13.12-debian8 |
1.14.15-main-debian8 |
1.15.14-main-debian8 |
| linux/{amd64,386} and windows/{amd64,386} (Debian 9 (see below)) | NA | NA | NA | NA | NA | 1.15.14-main-debian9 |
| linux/{amd64,386} and windows/{amd64,386} (Debian 10 (see below)) | NA | NA | NA | NA | NA | 1.15.14-main-debian10 |
| linux/arm64 (Debian 9 (see below)) | NA | NA | NA | NA | NA | 1.15.14-base-arm-debian9 |
Debian7 uses glibc 2.13 so the resulting binaries (if dynamically linked) have greater compatibility.
Debian8 uses glibc 2.19.
Debian9 uses glibc 2.24.
Debian10 uses glibc 2.28.
docker run -it --rm \
-v $GOPATH/src/github.com/user/go-project:/go/src/github.com/user/go-project \
-w /go/src/github.com/user/go-project \
-e CGO_ENABLED=1 \
docker.elastic.co/beats-dev/golang-crossbuild:1.16.7-armhf \
--build-cmd "make build" \
-p "linux/armv7"This will execute your projects make build target. While executing the build
command the following variables with be added to the environment: GOOS, GOARCH,
GOARM, PLATFORM_ID, CC, and CXX.
- Update the Docker tag in Makefile.common and/or Makefile.common and/or Makefile.common.
- Update the Go version and SHA256 in the Dockerfile(s). The SHA256 must be obtained from https://golang.org/dl/.
- Update the versions listed in this README.md.
- Commit the changes.
git add -u && git commit -m 'Update to Go 1.x.y'. - Create a Pull Request with the description
'Update to Go 1.x.y'. - When merging the PR then the automation will release those docker images.
This is not required unless the CI service is down.
- Build the images from the project's root with
make. - Get a logon token for the container registry by visiting https://docker-auth.elastic.co.
- Publish the images with
make push.
The osxcross repository used to cross compile for MacOSX has instructions for packaging the SDK.
The instructions for packaging the SDK on a Linux instance are:
- Clone the osxcross repo.
- Install
clang,make,libssl-dev,lzma-dev,libxml2-dev,libbz2-dev. - Download [Xcode from Apple](Download Xcode: https://developer.apple.com/download/more]).
- Run
./tools/gen_sdk_package_pbzx.sh <xcode>.xip.
If the gen_sdk_package_pbza.sh script gives an error that reads:
Error while extracting archive:(Metadata): bzip2 support not compiled in. (Success)
A manual work-around is needed in order to create the SDK (other people have reported that installing libbz2-dev fixed this issue).
First edit osxcross/tools/tools.sh to remove the trap line from the create_tmp_dir function (currently line 264).
Then re-run ./tools/gen_sdk_package_pbzx.sh <xcode>.xip.
Go to the tmp dir created in the build dir: cd osxcross/build/tmp_<X>.
Then run:
../../target/SDK/tools/bin/pbzx -n Content | cpio -i
cd ../..
XCODEDIR=osxcross/build/tmp_<X> ./tools/gen_sdk_package.sh
The SDK should be in the working directory. The tmp dir can be safely deleted after this.
The SDKs should be uploaded into the gs://obs-ci-cache bucket on GCP (Google Cloud Platform).
This is accessible to authorized users in the elastic-observability project here.