From 5415ac5b3dfecdf0687db45b22b90aadece27bad Mon Sep 17 00:00:00 2001 From: Dmitry Ng Date: Wed, 18 Oct 2023 22:32:45 +0300 Subject: [PATCH] change base golang image to 1.20.5 and add multi-platform images build --- Dockerfile | 24 ++++++++++++++++++++++-- README.md | 22 +++++++++++++++++++--- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 32568b1..a01e411 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Golang docker image options ARG GO_IMAGE=buster -ARG GO_VERSION=1.19.0 +ARG GO_VERSION=1.20.5 # Libtool arguments ARG LIBTOOL_VERSION=2.4.6_3 @@ -78,7 +78,21 @@ RUN gzip -dc "${OSX_CROSS_PATH}/tarballs/libtool-${LIBTOOL_VERSION}.tar.gz" | ta "libtool/${LIBTOOL_VERSION}/lib/" # Making the final image with goreleaser and osxcross -FROM osx-cross-base AS final +FROM --platform=linux/arm64/v8 osx-cross-base AS final-arm64 +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -qq && apt-get install -y -q --no-install-recommends \ + libltdl-dev \ + gcc-multilib-i686-linux-gnu \ + g++-multilib-i686-linux-gnu \ + gcc-multilib-x86-64-linux-gnu \ + g++-multilib-x86-64-linux-gnu \ + gcc-mingw-w64 \ + g++-mingw-w64 \ + parallel \ + jq \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +FROM --platform=linux/amd64 osx-cross-base AS final-amd64 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq && apt-get install -y -q --no-install-recommends \ libltdl-dev \ @@ -90,6 +104,12 @@ RUN apt-get update -qq && apt-get install -y -q --no-install-recommends \ jq \ && apt-get clean && rm -rf /var/lib/apt/lists/* +################### +# multiarch build stage +################### + +FROM final-${TARGETARCH} as final + COPY --from=osx-cross "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}/" COPY --from=libtool "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}/" ENV PATH=${OSX_CROSS_PATH}/target/bin:$PATH diff --git a/README.md b/README.md index 10c4f79..90554ef 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This project based on original repository by [docker/golang-cross](https://githu ```Dockerfile # Golang docker image options ARG GO_IMAGE=buster -ARG GO_VERSION=1.17.0 +ARG GO_VERSION=1.20.5 # Libtool arguments ARG LIBTOOL_VERSION=2.4.6_3 @@ -54,6 +54,13 @@ docker build \ -t local/vxbuild-cross:1.17.0-stretch . ``` +### Use arguments to build multi-platform images +```bash +docker buildx build \ + --platform linux/amd64,linux/arm64/v8 \ + -t local/vxbuild-cross:multiarch . +``` + ### Use arguments to choose MacOS SDK 10.10 ```bash docker build \ @@ -116,11 +123,20 @@ docker build \ * `GOOS=windows GOARCH=amd64 go build` * `GOOS=windows GOARCH=386 go build` -### Cross compile Go project with cgo (docker container inside) +### Cross compile Go project with cgo on linux/amd64 (docker container inside) * `GOOS=linux GOARCH=amd64 CC=gcc CXX=g++ CGO_ENABLED=1 go build` * `GOOS=linux GOARCH=386 CC=gcc CXX=g++ CGO_ENABLED=1 go build` * `GOOS=darwin GOARCH=amd64 CC=o64-clang CXX=o64-clang++ CGO_ENABLED=1 go build` -* `GOOS=darwin GOARCH=386 CC=o32-clang CXXo32-clang++ CGO_ENABLED=1 go build` +* `GOOS=darwin GOARCH=386 CC=o32-clang CXX=o32-clang++ CGO_ENABLED=1 go build` +* `GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ CGO_ENABLED=1 go build` +* `GOOS=windows GOARCH=386 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ CGO_ENABLED=1 go build` + +### Cross compile Go project with cgo on linux/arm64 (docker container inside) + +* `GOOS=linux GOARCH=amd64 CC=x86_64-linux-gnu-gcc CXX=x86_64-linux-gnu-g++ CGO_ENABLED=1 go build` +* `GOOS=linux GOARCH=386 CC=i686-linux-gnu-gcc CXX=i686-linux-gnu-g++ CGO_ENABLED=1 go build` +* `GOOS=darwin GOARCH=amd64 CC=o64-clang CXX=o64-clang++ CGO_ENABLED=1 go build` +* `GOOS=darwin GOARCH=386 CC=o32-clang CXX=o32-clang++ CGO_ENABLED=1 go build` * `GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ CGO_ENABLED=1 go build` * `GOOS=windows GOARCH=386 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ CGO_ENABLED=1 go build`