Skip to content

Commit

Permalink
CI: test cross compilation, test on big endian...
Browse files Browse the repository at this point in the history
  • Loading branch information
fingolfin committed Feb 12, 2024
1 parent efce225 commit 7c7bc9e
Show file tree
Hide file tree
Showing 4 changed files with 209 additions and 4 deletions.
197 changes: 197 additions & 0 deletions .github/workflows/cross.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# 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
- name: Build GAP and run tests
uses: uraimo/run-on-arch-action@v2
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 libgmp-dev libreadline-dev zlib1g-dev
;;
fedora*)
dnf -y update
dnf -y install diffutils git gcc gcc-c++ make expect autoconf gmp gmp-devel readline readline-devel zlib zlib-devel
;;
alpine*)
apk update
apk add bash git build-base expect autoconf gmp-dev readline-dev zlib-dev
;;
esac
# Do the thing
run: |
set -x
git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861
./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

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

- 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
git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861
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 expect gmp
# Do the thing
run: |
set -x
git config --global --add safe.directory $PWD # see https://github.com/gap-system/gap/issues/4861
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
12 changes: 10 additions & 2 deletions Makefile.rules
Original file line number Diff line number Diff line change
Expand Up @@ -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
#
Expand Down Expand Up @@ -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)"
Expand Down
2 changes: 1 addition & 1 deletion dev/gaptest.expect
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set timeout 10
set timeout 30

# from https://serverfault.com/a/981762
expect_before {
Expand Down
2 changes: 1 addition & 1 deletion dev/gaptest2.expect
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
set timeout 10
set timeout 30

# from https://serverfault.com/a/981762
expect_before {
Expand Down

0 comments on commit 7c7bc9e

Please sign in to comment.