treewide: make public headers compile with c89/c99/c11 pedantic errors #4104
Workflow file for this run
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
name: Continuous Integration | |
on: [push, pull_request] | |
jobs: | |
build-mlibc: | |
strategy: | |
matrix: | |
arch: [x86_64, riscv64, aarch64, x86, m68k] | |
builds: [mlibc, mlibc-static, mlibc-shared, mlibc-ansi-only, mlibc-headers-only] | |
compiler: [gcc, clang] | |
exclude: | |
- compiler: clang | |
include: | |
- arch: x86_64 | |
builds: mlibc | |
compiler: clang | |
name: Build mlibc | |
runs-on: ubuntu-20.04 | |
container: | |
image: ghcr.io/managarm/mlibc-crossers:latest | |
steps: | |
- name: Install prerequisites | |
run: | | |
apt-get update | |
apt-get install -y ninja-build qemu-user \ | |
python3-setuptools python3-jsonschema \ | |
python3-pexpect python3-pip netbase clang lld | |
pip install --break-system-packages -U xbstrap pyexpect meson | |
- name: Prepare directories | |
run: | | |
mkdir src/ | |
mkdir src/mlibc/ | |
mkdir build/ | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
path: src/mlibc/ | |
- name: Prepare src/ | |
run: | | |
cp mlibc/ci/bootstrap.yml . | |
touch mlibc/checkedout.xbstrap | |
working-directory: src/ | |
- name: Prepare build/ | |
run: | | |
cat > bootstrap-site.yml << EOF | |
define_options: | |
arch: ${{matrix.arch}} | |
compiler: ${{matrix.compiler}} | |
EOF | |
xbstrap init ../src | |
working-directory: build/ | |
- name: Build mlibc | |
run: 'xbstrap install ${{matrix.builds}}' | |
working-directory: build/ | |
- name: Check public headers conform to C89/C99/C11 | |
if: ${{matrix.builds == 'mlibc-headers-only'}} | |
working-directory: build/ | |
run: | | |
GCC_ARCH="${{matrix.arch}}" | |
case "$GCC_ARCH" in | |
"x86") | |
GCC_ARCH="i686" | |
;; | |
esac | |
ALL_HDRS="packages/${{matrix.builds}}/usr/include/**.h" | |
GCC_ARGS="$GCC_ARCH-linux-mlibc-gcc -x c -S /dev/null -o /dev/null -I packages/${{matrix.builds}}/usr/include -I packages/linux-headers/usr/include -nostdlib -Werror -Wpedantic -Wsystem-headers" | |
# For C89, exclude complex.h, and -Wlong-long | |
printf -- '-include\0%s\0' $ALL_HDRS | sed 's/complex.h/stdio.h/' | xargs -0 $GCC_ARGS -std=c89 -Wno-long-long | |
printf -- '-include\0%s\0' $ALL_HDRS | xargs -0 $GCC_ARGS -std=c99 | |
printf -- '-include\0%s\0' $ALL_HDRS | xargs -0 $GCC_ARGS -std=c11 | |
- name: Test mlibc | |
run: 'meson test -v -C pkg-builds/${{matrix.builds}}' | |
working-directory: build/ | |
compile-sysdeps: | |
strategy: | |
matrix: | |
sysdeps: [dripos, lemon, aero, ironclad, lyre, keyronex, managarm, vinix, astral] | |
name: Compile sysdeps | |
runs-on: ubuntu-22.04 | |
container: | |
image: ghcr.io/managarm/mlibc-crossers:latest | |
steps: | |
- name: Install prerequisites | |
run: | | |
apt-get update | |
apt-get install -y ninja-build qemu-user \ | |
python3-setuptools python3-jsonschema \ | |
python3-pip | |
pip install --break-system-packages -U xbstrap meson | |
- if: ${{ matrix.sysdeps == 'managarm' }} | |
name: Checkout bootstrap-managarm | |
uses: actions/checkout@v2 | |
with: | |
repository: 'managarm/bootstrap-managarm' | |
path: src/ | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
path: src/mlibc/ | |
- if: ${{ matrix.sysdeps == 'managarm' }} | |
name: Clone managarm/managarm | |
uses: actions/checkout@v4 | |
with: | |
repository: 'managarm/managarm' | |
path: 'src/mlibc/subprojects/managarm' | |
- if: ${{ matrix.sysdeps == 'managarm' }} | |
name: Clone managarm/bragi | |
uses: actions/checkout@v4 | |
with: | |
repository: 'managarm/bragi' | |
path: 'src/mlibc/subprojects/bragi' | |
- if: ${{ matrix.sysdeps == 'managarm' }} | |
name: Install bragi | |
run: | | |
pip install --break-system-packages -U bragi | |
- name: Set up linux kernel headers | |
run: | | |
mkdir -p build/mlibc/ | |
cp src/mlibc/ci/bootstrap.yml src/ | |
( | |
cd build | |
xbstrap init ../src | |
xbstrap install linux-headers | |
) | |
- if: ${{ matrix.sysdeps == 'managarm' }} | |
name: Set up drm headers | |
run: | | |
xbstrap install libdrm-headers | |
ln -sv $(pwd)/packages/libdrm-headers/usr/src/libdrm-headers ../src/mlibc/subprojects/ | |
working-directory: build/ | |
- name: Compile sysdeps | |
run: | | |
meson setup \ | |
"-Dc_args=['-fno-stack-protector', '-U__linux__', '-Wno-error=maybe-uninitialized', '-D__${{matrix.sysdeps}}__']" \ | |
"-Dcpp_args=['-fno-stack-protector', '-U__linux__', '-Wno-error=maybe-uninitialized', '-D__${{matrix.sysdeps}}__']" \ | |
"-Dbuild_tests=true" \ | |
"-Db_sanitize=undefined" \ | |
"-Dlinux_kernel_headers=$(pwd)/packages/linux-headers/usr/include" \ | |
--cross-file ../src/mlibc/ci/${{matrix.sysdeps}}.cross-file compile-${{matrix.sysdeps}} \ | |
"../src/mlibc/" | |
ninja -C compile-${{matrix.sysdeps}} | |
working-directory: build/ |