From 8b5fb83938fe7beaeb625a1cf9253723acbe0516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Wed, 4 Oct 2023 07:55:28 +0200 Subject: [PATCH] ci: Switch to nettle-build-images, fixes cross builds. --- .gitlab-ci.yml | 125 +++++++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0f10d9fd..ab4e0394 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,17 +1,14 @@ variables: + BUILDENV_NATIVE_IMAGE: gnutls/nettle-build-images:buildenv-native + BUILDENV_CLANG_IMAGE: gnutls/nettle-build-images:buildenv-clang + BUILDENV_CROSS_IMAGE: gnutls/nettle-build-images:buildenv-cross BUILD_IMAGES_PROJECT: gnutls/build-images - DEBIAN_CROSS_BUILD: buildenv-debian-cross - FEDORA_BUILD: buildenv-fedora31 DEBIAN_X86_CROSS_BUILD: buildenv-debian-x86-cross GET_SOURCES_ATTEMPTS: "3" -# remove any pre-installed headers from nettle -before_script: - - yum remove -y nettle-devel - # See http://doc.gitlab.com/ce/ci/yaml/ for documentation. build/x86-64: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && ./configure --disable-static --disable-documentation && make -j4 && @@ -23,7 +20,7 @@ build/x86-64: except: - tags build/mini-gmp: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && ./configure --disable-documentation --disable-fat --enable-mini-gmp && make -j4 && @@ -34,7 +31,7 @@ build/mini-gmp: except: - tags build/c89: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && ./configure CC='gcc -std=c89' --disable-static --disable-assembler --disable-documentation && make -j4 && @@ -45,7 +42,7 @@ build/c89: except: - tags build/ndebug: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && ./configure CPPFLAGS='-DNDEBUG' --disable-static --disable-assembler --disable-documentation && make -j4 && @@ -56,7 +53,7 @@ build/ndebug: except: - tags build/ubsan: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && CXXFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" CFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" ./configure --disable-assembler @@ -67,7 +64,7 @@ build/ubsan: except: - tags build/asan: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && - CXXFLAGS="-fsanitize=address -g -O2" CFLAGS="-fsanitize=address -g -O2" ./configure --disable-documentation --disable-assembler && @@ -78,7 +75,7 @@ build/asan: except: - tags build/static-analyzers: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_CLANG_IMAGE script: - ./.bootstrap - scan-build ./configure --disable-documentation --disable-assembler @@ -94,7 +91,7 @@ build/static-analyzers: paths: - scan-build-lib/* build/gnutls: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE script: - ./.bootstrap && ./configure --disable-documentation --prefix="$(pwd)/local" --libdir="$(pwd)/local/lib" && @@ -102,7 +99,8 @@ build/gnutls: - git clone --depth 1 --branch master https://gitlab.com/gnutls/gnutls.git gnutls-git - cd gnutls-git && git submodule update --init && ./bootstrap && ./configure PKG_CONFIG_PATH="$(pwd)/../local/lib/pkgconfig" CPPFLAGS="-I$(pwd)/../local/include" - LDFLAGS="-L$(pwd)/../local/lib -Wl,-rpath,$(pwd)/../local/lib" --disable-cxx --disable-guile --disable-doc && + LDFLAGS="-L$(pwd)/../local/lib -Wl,-rpath,$(pwd)/../local/lib" + --disable-cxx --disable-guile --without-p11-kit --disable-doc && make -j$(nproc) && make -j $(nproc) check tags: - shared @@ -135,49 +133,9 @@ Debian.cross.x86: - linux except: - tags -.Debian.cross.template: &Debian_cross_template - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_CROSS_BUILD - before_script: - - host="${CI_JOB_NAME#*.cross.}" - - dpkg --add-architecture ppc64el - - dpkg --add-architecture s390x - - apt-get update -q - # remove any previously installed nettle headers to avoid conflicts - - for arch in armhf arm64 ppc64el;do apt-get remove -y nettle-dev:$arch;done - - if [ "$host" == "powerpc64-linux-gnu" ];then apt-get install -y software-properties-common && add-apt-repository "deb http://deb.debian.org/debian bullseye-backports main" && apt-get update && apt-get install -y -t bullseye-backports binfmt-support qemu-user && apt-get install -y gcc-$host g++-$host && export QEMU_LD_PREFIX=/usr/$host EXTRA_CONFIGURE_FLAGS='--enable-mini-gmp';fi - - if [ "$host" == "powerpc64le-linux-gnu" ];then apt-get install -y software-properties-common && add-apt-repository "deb http://deb.debian.org/debian bullseye-backports main" && apt-get update && apt-get install -y -t bullseye-backports binfmt-support qemu-user && apt-get install -y gcc-$host g++-$host libgmp-dev:ppc64el && export QEMU_LD_PREFIX=/usr/$host;fi - - if [ "$host" == "s390x-linux-gnu" ];then apt-get update && apt-get install -y gcc-$host g++-$host libgmp-dev:s390x && export EXTRA_CONFIGURE_FLAGS='--disable-assembler';fi - script: - - build=$(dpkg-architecture -qDEB_HOST_GNU_TYPE) - - host="${CI_JOB_NAME#*.cross.}" - # not setting CC_FOR_BUILD paired with qemu-user/binfmt somehow causes - # config.guess to detect the target as the build platform and not activate - # cross-compile mode even though --build is given - - export CC_FOR_BUILD="gcc" - - export CC="$host-gcc" - - ./.bootstrap - - ./configure --disable-static --disable-documentation $EXTRA_CONFIGURE_FLAGS --build=$build --host=$host - - make -j$(nproc) - - NETTLE_TEST_SEED=0 make -j$(nproc) check - - NETTLE_TEST_SEED=0 make -j$(nproc) check-fat - tags: - - shared - - linux - except: - - tags -Debian.cross.arm-linux-gnueabihf: - <<: *Debian_cross_template -Debian.cross.aarch64-linux-gnu: - <<: *Debian_cross_template -Debian.cross.powerpc64-linux-gnu: - <<: *Debian_cross_template -Debian.cross.powerpc64le-linux-gnu: - <<: *Debian_cross_template -Debian.cross.s390x-linux-gnu: - <<: *Debian_cross_template remote/s390x: - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILDENV_NATIVE_IMAGE before_script: # File created as world-readable by gitlab ci machinery. - chmod 0600 $SSH_PRIVATE_KEY @@ -209,3 +167,58 @@ remote/s390x: - linux except: - tags + +.cross-build: &cross-build + image: $CI_REGISTRY/$BUILDENV_CROSS_IMAGE + script: + - build=$(dpkg-architecture -qDEB_HOST_GNU_TYPE) + - host="${CI_JOB_NAME#cross/}" + # Not setting CC_FOR_BUILD paired with qemu-user/binfmt somehow causes + # config.guess to detect the target as the build platform and not activate + # cross-compile mode, even though --build is given. + - export CC_FOR_BUILD="gcc" + - export CC="$host-gcc" + # Disable C++, to not depend on cross g++. + - export CXX=/bin/false + - ./.bootstrap + - ./configure --disable-documentation $EXTRA_CONFIGURE_ARGS --build=$build --host=$host + - make -j$(nproc) + - NETTLE_TEST_SEED=0 make EMULATOR=${EMULATOR} -j$(nproc) check + - NETTLE_TEST_SEED=0 make EMULATOR=${EMULATOR} -j$(nproc) check-fat + tags: + - shared + - linux + except: + - tags + +cross/arm-linux-gnueabihf: + extends: .cross-build + variables: + EMULATOR: qemu-arm + +cross/aarch64-linux-gnu: + extends: .cross-build + variables: + EMULATOR: qemu-aarch64 + +# Setting QEMU_LD_PREFIX works around the error "qemu-ppc64: Could not +# open '/lib64/ld64.so.1". +cross/powerpc64-linux-gnu: + extends: .cross-build + variables: + EXTRA_CONFIGURE_ARGS: '--enable-mini-gmp' + QEMU_LD_PREFIX: /usr/powerpc64-linux-gnu + EMULATOR: qemu-ppc64 + +cross/powerpc64le-linux-gnu: + extends: .cross-build + variables: + EMULATOR: qemu-ppc64le + +# Disable assembly files, because current qemu doesn't support all +# needed instructions. +cross/s390x-linux-gnu: + extends: .cross-build + variables: + EXTRA_CONFIGURE_ARGS: '--disable-assembler' + EMULATOR: qemu-s390x -- GitLab