2261dbe944
Add mingw cross compilation in our public CI so that users with their own github repository have a first level of checks for Windows compilation before submitting to the mailing list. This does not replace our better checks in other entities of the CI. Only the helloworld example is compiled (same as what is tested in test-meson-builds.sh). Note: the mingw cross compilation toolchain (version 5.0) in Ubuntu 18.04 was broken (missing a ENOMSG definition). Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Aaron Conole <aconole@redhat.com>
296 lines
10 KiB
YAML
296 lines
10 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
schedule:
|
|
- cron: '0 0 * * 1'
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash --noprofile --norc -exo pipefail {0}
|
|
|
|
jobs:
|
|
ubuntu-vm-builds:
|
|
name: ${{ join(matrix.config.*, '-') }}
|
|
runs-on: ${{ matrix.config.os }}
|
|
env:
|
|
AARCH64: ${{ matrix.config.cross == 'aarch64' }}
|
|
ABI_CHECKS: ${{ contains(matrix.config.checks, 'abi') }}
|
|
BUILD_32BIT: ${{ matrix.config.cross == 'i386' }}
|
|
BUILD_DOCS: ${{ contains(matrix.config.checks, 'doc') }}
|
|
CC: ccache ${{ matrix.config.compiler }}
|
|
DEF_LIB: ${{ matrix.config.library }}
|
|
LIBABIGAIL_VERSION: libabigail-1.8
|
|
MINGW: ${{ matrix.config.cross == 'mingw' }}
|
|
MINI: ${{ matrix.config.mini != '' }}
|
|
PPC64LE: ${{ matrix.config.cross == 'ppc64le' }}
|
|
REF_GIT_TAG: v22.03
|
|
RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
config:
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: static
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: shared
|
|
mini: mini
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: shared
|
|
checks: abi+doc+tests
|
|
- os: ubuntu-20.04
|
|
compiler: clang
|
|
library: static
|
|
- os: ubuntu-20.04
|
|
compiler: clang
|
|
library: shared
|
|
checks: doc+tests
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: static
|
|
cross: i386
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: static
|
|
cross: mingw
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: static
|
|
cross: aarch64
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: shared
|
|
cross: aarch64
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: static
|
|
cross: ppc64le
|
|
- os: ubuntu-20.04
|
|
compiler: gcc
|
|
library: shared
|
|
cross: ppc64le
|
|
|
|
steps:
|
|
- name: Checkout sources
|
|
uses: actions/checkout@v2
|
|
- name: Generate cache keys
|
|
id: get_ref_keys
|
|
run: |
|
|
echo -n '::set-output name=ccache::'
|
|
echo 'ccache-${{ matrix.config.os }}-${{ matrix.config.compiler }}-${{ matrix.config.cross }}-'$(date -u +%Y-w%W)
|
|
echo -n '::set-output name=libabigail::'
|
|
echo 'libabigail-${{ matrix.config.os }}'
|
|
echo -n '::set-output name=abi::'
|
|
echo 'abi-${{ matrix.config.os }}-${{ matrix.config.compiler }}-${{ matrix.config.cross }}-${{ env.LIBABIGAIL_VERSION }}-${{ env.REF_GIT_TAG }}'
|
|
- name: Retrieve ccache cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/.ccache
|
|
key: ${{ steps.get_ref_keys.outputs.ccache }}-${{ github.ref }}
|
|
restore-keys: |
|
|
${{ steps.get_ref_keys.outputs.ccache }}-refs/heads/main
|
|
- name: Retrieve libabigail cache
|
|
id: libabigail-cache
|
|
uses: actions/cache@v2
|
|
if: env.ABI_CHECKS == 'true'
|
|
with:
|
|
path: libabigail
|
|
key: ${{ steps.get_ref_keys.outputs.libabigail }}
|
|
- name: Retrieve ABI reference cache
|
|
uses: actions/cache@v2
|
|
if: env.ABI_CHECKS == 'true'
|
|
with:
|
|
path: reference
|
|
key: ${{ steps.get_ref_keys.outputs.abi }}
|
|
- name: Update APT cache
|
|
run: sudo apt update || true
|
|
- name: Install packages
|
|
run: sudo apt install -y ccache libnuma-dev python3-setuptools
|
|
python3-wheel python3-pip python3-pyelftools ninja-build libbsd-dev
|
|
libpcap-dev libibverbs-dev libcrypto++-dev libfdt-dev libjansson-dev
|
|
libarchive-dev
|
|
- name: Install libabigail build dependencies if no cache is available
|
|
if: env.ABI_CHECKS == 'true' && steps.libabigail-cache.outputs.cache-hit != 'true'
|
|
run: sudo apt install -y autoconf automake libtool pkg-config libxml2-dev
|
|
libdw-dev
|
|
- name: Install i386 cross compiling packages
|
|
if: env.BUILD_32BIT == 'true'
|
|
run: sudo apt install -y gcc-multilib g++-multilib
|
|
- name: Install aarch64 cross compiling packages
|
|
if: env.AARCH64 == 'true'
|
|
run: sudo apt install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
|
pkg-config-aarch64-linux-gnu
|
|
- name: Install mingw cross compiling packages
|
|
if: env.MINGW == 'true'
|
|
run: sudo apt install -y mingw-w64 mingw-w64-tools
|
|
- name: Install ppc64le cross compiling packages
|
|
if: env.PPC64LE == 'true'
|
|
run: sudo apt install -y gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
|
|
pkg-config-powerpc-linux-gnu
|
|
- name: Install test tools packages
|
|
if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RUN_TESTS == 'true'
|
|
run: sudo apt install -y gdb
|
|
- name: Install doc generation packages
|
|
if: env.BUILD_DOCS == 'true'
|
|
run: sudo apt install -y doxygen graphviz python3-sphinx
|
|
python3-sphinx-rtd-theme
|
|
- name: Run setup
|
|
run: |
|
|
.ci/linux-setup.sh
|
|
# Workaround on $HOME permissions as EAL checks them for plugin loading
|
|
chmod o-w $HOME
|
|
- name: Build and test
|
|
run: .ci/linux-build.sh
|
|
- name: Upload logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: meson-logs-${{ join(matrix.config.*, '-') }}
|
|
path: |
|
|
build/.ninja_log
|
|
build/gdb.log
|
|
build/meson-logs/meson-log.txt
|
|
build/meson-logs/testlog.txt
|
|
|
|
prepare-container-images:
|
|
name: ${{ join(matrix.config.*, '-') }}
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
config:
|
|
- image: fedora:35
|
|
|
|
steps:
|
|
- name: Generate various keys
|
|
id: get_keys
|
|
run: |
|
|
echo -n '::set-output name=image::'
|
|
echo 'image-${{ matrix.config.image }}-'$(date -u +%Y-%m-%d)
|
|
- name: Retrieve image cache
|
|
id: image_cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/.image
|
|
key: ${{ steps.get_keys.outputs.image }}
|
|
- name: Pull and prepare a fresh image
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
docker pull registry.fedoraproject.org/${{ matrix.config.image }}
|
|
docker run -d -i --rm --name dpdk \
|
|
registry.fedoraproject.org/${{ matrix.config.image }} \
|
|
bash -li
|
|
- name: Update
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: docker exec -i dpdk dnf update -y
|
|
- name: Install packages
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: docker exec -i dpdk dnf install -y ccache numactl-devel
|
|
python3-setuptools python3-wheel python3-pip python3-pyelftools
|
|
ninja-build libatomic libbpf-devel libfdt-devel libpcap-devel
|
|
openssl-devel rdma-core-devel zlib-devel
|
|
- name: Save image in cache
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
docker commit dpdk dpdk-local
|
|
mkdir -p ~/.image
|
|
docker save -o ~/.image/${{ matrix.config.image }}.tar dpdk-local
|
|
- name: Stop image
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: docker kill dpdk
|
|
|
|
rpm-container-builds:
|
|
needs: prepare-container-images
|
|
name: ${{ join(matrix.config.*, '-') }}
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
config:
|
|
- image: fedora:35
|
|
compiler: gcc
|
|
library: static
|
|
- image: fedora:35
|
|
compiler: gcc
|
|
library: shared
|
|
- image: fedora:35
|
|
compiler: clang
|
|
library: static
|
|
- image: fedora:35
|
|
compiler: clang
|
|
library: shared
|
|
|
|
steps:
|
|
- name: Checkout sources
|
|
uses: actions/checkout@v2
|
|
- name: Generate various keys
|
|
id: get_keys
|
|
run: |
|
|
echo -n '::set-output name=ccache::'
|
|
echo 'ccache-${{ matrix.config.image }}-${{ matrix.config.compiler }}-'$(date -u +%Y-w%W)
|
|
echo -n '::set-output name=image::'
|
|
echo 'image-${{ matrix.config.image }}-'$(date -u +%Y-%m-%d)
|
|
echo -n '::set-output name=logs::'
|
|
echo 'meson-logs-${{ join(matrix.config.*, '-') }}' | tr -d ':'
|
|
- name: Retrieve image cache
|
|
id: image_cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/.image
|
|
key: ${{ steps.get_keys.outputs.image }}
|
|
- name: Fail if no image (not supposed to happen)
|
|
if: steps.image_cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
echo 'Image ${{ matrix.config.image }} is not cached.'
|
|
false
|
|
- name: Retrieve ccache cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/.ccache
|
|
key: ${{ steps.get_keys.outputs.ccache }}-${{ github.ref }}
|
|
restore-keys: |
|
|
${{ steps.get_keys.outputs.ccache }}-refs/heads/main
|
|
- name: Prepare working directory
|
|
run: |
|
|
mkdir -p ~/.ccache
|
|
> ~/env
|
|
echo CC=ccache ${{ matrix.config.compiler }} >> ~/env
|
|
echo DEF_LIB=${{ matrix.config.library }} >> ~/env
|
|
- name: Load the cached image
|
|
run: |
|
|
docker load -i ~/.image/${{ matrix.config.image }}.tar
|
|
docker run -d -i --rm --name dpdk \
|
|
--mount type=bind,src=$HOME/.ccache,dst=/root/.ccache \
|
|
--mount type=bind,src=$(pwd),dst=/root/dpdk \
|
|
--env-file ~/env \
|
|
-w /root/dpdk \
|
|
dpdk-local
|
|
bash -li
|
|
- name: Update
|
|
run: docker exec -i dpdk dnf update -y || true
|
|
- name: Install packages
|
|
run: docker exec -i dpdk dnf install -y ccache numactl-devel
|
|
python3-setuptools python3-wheel python3-pip python3-pyelftools
|
|
ninja-build libatomic libbpf-devel libfdt-devel libpcap-devel
|
|
openssl-devel rdma-core-devel zlib-devel ${{ matrix.config.compiler }}
|
|
- name: Run setup
|
|
run: docker exec -i dpdk .ci/linux-setup.sh
|
|
- name: Build
|
|
run: docker exec -i dpdk .ci/linux-build.sh
|
|
- name: Stop image
|
|
run: docker kill dpdk
|
|
- name: Upload logs on failure
|
|
if: failure()
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ steps.get_keys.outputs.logs }}
|
|
path: |
|
|
build/.ninja_log
|
|
build/meson-logs/meson-log.txt
|