From 35852130d992dabd983cf72cad9012617d17ba07 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Thu, 13 Apr 2023 17:15:57 -0700 Subject: [PATCH] buildscripts: Cross-compile in Docker Previously builds were done with Ubuntu 16.04, and now we are using 18.04. Thus the generated binaries will no longer work for Ubuntu 16.04 and Debian 9 users, both of which are outside of their support window and aren't supported by Abseil. RHEL users are unaffected, as the binaries already didn't work on RHEL 7 and they will remain working with RHEL 8. FWIW, Ubuntu 18.04 will leave its support window in June. --- buildscripts/build_docker.sh | 1 + .../build_s390x_artifacts_in_docker.sh | 10 -------- .../Dockerfile.multiarch.base | 23 +++++++++---------- .../Dockerfile.ubuntu2004.base | 13 +++++++++++ buildscripts/kokoro/linux_artifacts.sh | 21 +++++++---------- 5 files changed, 33 insertions(+), 35 deletions(-) delete mode 100755 buildscripts/build_s390x_artifacts_in_docker.sh create mode 100644 buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base diff --git a/buildscripts/build_docker.sh b/buildscripts/build_docker.sh index fa75c07c1e..b34f9a6e54 100755 --- a/buildscripts/build_docker.sh +++ b/buildscripts/build_docker.sh @@ -4,4 +4,5 @@ set -eu -o pipefail readonly buildscripts_dir="$(dirname "$(readlink -f "$0")")" docker build -t grpc-java-artifacts-x86 "$buildscripts_dir"/grpc-java-artifacts docker build -t grpc-java-artifacts-multiarch -f "$buildscripts_dir"/grpc-java-artifacts/Dockerfile.multiarch.base "$buildscripts_dir"/grpc-java-artifacts +docker build -t grpc-java-artifacts-ubuntu2004 -f "$buildscripts_dir"/grpc-java-artifacts/Dockerfile.ubuntu2004.base "$buildscripts_dir"/grpc-java-artifacts diff --git a/buildscripts/build_s390x_artifacts_in_docker.sh b/buildscripts/build_s390x_artifacts_in_docker.sh deleted file mode 100755 index 1d3c2cffcc..0000000000 --- a/buildscripts/build_s390x_artifacts_in_docker.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -exu -o pipefail - -# first we need to install the prerequisites required for s390x cross compilation -apt-get update && apt-get install -y g++-s390x-linux-gnu - -# now kick off the build for the mvn artifacts for s390x -# mvn artifacts are stored in grpc-java/mvn-artifacts/ -SKIP_TESTS=true ARCH=s390_64 "$(dirname $0)"/kokoro/unix.sh - diff --git a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base index eb91e06c93..8f7cfae2f5 100644 --- a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base +++ b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base @@ -1,15 +1,14 @@ -FROM ubuntu:22.04 +FROM ubuntu:18.04 -# make sure apt-get works in unattended mode -ENV DEBIAN_FRONTEND=noninteractive - -# install the OS-level prerequisites for building protobuf and running the gradle build -RUN apt-get update && \ +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ apt-get upgrade -y && \ - apt-get install -y --no-install-recommends ca-certificates build-essential wget curl openjdk-8-jdk && \ - apt-get autoclean -y && \ - apt-get autoremove -y && \ + apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + g++-aarch64-linux-gnu \ + g++-powerpc64le-linux-gnu \ + openjdk-8-jdk \ + && \ rm -rf /var/lib/apt/lists/* - -ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 - diff --git a/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base b/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base new file mode 100644 index 0000000000..2d11d76c37 --- /dev/null +++ b/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base @@ -0,0 +1,13 @@ +FROM ubuntu:20.04 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + g++-s390x-linux-gnu \ + openjdk-8-jdk \ + && \ + rm -rf /var/lib/apt/lists/* diff --git a/buildscripts/kokoro/linux_artifacts.sh b/buildscripts/kokoro/linux_artifacts.sh index 18956ee7ce..c80d3436fb 100755 --- a/buildscripts/kokoro/linux_artifacts.sh +++ b/buildscripts/kokoro/linux_artifacts.sh @@ -52,16 +52,11 @@ readonly MVN_ARTIFACT_DIR="${MVN_ARTIFACT_DIR:-$GRPC_JAVA_DIR/mvn-artifacts}" mkdir -p "$MVN_ARTIFACT_DIR" cp -r "$LOCAL_MVN_TEMP"/* "$MVN_ARTIFACT_DIR"/ -# for aarch64 platform -sudo apt-get install -y g++-aarch64-linux-gnu -SKIP_TESTS=true ARCH=aarch_64 "$GRPC_JAVA_DIR"/buildscripts/kokoro/unix.sh - -# for ppc64le platform -sudo apt-get install -y g++-powerpc64le-linux-gnu -SKIP_TESTS=true ARCH=ppcle_64 "$GRPC_JAVA_DIR"/buildscripts/kokoro/unix.sh - -# for s390x platform -# building these artifacts inside a Docker container as we have specific requirements -# for GCC (version 11.x needed) which in turn requires Ubuntu 22.04 LTS -"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch /grpc-java/buildscripts/build_s390x_artifacts_in_docker.sh - +"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch env \ + SKIP_TESTS=true ARCH=aarch_64 /grpc-java/buildscripts/kokoro/unix.sh +"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch env \ + SKIP_TESTS=true ARCH=ppcle_64 /grpc-java/buildscripts/kokoro/unix.sh +# Use a newer GCC version. GCC 7 in multiarch has a bug: +# internal compiler error: output_operand: invalid %-code +"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-ubuntu2004 env \ + SKIP_TESTS=true ARCH=s390_64 /grpc-java/buildscripts/kokoro/unix.sh