Builds #25
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SPDX-License-Identifier: GPL-2.0 | |
# | |
# Copyright (c) 2021 Canonical Ltd. | |
# Copyright (c) 2023 Linaro Ltd | |
# Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> | |
# <krzk@kernel.org> | |
# | |
# Loosely based on: https://github.com/linux-test-project/ltp | |
# https://github.com/linux-nfc/neard | |
# | |
name: "Builds" | |
on: | |
pull_request: | |
push: | |
schedule: | |
# Run at 1:01 PM, every Tuesday | |
- cron: '1 13 * * 2' | |
workflow_dispatch: | |
jobs: | |
job: | |
name: Build | |
runs-on: ubuntu-latest | |
permissions: | |
actions: read | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: [x86-64] | |
family: [x86-64] | |
compiler: [gcc, clang] | |
container: | |
- archlinux:latest | |
- debian:testing | |
- debian:stable | |
- debian:bookworm | |
- debian:bullseye | |
- debian:buster | |
# Fails on configure on GCC and clang (process restrictions?) | |
# - fedora:rawhide | |
- fedora:latest | |
# Uses ligpiod 2.x | |
# - fedora:39 | |
- fedora:38 | |
- fedora:37 | |
- ubuntu:lunar # EOL 01.2024 | |
- ubuntu:jammy | |
- ubuntu:focal | |
- ubuntu:bionic | |
# Meson version on Ubuntu Xenial is really too old | |
#- ubuntu:xenial | |
cross_compile: [""] | |
variant: [""] | |
include: | |
# Debian 32-bit builds | |
- container: "debian:testing" | |
arch: i386 | |
family: x86 | |
compiler: gcc | |
cross_compile: i686-linux-gnu | |
pkg_config_path: /usr/lib/i386-linux-gnu/pkgconfig | |
variant: i386 | |
- container: "debian:stable" | |
arch: i386 | |
family: x86 | |
compiler: gcc | |
cross_compile: i686-linux-gnu | |
pkg_config_path: /usr/lib/i386-linux-gnu/pkgconfig | |
variant: i386 | |
- container: "debian:bookworm" | |
arch: i386 | |
family: x86 | |
compiler: gcc | |
cross_compile: i686-linux-gnu | |
pkg_config_path: /usr/lib/i386-linux-gnu/pkgconfig | |
variant: i386 | |
- container: "debian:buster" | |
arch: i386 | |
family: x86 | |
compiler: gcc -m32 | |
cross_compile: i686-linux-gnu | |
pkg_config_path: /usr/lib/i386-linux-gnu/pkgconfig | |
variant: i386 | |
# Debian cross compilation builds | |
- container: "debian:testing" | |
arch: armhf | |
family: arm | |
compiler: arm-linux-gnueabihf-gcc | |
cross_compile: arm-linux-gnueabihf | |
pkg_config_path: /usr/lib/arm-linux-gnueabihf/pkgconfig | |
variant: cross-compile | |
- container: "debian:testing" | |
arch: arm64 | |
family: aarch64 | |
compiler: aarch64-linux-gnu-gcc | |
cross_compile: aarch64-linux-gnu | |
pkg_config_path: /usr/lib/aarch64-linux-gnu/pkgconfig | |
variant: cross-compile | |
- container: "debian:testing" | |
arch: ppc64el | |
family: ppc64 | |
compiler: powerpc64le-linux-gnu-gcc | |
cross_compile: powerpc64le-linux-gnu | |
pkg_config_path: /usr/lib/powerpc64le-linux-gnu/pkgconfig | |
variant: cross-compile | |
- container: "debian:testing" | |
arch: s390x | |
family: s390x | |
compiler: s390x-linux-gnu-gcc | |
cross_compile: s390x-linux-gnu | |
pkg_config_path: /usr/lib/s390x-linux-gnu/pkgconfig | |
variant: cross-compile | |
- container: "debian:stable" | |
arch: armhf | |
family: arm | |
compiler: arm-linux-gnueabihf-gcc | |
cross_compile: arm-linux-gnueabihf | |
pkg_config_path: /usr/lib/arm-linux-gnueabihf/pkgconfig | |
variant: cross-compile | |
- container: "debian:stable" | |
arch: arm64 | |
family: aarch64 | |
compiler: aarch64-linux-gnu-gcc | |
cross_compile: aarch64-linux-gnu | |
pkg_config_path: /usr/lib/aarch64-linux-gnu/pkgconfig | |
variant: cross-compile | |
- container: "debian:stable" | |
arch: ppc64el | |
family: ppc64 | |
compiler: powerpc64le-linux-gnu-gcc | |
cross_compile: powerpc64le-linux-gnu | |
pkg_config_path: /usr/lib/powerpc64le-linux-gnu/pkgconfig | |
variant: cross-compile | |
- container: "debian:stable" | |
arch: s390x | |
family: s390x | |
compiler: s390x-linux-gnu-gcc | |
cross_compile: s390x-linux-gnu | |
pkg_config_path: /usr/lib/s390x-linux-gnu/pkgconfig | |
variant: cross-compile | |
container: | |
image: ${{ matrix.container }} | |
env: | |
ARCH: ${{ matrix.arch }} | |
FAMILY: ${{ matrix.family }} | |
CC: ${{ matrix.compiler }} | |
CROSS_COMPILE: ${{ matrix.cross_compile }} | |
PKG_CONFIG_PATH: ${{ matrix.pkg_config_path }} | |
VARIANT: ${{ matrix.variant }} | |
steps: | |
- name: Show OS | |
run: cat /etc/os-release | |
- name: Show env (matrix settings) | |
run: | | |
echo "ARCH: $ARCH" | |
echo "FAMILY: $FAMILY" | |
echo "CC: $CC" | |
echo "CROSS_COMPILE: $CROSS_COMPILE" | |
echo "VARIANT: $VARIANT" | |
echo "PKG_CONFIG_PATH: $PKG_CONFIG_PATH" | |
- name: Git checkout | |
uses: actions/checkout@v3 | |
- name: Install additional packages | |
run: | | |
INSTALL=${{ matrix.container }} | |
INSTALL="${INSTALL%%:*}" | |
INSTALL="${INSTALL%%/*}" | |
./ci/$INSTALL.sh | |
if [ "$VARIANT" ]; then ./ci/$INSTALL.$VARIANT.sh; fi | |
- name: Compiler version | |
run: $CC --version | |
- name: Display environment and Linux version | |
run: | | |
test -f /etc/issue && cat /etc/issue | |
echo "############################################" | |
lsb_release -a || true | |
echo "############################################" | |
cat /usr/include/linux/version.h | |
echo "############################################" | |
uname -a | |
echo "############################################" | |
cat /proc/cmdline | |
echo "############################################" | |
printenv | |
# i386 build on x86_64 only requires passing -m32 to CFLAGS & LDFLAGS | |
- name: Meson init for i386 | |
if: ${{ matrix.variant == 'i386' }} | |
run: | | |
mkdir build | |
CFLAGS="-m32" LDFLAGS="-m32" meson setup . build | |
- name: Meson init with cross compile | |
if: ${{ matrix.variant == 'cross-compile' }} | |
run: | | |
# Generate cross compile file (see https://mesonbuild.com/Cross-compilation.html#cross-compilation) | |
echo "[binaries]" > cross.txt | |
echo "c = '${CROSS_COMPILE}-gcc'" >> cross.txt | |
echo "strip = '${CROSS_COMPILE}-strip'" >> cross.txt | |
# Forcing pkgconfig binary to 'pkg-config' is required for cross build to work | |
echo "pkgconfig = 'pkg-config'" >> cross.txt | |
echo "[host_machine]" >> cross.txt | |
echo "system = 'linux'" >> cross.txt | |
echo "cpu_family = '${FAMILY}'" >> cross.txt | |
echo "cpu = '${ARCH}'" >> cross.txt | |
echo "endian = 'little'" >> cross.txt | |
echo "[properties]" >> cross.txt | |
echo "pkg_config_libdir = '${PKG_CONFIG_PATH}'" >> cross.txt | |
cat cross.txt | |
mkdir build | |
meson setup --cross-file cross.txt . build | |
- name: Meson init | |
if: ${{ matrix.variant == '' }} | |
run: | | |
mkdir build | |
meson setup . build | |
- name: Compile | |
run: ninja -C build | |
- name: Install | |
run: ninja -C build install |