From b4ed292741e9fe4e2e667b4ebe07ccc1d3d910e3 Mon Sep 17 00:00:00 2001 From: Kavitha Sivakavi Date: Tue, 13 Jun 2023 15:37:49 +0530 Subject: [PATCH] fix: s390x for build-images/rust-bullseye-stable-1-s390x Fixes: #62 --- Jenkinsfile | 28 ++++++++++++++++++++-------- rust/debian/Dockerfile | 23 +++++++++++++++++++---- rust/debian/Dockerfile.base | 19 +++++++++++++++++-- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7297294..522b7c8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,4 +1,5 @@ library 'magic-butler-catalogue' +def TRIGGER_PATTERN = '.*@logdnabot.*' pipeline { agent none @@ -8,7 +9,8 @@ pipeline { ansiColor 'xterm' } triggers { - issueCommentTrigger('.*@logdnabot.*') + + issueCommentTrigger(TRIGGER_PATTERN) parameterizedCron( env.BRANCH_NAME ==~ 'main' ? 'H 8 * * 7 % PUBLISH_GCR_IMAGE=true;PUBLISH_ICR_IMAGE=true' : '' ) @@ -31,7 +33,8 @@ pipeline { } } steps { - error("A maintainer needs to approve this PR for with comment containing '.*@logdnabot.*'") + + error("A maintainer needs to approve this PR for with comment containing ${TRIGGER_PATTERN}") } } @@ -49,8 +52,8 @@ pipeline { // Host architecture of the built image axis { name 'PLATFORM' - // Support for x86_64 and arm64 for Mac M1s/AWS graviton devs/builders - values 'linux/amd64', 'linux/arm64' + // Support for x86_64 and arm64 and s390x for Mac M1s/AWS graviton devs/builders + values 'linux/amd64', 'linux/arm64', 'linux/s390x' } } agent { @@ -164,12 +167,12 @@ pipeline { // Target ISA for musl cross comp toolchain and precompiled libs axis { name 'CROSS_COMPILER_TARGET_ARCH' - values 'x86_64', 'aarch64' + values 'x86_64', 'aarch64', 's390x' } // Host architecture of the built image axis { name 'PLATFORM' - values 'linux/amd64', 'linux/arm64' + values 'linux/amd64', 'linux/arm64', 'linux/s390x' } } agent { @@ -312,7 +315,7 @@ pipeline { // Target ISA for musl cross comp toolchain and precompiled libs axis { name 'CROSS_COMPILER_TARGET_ARCH' - values 'x86_64', 'aarch64' + values 'x86_64', 'aarch64', 's390x' } } agent { @@ -559,6 +562,15 @@ def createMultiArchImageManifest(Map config = [:]){ , image_suffix: "${config.image_suffix}-linux-arm64" , append_git_sha: append_git_sha ) - sh("docker manifest create ${manifest_name} --amend ${arm64_image_name} --amend ${amd64_image_name}") + def s390x_image_name = generateImageName( + repo_base: repo_base + , name: config.name + , variant_base: config.variant_base + , variant_version: config.variant_version + , version: config.version + , image_suffix: "${config.image_suffix}-linux-s390x" + , append_git_sha: append_git_sha + ) + sh("docker manifest create ${manifest_name} --amend ${arm64_image_name} --amend ${amd64_image_name} --amend ${s390x_image_name}") return manifest_name } diff --git a/rust/debian/Dockerfile b/rust/debian/Dockerfile index c153139..48fc87e 100644 --- a/rust/debian/Dockerfile +++ b/rust/debian/Dockerfile @@ -1,4 +1,4 @@ -ARG CROSS_COMPILER_TARGET_ARCH=x86_64 +ARG CROSS_COMPILER_TARGET_ARCH="$(uname -m)" ARG BASE_IMAGE=logdna/build-images/rust-buster-1-stable-base-${CROSS_COMPILER_TARGET_ARCH} # Image that runs natively on the BUILDPLATFORM to produce cross compile @@ -19,7 +19,11 @@ ARG SCCACHE_SERVER_PORT=4226 ARG CARGO_BINSTALL_URL_BASE="https://github.com/cargo-bins/cargo-binstall/releases/latest/download" -RUN rustup target add "${!TARGETARCH}-unknown-linux-musl" +RUN if [[ "${CROSS_COMPILER_TARGET_ARCH}" == "s390x" ]]; then \ + rustup target add "${!TARGETARCH}-unknown-linux-gnu" ; \ + else \ + rustup target add "${!TARGETARCH}-unknown-linux-musl" ; \ + fi RUN dpkg --add-architecture ${TARGETARCH} && \ dpkg --add-architecture ${!CROSS_COMPILER_TARGET_ARCH} && \ @@ -29,6 +33,8 @@ ENV CC_aarch64_unknown_linux_musl=clang ENV CFLAGS_aarch64_unknown_linux_musl="-isystem /usr/include/aarch64-linux-musl" ENV CC_x86_64_unknown_linux_musl=clang ENV CFLAGS_x86_64_unknown_linux_musl="-isystem /usr/include/x86_64-linux-musl" +ENV CC_s390x_unknown_linux_gnu=clang +ENV CFLAGS_s390x_unknown_linux_gnu="-isystem /usr/include/s390x-linux-gnu" RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \ mkdir -p /out/tools /usr/local/bin/ && \ @@ -271,10 +277,13 @@ RUN mkdir -p /usr/local/rocksdb/${CROSS_COMPILER_TARGET_ARCH}-linux-musl/include RUN printf "#!/usr/bin/env bash\nclang -fuse-ld=lld --target=aarch64-unknown-linux-musl \$@" > /usr/local/bin/aarch64-unknown-linux-musl-clang && \ chmod +x /usr/local/bin/aarch64-unknown-linux-musl-clang && \ printf "#!/usr/bin/env bash\nclang -fuse-ld=lld --target=x86_64-unknown-linux-musl \$@" > /usr/local/bin/x86_64-unknown-linux-musl-clang && \ - chmod +x /usr/local/bin/x86_64-unknown-linux-musl-clang + chmod +x /usr/local/bin/x86_64-unknown-linux-musl-clang && \ + printf "#!/usr/bin/env bash\nclang -fuse-ld=lld --target=s390x-unknown-linux-musl \$@" > /usr/local/bin/s390x-unknown-linux-musl-clang && \ + chmod +x /usr/local/bin/s390x-unknown-linux-musl-clang ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="/usr/local/bin/aarch64-unknown-linux-musl-clang" ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER="/usr/local/bin/x86_64-unknown-linux-musl-clang" +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_MUSL_LINKER="/usr/local/bin/s390x-unknown-linux-musl-clang" ENV XWIN_CACHE_DIR="${CARGO_HOME}/xwin" ENV XWIN_TOOLKIT_BIN_PATH="/usr/local/bin" @@ -303,6 +312,7 @@ ENV STATIC_RUSTFLAGS="${COMMON_RUSTFLAGS} -Ctarget-feature=+crt-static -Clink-ar ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="${STATIC_RUSTFLAGS} -Clink-args=--target=aarch64-unknown-linux-musl" ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="${STATIC_RUSTFLAGS} -Clink-args=--target=x86_64-unknown-linux-musl" +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_MUSL_RUSTFLAGS="${STATIC_RUSTFLAGS} -Clink-args=--target=s390x-unknown-linux-musl" ENV CC_aarch64_unknown_linux_musl="clang" ENV CFLAGS_aarch64_unknown_linux_musl="--target=aarch64-unknown-linux-musl -fuse-ld=lld -static -fPIC -nostdlib -nodefaultlibs -nostdinc -isystem $LLVM_SYSROOT/usr/lib/clang/${LLVM_VERSION}/include/ -isystem $LLVM_SYSROOT/usr/aarch64-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/include/linux/ -L ${LLVM_SYSROOT}/usr/aarch64-unknown-linux-musl/lib -lc -L ${LLVM_SYSROOT}/usr/lib/linux/ -lclang_rt.builtins-aarch64" @@ -314,6 +324,11 @@ ENV CFLAGS_x86_64_unknown_linux_musl="--target=x86_64-unknown-linux-musl -fuse-l ENV CXX_x86_64_unknown_linux_musl="clang++" ENV CXXFLAGS_x86_64_unknown_linux_musl="--target=x86_64-unknown-linux-musl -fuse-ld=lld -nostdinc -static-libstdc++ --stdlib=c++ --rtlib=compiler-rt -nodefaultlibs -nostdinc++ -isystem $LLVM_SYSROOT/usr/include/c++/v1/ -isystem $LLVM_SYSROOT/usr/x86_64-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/lib/clang/${LLVM_VERSION}/include/ -isystem $LLVM_SYSROOT/usr/x86_64-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/include/linux/ " +ENV CC_s390x_unknown_linux_gnu="clang" +ENV CFLAGS_s390x_unknown_linux_gnu="--target=s390x-unknown-linux-gnu -fuse-ld=lld -static -fPIC -nostdlib -nodefaultlibs -nostdinc -isystem $LLVM_SYSROOT/usr/lib/clang/${LLVM_VERSION}/include/ -isystem $LLVM_SYSROOT/usr/s390x-unknown-linux-gnu/include/ -isystem $LLVM_SYSROOT/usr/include/linux/ -L ${LLVM_SYSROOT}/usr/s390x-unknown-linux-gnu/lib -lc -L ${LLVM_SYSROOT}/usr/lib/linux/ -lclang_rt.builtins-s390x" +ENV CXX_s390x_unknown_linux_gnu="clang++" +ENV CXXFLAGS_s390x_unknown_linux_gnu="--target=s390x-unknown-linux-gnu -fuse-ld=lld -nostdinc -static-libstdc++ --stdlib=c++ --rtlib=compiler-rt -nodefaultlibs -nostdinc++ -isystem $LLVM_SYSROOT/usr/include/c++/v1/ -isystem $LLVM_SYSROOT/usr/s390x-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/lib/clang/${LLVM_VERSION}/include/ -isystem $LLVM_SYSROOT/usr/s390x-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/include/linux/ " + ENV PCRE2_SYS_STATIC=1 ENV SYSTEMD_LIB_DIR="/lib/${CROSS_COMPILER_TARGET_ARCH}-linux-gnu" @@ -324,4 +339,4 @@ ENV PKG_CONFIG_ALLOW_CROSS=true \ ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse -CMD ["bash"] +CMD ["bash"] \ No newline at end of file diff --git a/rust/debian/Dockerfile.base b/rust/debian/Dockerfile.base index cec1e08..efe6042 100644 --- a/rust/debian/Dockerfile.base +++ b/rust/debian/Dockerfile.base @@ -1,4 +1,5 @@ ARG VARIANT_VERSION=buster +ARG CROSS_COMPILER_TARGET_ARCH="$(uname -m)" FROM buildpack-deps:${VARIANT_VERSION}-curl # Needs to be in this scope too @@ -25,6 +26,7 @@ ENV amd64=x86_64 ENV arm64=aarch64 ENV x86_64=amd64 ENV aarch64=arm64 +ENV s390x=s390x ENV LANG en_US.UTF-8 ENV LANGUAGE en_US @@ -72,7 +74,7 @@ RUN unmunch /usr/share/hunspell/en_GB.dic /usr/share/hunspell/en_GB.aff 2> /dev/ ################################################################################################ # msitools not avail on buster -RUN if [[ "${VARIANT_VERSION}" != "buster" ]] ; then \ +RUN if [[ "${CROSS_COMPILER_TARGET_ARCH}" != "s390x" ]] ; then \ apt update -y && \ apt install -y meson valac-bin valac valac-0.48-vapi libgsf-1-dev bats bison libgcab-dev libgirepository1.0-dev wine && \ git clone --recurse-submodules https://github.com/GNOME/msitools.git && \ @@ -109,6 +111,11 @@ ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=clang ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_AR=llvm-ar ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-Clink-args=-fuse-ld=lld \ -Clink-args=--target=x86_64-unknown-linux-musl" + +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_MUSL_LINKER=clang +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_MUSL_AR=llvm-ar +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-Clink-args=-fuse-ld=lld \ + -Clink-args=--target=s390x-unknown-linux-musl" # Teach cargo to use clang as the linker driver ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=clang ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_AR=llvm-ar @@ -116,6 +123,9 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_AR=llvm-ar ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_AR=llvm-ar +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_GNU_LINKER=clang +ENV CARGO_TARGET_s390x_UNKNOWN_LINUX_GNU_AR=llvm-ar + # Set up basic gnu C configuration for to use clang as the linker driver, llvm-ar, ETC ENV CC_aarch64_unknown_linux_gnu="clang" ENV CFLAGS_aarch64_unknown_linux_gnu="--target=aarch64-unknown-linux-gnu -fuse-ld=lld -fPIC" @@ -127,6 +137,11 @@ ENV CFLAGS_x86_64_unknown_linux_gnu="--target=x86_64-unknown-linux-gnu -fuse-ld= ENV CXX_x86_64_unknown_linux_gnu="clang++" ENV CXXFLAGS_x86_64_unknown_linux_gnu="--target=x86_64-unknown-linux-gnu -fuse-ld=lld -fPIC" +ENV CC_s390x_unknown_linux_gnu="clang" +ENV CFLAGS_s390x_unknown_linux_gnu="--target=s390x-unknown-linux-gnu -fuse-ld=lld -fPIC" +ENV CXX_s390x_unknown_linux_gnu="clang++" +ENV CXXFLAGS_s390x_unknown_linux_gnu="--target=s390x-unknown-linux-gnu -fuse-ld=lld -fPIC" + ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse -CMD ["bash"] +CMD ["bash"] \ No newline at end of file