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