From 223a0de82fc8c0319a906b0193a1a4645558f7b6 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Tue, 6 Feb 2024 22:23:49 +0100 Subject: [PATCH] CI: test cross compilation, test on big endian... --- .github/workflows/cross.yml | 214 ++++++++++++++++++++++++++++++++++++ Makefile.rules | 12 +- dev/gaptest.expect | 2 +- dev/gaptest2.expect | 2 +- 4 files changed, 226 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/cross.yml diff --git a/.github/workflows/cross.yml b/.github/workflows/cross.yml new file mode 100644 index 00000000000..92c74ca2acc --- /dev/null +++ b/.github/workflows/cross.yml @@ -0,0 +1,214 @@ +# test GAP cross compilation +name: cross + +# Trigger the workflow on push or pull request +on: + pull_request: + push: + +concurrency: + # group by workflow and ref; the last slightly strange component ensures that for pull + # requests, we limit to 1 concurrent job, but for the master branch we don't + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref != 'refs/heads/master' || github.run_number }} + # Cancel intermediate builds, but only if it is a pull request build. + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + +env: + # default config flags: enable debug asserts + CONFIGFLAGS: "--enable-debug" + +jobs: + test_on_arch: + # The host should always be linux + runs-on: ubuntu-22.04 + name: Build on ${{ matrix.distro }} ${{ matrix.arch }} + + # Run steps on a matrix of arch/distro combinations + strategy: + fail-fast: false + matrix: + include: + - arch: aarch64 + distro: ubuntu18.04 + - arch: ppc64le + distro: alpine_latest + - arch: s390x + distro: fedora_latest + steps: + - uses: actions/checkout@v4 + - name: Download required GAP packages + run: | + wget https://github.com/gap-system/PackageDistro/releases/download/latest/packages-required.tar.gz + mkdir pkg + cd pkg + tar xvf ../packages-required.tar.gz + - uses: uraimo/run-on-arch-action@v2 + name: Build GAP and run tests + with: + arch: ${{ matrix.arch }} + distro: ${{ matrix.distro }} + + # Not required, but speeds up builds + githubToken: ${{ github.token }} + + # The shell to run commands with in the container + shell: /bin/sh + + # Install some dependencies in the container. This speeds up builds if + # you are also using githubToken. Any dependencies installed here will + # be part of the container image that gets cached, so subsequent + # builds don't have to re-install them. The image layer is cached + # publicly in your project's package repository, so it is vital that + # no secrets are present in the container state or logs. + install: | + case "${{ matrix.distro }}" in + ubuntu*|jessie|stretch|buster|bullseye) + apt-get update -q -y + apt-get install -q -y git build-essential expect autoconf libtool libgmp-dev libreadline-dev zlib1g-dev + ;; + fedora*) + dnf -y update + dnf -y install diffutils git gcc gcc-c++ make expect autoconf libtool gmp gmp-devel readline readline-devel zlib zlib-devel + ;; + alpine*) + apk update + apk add bash git build-base expect autoconf libtool gmp-dev readline-dev zlib-dev + ;; + esac + + # Do the thing + run: | + set -x + uname -a + pwd + ls -al + git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861 + git status + git show --pretty=fuller -s + ./autogen.sh + ./configure + make -j2 V=1 + make citests + + cross_compile: + # The host should always be linux + runs-on: ubuntu-22.04 + name: Cross compiler for s390x + #env: + # CC: gcc-11-s390x-linux-gnu + # CXX: g++-11-s390x-linux-gnu + + steps: + - name: Install Cross-Compile Support + uses: fingolfin/gha-ubuntu-cross@patch-1 # FIXME: see https://github.com/cyberjunk/gha-ubuntu-cross/pull/8 + with: + arch: s390x + + - name: Install general build dependencies + run: sudo apt-get install -q -y git autoconf libtool + + - name: Install cross compile dependencies + run: sudo apt-get install -q -y git libgmp-dev:s390x libreadline-dev:s390x zlib1g-dev:s390x + + - uses: actions/checkout@v4 + + - run: ./autogen.sh + + - name: Native compile + run: | + # When building a git snapshot, configure & compile a native version of GAP to + # generate ffdata.{c,h}, c_oper1.c and c_type1.c -- in a GAP release tarball + # this is not necessary. + mkdir native-build + cd native-build + ../configure --without-readline + make -j2 + cp build/c_*.c build/ffdata.* ../src/ + cd .. + + - name: Configure + run: ./configure --host="s390x-linux-gnu" + + - name: Cross compile + run: make -j2 V=1 all build-testlibgap build-testkernel + + - name: Fixup sysinfo.gap + run: rm sysinfo.gap && make SYSINFO_CC=gcc SYSINFO_CXX=g++ sysinfo.gap + + - name: Download required GAP packages + run: make bootstrap-pkg-minimal + + - name: Run tests in VM + uses: uraimo/run-on-arch-action@v2 + with: + arch: s390x + distro: ubuntu22.04 + + # Not required, but speeds up builds + githubToken: ${{ github.token }} + + # The shell to run commands with in the container + shell: /bin/sh + + # Install some dependencies in the container. This speeds up builds if + # you are also using githubToken. Any dependencies installed here will + # be part of the container image that gets cached, so subsequent + # builds don't have to re-install them. The image layer is cached + # publicly in your project's package repository, so it is vital that + # no secrets are present in the container state or logs. + install: | + apt-get update -q -y + # we need build-essential for make and gcc (the latter is used by gac and + # hence by the tests involving mockpkg) + apt-get install -q -y build-essential git expect libgmp10 libreadline8 zlib1g + + # Do the thing + run: | + set -x + uname -a + pwd + ls -al + git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861 + git status + git show --pretty=fuller -s + make citests + + openbsd: + runs-on: ubuntu-latest + name: Test in OpenBSD + env: + AUTOCONF_VERSION: 2.71 + steps: + - uses: actions/checkout@v4 + + - name: Download required GAP packages + run: | + wget https://github.com/gap-system/PackageDistro/releases/download/latest/packages-required.tar.gz + mkdir pkg + cd pkg + tar xvf ../packages-required.tar.gz + + - name: Test in OpenBSD + id: test + uses: vmactions/openbsd-vm@v1 + with: + envs: 'AUTOCONF_VERSION' + usesh: true + prepare: | + pkg_add bash gmake autoconf-2.71 libtool expect gmp + + # Do the thing + run: | + set -x + uname -a + pwd + ls -al + git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861 + git status + git show --pretty=fuller -s + rm -rf extern # ensure we don't build and link against bundled libraries + ./autogen.sh + ./configure --with-gmp=/usr/local --without-readline + gmake -j2 V=1 + gmake check + #gmake citests diff --git a/Makefile.rules b/Makefile.rules index 4220a4e1541..5f101bc7430 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -166,6 +166,14 @@ SOURCES_ALL := $(SOURCES) SOURCES_ALL += src/compstat_empty.c SOURCES_ALL += src/main.c + +######################################################################## +# +######################################################################## + +SYSINFO_CC := $(CC) +SYSINFO_CXX := $(CXX) + ######################################################################## # Preprocessor flags # @@ -907,8 +915,8 @@ GAP_OBJEXT=o # Build flags for use by `gac` resp. package build systems: these correspond to # the usual variables as used by e.g. autotools, with the added prefix `GAP_`. -GAP_CC="$(CC)" -GAP_CXX="$(CXX)" +GAP_CC="$(SYSINFO_CC)" +GAP_CXX="$(SYSINFO_CXX)" GAP_CFLAGS="$(SYSINFO_CFLAGS)" GAP_CXXFLAGS="$(SYSINFO_CXXFLAGS)" GAP_CPPFLAGS="$(SYSINFO_CPPFLAGS)" diff --git a/dev/gaptest.expect b/dev/gaptest.expect index 288135e978f..b08f2cea60c 100644 --- a/dev/gaptest.expect +++ b/dev/gaptest.expect @@ -1,4 +1,4 @@ -set timeout 10 +set timeout 30 # from https://serverfault.com/a/981762 expect_before { diff --git a/dev/gaptest2.expect b/dev/gaptest2.expect index 1823eab1206..e7e1429cdd7 100644 --- a/dev/gaptest2.expect +++ b/dev/gaptest2.expect @@ -1,4 +1,4 @@ -set timeout 10 +set timeout 30 # from https://serverfault.com/a/981762 expect_before {