diff --git a/Jenkinsfile b/Jenkinsfile index 7d7a2e8..c9d2962 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,21 +19,21 @@ pipeline { SCCACHE_REGION='us-east-1' } parameters { - booleanParam(name: 'PUBLISH_GCR_IMAGE', description: 'Publish docker image to Google Container Registry (GCR)', defaultValue: false) + // booleanParam(name: 'PUBLISH_GCR_IMAGE', description: 'Publish docker image to Google Container Registry (GCR)', defaultValue: false) booleanParam(name: 'PUBLISH_DOCKER_IMAGE', description: 'Publish docker image to Dockerhub', defaultValue: false) } stages { - stage('Validate PR Source') { - when { - expression { env.CHANGE_FORK } - not { - triggeredBy 'issueCommentCause' - } - } - steps { - error("A maintainer needs to approve this PR with a comment of '${TRIGGER_STRING}'") - } - } + // stage('Validate PR Source') { + // when { + // expression { env.CHANGE_FORK } + // not { + // triggeredBy 'issueCommentCause' + // } + // } + // steps { + // error("A maintainer needs to approve this PR with a comment of '${TRIGGER_STRING}'") + // } + // } stage('Build base images for each supported build host platform') { matrix { @@ -50,7 +50,7 @@ pipeline { axis { name 'PLATFORM' // Support for x86_64 and arm64 for Mac M1s/AWS graviton devs/builders - values 'linux/amd64', 'linux/arm64' + values 'linux/amd64', 'linux/arm64', 'linux/s390x' } } agent { @@ -113,43 +113,43 @@ pipeline { } // End Build Rust Images stage // Build the images containing the cross compilers targeting actual // distribution platforms - stage('Create Multi-Arch Manifests/Images for Base') { - matrix { - axes { - axis { - name 'RUSTC_VERSION' - values 'stable', 'beta', 'nightly' - } - axis { - name 'VARIANT_VERSION' - values 'buster', 'bullseye' - } - } - agent { - node { - label 'rust-x86_64' - customWorkspace "docker-images-${BUILD_NUMBER}" - } - } - stages { - stage ('Create GCR Multi Arch Manifest') { - steps { - script { - def gcr_manifest_name = createMultiArchImageManifest( - name: "rust" - , variant_base: "debian" - , variant_version: "${VARIANT_VERSION}" - , version: "${RUSTC_VERSION}" - , image_suffix: "base" - ) - // GCR manifest - sh("docker manifest push --purge ${gcr_manifest_name}") - } - } - } - } - } - } + // stage('Create Multi-Arch Manifests/Images for Base') { + // matrix { + // axes { + // axis { + // name 'RUSTC_VERSION' + // values 'stable', 'beta', 'nightly' + // } + // axis { + // name 'VARIANT_VERSION' + // values 'buster', 'bullseye' + // } + // } + // agent { + // node { + // label 'rust-x86_64' + // customWorkspace "docker-images-${BUILD_NUMBER}" + // } + // } + // stages { + // stage ('Create GCR Multi Arch Manifest') { + // steps { + // script { + // def gcr_manifest_name = createMultiArchImageManifest( + // name: "rust" + // , variant_base: "debian" + // , variant_version: "${VARIANT_VERSION}" + // , version: "${RUSTC_VERSION}" + // , image_suffix: "base" + // ) + // // GCR manifest + // sh("docker manifest push --purge ${gcr_manifest_name}") + // } + // } + // } + // } + // } + // } stage('Build CROSS_COMPILER_TARGET_ARCH Specific images on top of PLATFORMs base image') { matrix { axes { @@ -164,12 +164,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 { diff --git a/rust/debian/Dockerfile b/rust/debian/Dockerfile index c153139..e9aa489 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=blank 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 @@ -29,6 +29,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_musl=clang +ENV CFLAGS_s390x_unknown_linux_musl="-isystem /usr/include/s390x-linux-musl" RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \ mkdir -p /out/tools /usr/local/bin/ && \ @@ -271,10 +273,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 +308,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 +320,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_musl="clang" +ENV CFLAGS_s390x_unknown_linux_musl="--target=s390x-unknown-linux-musl -fuse-ld=lld -static -fPIC -nostdlib -nodefaultlibs -nostdinc -isystem $LLVM_SYSROOT/usr/lib/clang/${LLVM_VERSION}/include/ -isystem $LLVM_SYSROOT/usr/s390x-unknown-linux-musl/include/ -isystem $LLVM_SYSROOT/usr/include/linux/ -L ${LLVM_SYSROOT}/usr/x86_64-unknown-linux-musl/lib -lc -L ${LLVM_SYSROOT}/usr/lib/linux/ -lclang_rt.builtins-x86_64" +ENV CXX_s390x_unknown_linux_musl="clang++" +ENV CXXFLAGS_s390x_unknown_linux_musl="--target=s390x-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/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" diff --git a/rust/debian/Dockerfile.base b/rust/debian/Dockerfile.base index cec1e08..3664e18 100644 --- a/rust/debian/Dockerfile.base +++ b/rust/debian/Dockerfile.base @@ -25,6 +25,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 @@ -109,6 +110,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 +122,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 +136,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"]