Skip to content

Arbitrary Blocking Operation Fix #1324

Arbitrary Blocking Operation Fix

Arbitrary Blocking Operation Fix #1324

Workflow file for this run

name: CI
on: [push, pull_request]
# Cancel the current workflow if a newer commit gets pushed to the
# branch or PR that triggered it.
concurrency:
group: ${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
# We prefer to use Ubuntu 26.04 where possible for these builds.
# That's not possible for these older gcc versions.
linux-gcc-old:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
gcc_version: [9, 10]
env:
CC: gcc-${{ matrix.gcc_version }}
CXX: g++-${{ matrix.gcc_version }}
steps:
- uses: actions/checkout@v6
- name: install compiler
run: |
sudo apt-get install gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build and test
run: |
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 30
linux-gcc:
runs-on: ubuntu-26.04
continue-on-error: true
strategy:
matrix:
gcc_version: [11, 12, 13, 14, 15]
env:
CC: gcc-${{ matrix.gcc_version }}
CXX: g++-${{ matrix.gcc_version }}
steps:
- uses: actions/checkout@v6
- name: install compiler
run: |
sudo apt-get install gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: build and test
run: |
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 30
# We prefer to use Ubuntu 26.04 where possible for these,
# but these older clang versions aren't available there.
linux-clang-old:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
clang_version: [14, 15, 16]
include:
- clang_version: 14
gcc_version: 11
- clang_version: 15
gcc_version: 12
- clang_version: 16
gcc_version: 13
env:
CC: clang-${{ matrix.clang_version }}
CXX: clang++-${{ matrix.clang_version }}
steps:
- uses: actions/checkout@v6
#- name: container prerequisites
# run: |
# # some additional setup steps are only needed when running in a container.
# # These end up being no-ops in the github actions images.
# apt-get update
# apt-get install -y sudo wget software-properties-common cmake
- name: install gcc
run: sudo apt-get install -y gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
- run: |
sudo apt-get install -y hwloc libhwloc-dev
hwloc-ls --version
- name: install clang
run: sudo apt-get install -y clang-${{ matrix.clang_version }}
- name: build and test
run: |
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
linux-clang:
runs-on: ubuntu-26.04
continue-on-error: true
strategy:
matrix:
clang_version: [17, 18, 19, 20, 21, 22]
include:
- clang_version: 17
gcc_version: 13
- clang_version: 18
gcc_version: 13
- clang_version: 19
gcc_version: 14
- clang_version: 20
gcc_version: 15
- clang_version: 21
gcc_version: 15
- clang_version: 22
gcc_version: 15
env:
CC: clang-${{ matrix.clang_version }}
CXX: clang++-${{ matrix.clang_version }}
steps:
- uses: actions/checkout@v6
#- name: container prerequisites
# run: |
# # some additional setup steps are only needed when running in a container.
# # These end up being no-ops in the github actions images.
# apt-get update
# apt-get install -y sudo wget software-properties-common cmake
- name: install gcc
run: sudo apt-get install -y gcc-${{ matrix.gcc_version }} g++-${{ matrix.gcc_version }}
- run: |
sudo apt-get install -y hwloc libhwloc-dev
hwloc-ls --version
- name: install clang
run: sudo apt-get install -y clang-${{ matrix.clang_version }}
- name: build and test
run: |
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
# A relatively old Linux system that would still be expected to work.
linux-old:
runs-on: ubuntu-26.04
container: rockylinux:8
continue-on-error: true
steps:
- uses: actions/checkout@v6
- run: |
dnf install -y gcc gcc-c++ cmake
dnf install -y --enablerepo=devel hwloc-devel
- name: build and test
run: |
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
linux-icx:
runs-on: ubuntu-24.04
continue-on-error: true
env:
CC: icx
CXX: icpx
steps:
- uses: actions/checkout@v6
- run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-14 g++-14
- name: install icx
run: |
wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.repos.intel.com/oneapi all main' && break || sleep 1
sudo apt-get install intel-oneapi-compiler-dpcpp-cpp-2026.1
source /opt/intel/oneapi/setvars.sh
icx -v
- name: build and test
run: |
source /opt/intel/oneapi/setvars.sh
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
linux-icc:
runs-on: ubuntu-22.04
continue-on-error: true
env:
CC: icc
CXX: icpc
CFLAGS: "-diag-disable=10441"
CXXFLAGS: "-diag-disable=10441"
steps:
- uses: actions/checkout@v6
- run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-12 g++-12 # last compatible gcc version for icpc
- name: install icc
run: |
wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - && break || sleep 1
sudo apt-add-repository 'deb https://apt.repos.intel.com/oneapi all main' && break || sleep 1
sudo apt-get install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.2.4
source /opt/intel/oneapi/setvars.sh
icc -v
- name: build and test
run: |
source /opt/intel/oneapi/setvars.sh
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
linux-aocc:
runs-on: ubuntu-24.04
continue-on-error: true
env:
CC: clang
CXX: clang++
steps:
- uses: actions/checkout@v6
- run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-14 g++-14
- name: install aocc
run: |
wget -nv -O aocc.deb https://download.amd.com/developer/eula/aocc/aocc-5-2/aocc-compiler-5.2.0_1_amd64.deb
sudo apt install -y ./aocc.deb
source /opt/AMD/aocc-compiler-5.2.0/setenv_AOCC.sh
clang -v
- name: build and test
run: |
source /opt/AMD/aocc-compiler-5.2.0/setenv_AOCC.sh
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
arm_atfl:
runs-on: ubuntu-24.04-arm
continue-on-error: true
env:
CC: armclang
CXX: armclang++
steps:
- uses: actions/checkout@v6
- run: |
sudo apt-get install hwloc libhwloc-dev
hwloc-ls --version
- name: install gcc
run: |
sudo apt-get install gcc-14 g++-14
- name: install armclang
run: |
curl "https://developer.arm.com/packages/arm-toolchains:ubuntu-24/noble/Release.key" | sudo gpg --dearmor -o /usr/share/keyrings/obs-oss-arm-com.gpg
echo "deb [signed-by=/usr/share/keyrings/obs-oss-arm-com.gpg] https://developer.arm.com/packages/arm-toolchains:ubuntu-24/noble/ ./" | sudo tee /etc/apt/sources.list.d/obs-oss-arm-com.list
sudo apt update
sudo apt install arm-toolchain-for-linux
export PATH=$PATH:/opt/arm/arm-toolchain-for-linux/bin
armclang --version
- name: build and test
run: |
export PATH=$PATH:/opt/arm/arm-toolchain-for-linux/bin
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 4m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
nvc:
strategy:
matrix:
image: [ubuntu-26.04, ubuntu-26.04-arm]
runs-on: ${{ matrix.image }}
continue-on-error: true
env:
CC: nvc
CXX: nvc++
steps:
- uses: actions/checkout@v6
- name: install deps
run: |
curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg
export MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list; fi
if [ ${MACHINE_TYPE} == 'aarch64' ]; then echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/arm64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list; fi
sudo apt-get update -y
sudo apt-get install -y cmake gcc g++ gfortran hwloc libhwloc-dev
sudo apt-get install -y nvhpc-26-5
- name: build and test
run: |
export MACHINE_TYPE=`uname -m`
if [ ${MACHINE_TYPE} == 'x86_64' ]; then export PATH="$PATH:/opt/nvidia/hpc_sdk/Linux_x86_64/26.5/compilers/bin"; fi
if [ ${MACHINE_TYPE} == 'aarch64' ]; then export PATH="$PATH:/opt/nvidia/hpc_sdk/Linux_aarch64/26.5/compilers/bin"; fi
nvc --version
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 4m make test VERBOSE=1
cd ..
done
done
timeout-minutes: 40
musl:
# The default checkout action doesn't work with alpine/arm64, so for now, only test musl/x86_64.
runs-on: ubuntu-26.04
container: alpine:latest
continue-on-error: true
steps:
- uses: actions/checkout@v6
- name: install deps
run: |
apk add --no-cache --no-progress bash make musl-dev hwloc-dev cmake gcc g++ clang linux-headers
- name: build and test
run: |
for compiler in clang gcc
do
if [ "$compiler" = "gcc" ]; then export CC=gcc && export CXX=g++; fi
if [ "$compiler" = "clang" ]; then export CC=clang && export CXX=clang++; fi
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 make test VERBOSE=1
cd ..
done
done
done
timeout-minutes: 40
riscv:
runs-on: ubuntu-26.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: uraimo/run-on-arch-action@v3
name: riscv
with:
arch: riscv64
distro: ubuntu_latest
run: |
apt-get update
apt-get install -y cmake libhwloc-dev
apt-get install -y gcc g++
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 30m make test VERBOSE=1
cd ..
done
done
riscv-alpine:
runs-on: ubuntu-26.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: uraimo/run-on-arch-action@v3
name: riscv
with:
arch: riscv64
distro: alpine_edge
run: |
apk add --no-cache --no-progress bash make musl-dev hwloc-dev cmake gcc g++ linux-headers
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 make test VERBOSE=1
cd ..
done
done
# QEMU fails to start for the aarch64 if we use the ubuntu 26.04 CI image as host.
# Revisit later. Hopefully it self-resolves with updates from upstream.
freebsd:
runs-on: ubuntu-24.04
continue-on-error: true
strategy:
matrix:
arch: [x86_64, aarch64]
steps:
- uses: actions/checkout@v6
- name: freebsd
uses: vmactions/freebsd-vm@v1
with:
copyback: false
release: "15.1"
sync: scp
arch: ${{ matrix.arch }}
run: |
pkg install -y cmake
pkg install -y hwloc2
pkg install -y coreutils # to get gtimeout for CI. The built-in timeout sometimes fails to kill the process.
# running ARM this way is astonishingly slow, so only do one build config.
if [ "${{ matrix.arch }}" = "x86_64" ]
then
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" -DQTHREADS_CONTEXT_SWAP_IMPL=system ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 gtimeout --foreground -k 20s 4m make test VERBOSE=1
cd ..
done
done
else
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="nemesis" -DQTHREADS_TOPOLOGY="binders" -DQTHREADS_CONTEXT_SWAP_IMPL=system ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 gtimeout --foreground -k 20s 4m make test VERBOSE=1
cd ..
fi
#openbsd:
# runs-on: ubuntu-26.04
# continue-on-error: true
# steps:
# - uses: actions/checkout@v6
# - name: openbsd
# uses: vmactions/openbsd-vm@v1
# with:
# copyback: false
# release: "7.8"
# run: |
# pkg_add coreutils cmake
# for sch in nemesis sherwood distrib
# do
# echo "********** Scheduler: $sch **********"
# rm -rf build
# mkdir build
# cd build
# cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_CONTEXT_SWAP_IMPL=system ..
# make -j2 VERBOSE=1
# CTEST_OUTPUT_ON_FAILURE=1 gtimeout --foreground -k 20s 4m make test VERBOSE=1
# cd ..
# done
netbsd:
runs-on: ubuntu-26.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
- name: netbsd
uses: vmactions/netbsd-vm@v1
with:
copyback: false
release: "11.0"
run: |
pkg_add coreutils cmake
for sch in nemesis sherwood distrib
do
echo "********** Scheduler: $sch **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="no" -DQTHREADS_CONTEXT_SWAP_IMPL=system ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 gtimeout --foreground -k 20s 4m make test VERBOSE=1
cd ..
done
dragonflybsd:
runs-on: ubuntu-26.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
- name: dragonflybsd
uses: vmactions/dragonflybsd-vm@v1
with:
copyback: false
release: "6.4.2"
run: |
pkg update
pkg install -y cmake
pkg install -y hwloc2
pkg install -y coreutils # to get gtimeout for CI. The built-in timeout sometimes fails to kill the process.
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" -DQTHREADS_CONTEXT_SWAP_IMPL=system ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 gtimeout --foreground -k 20s 4m make test VERBOSE=1
cd ..
done
done
mac:
continue-on-error: true
strategy:
matrix:
image: [macos-26, macos-15, macos-15-intel] # Test on both ARM and X86 (through fall 2027)
runs-on: ${{ matrix.image }}
steps:
- uses: actions/checkout@v6
- name: install deps
run: |
brew install coreutils # coreutils is to get gtimeout for CI and is not universally required by qthreads.
brew install gcc
- run: |
brew install hwloc
hwloc-ls --version
- name: build and test
run: |
export CFLAGS="-I$(brew --prefix)/include $CFLAGS"
export CXXFLAGS="-I$(brew --prefix)/include $CXXFLAGS"
export LDFLAGS="-L$(brew --prefix)/lib $LDFLAGS"
for compiler in gcc clang
do
if [ "$compiler" = "gcc" ]; then export CC=gcc && export CXX=g++; fi
if [ "$compiler" = "clang" ]; then export CC=clang && export CXX=clang++; fi
for build_type in Release Debug
do
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Compiler: $compiler, Build type: $build_type, Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE="$build_type" -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j4 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 12m make test VERBOSE=1
cd ..
done
done
done
done
# commented example for how to get a backtrace from CI usign lldb on OSX:
#echo "settings set target.process.stop-on-exec false" > ~/.lldbinit
#QT_NUM_SHEPHERDS=2 QT_NUM_WORKERS_PER_SHEPHERD=1 lldb bash --batch --one-line 'process launch' --one-line-on-crash 'bt' --one-line-on-crash 'quit' -- test/basics/hello_world
timeout-minutes: 60
sanitizers:
strategy:
matrix:
image: [ubuntu-26.04, ubuntu-26.04-arm]
runs-on: ${{ matrix.image }}
continue-on-error: true
env:
CC: clang-23
CXX: clang++-23
QTHREAD_STACK_SIZE: 2097152
ASAN_OPTIONS: "check_initialization_order=1"
steps:
- uses: actions/checkout@v6
#- name: container prerequisites
# run: |
# # some additional setup steps are only needed when running in a container.
# # These end up being no-ops in the github actions images.
# apt-get update
# apt-get install -y sudo wget software-properties-common cmake
- run: |
sudo apt-get install -y gcc-16 g++-16
- run: |
sudo apt-get install -y hwloc libhwloc-dev
hwloc-ls --version
- name: install compiler
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
sudo apt-add-repository 'deb https://apt.llvm.org/resolute/ llvm-toolchain-resolute-23 main' && break || sleep 1
sudo apt-get install -y clang-23
- name: build and test
run: |
# thread sanitizer:
echo "********** Sanitizer: thread **********"
# only test thread sanitizer in the nemesis/no topology config.
export CFLAGS="-fsanitize=thread -fno-sanitize-recover=all"
export CXXFLAGS="-fsanitize=thread -fno-sanitize-recover=all"
export LDFLAGS="-fsanitize=thread -fno-sanitize-recover=all"
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER=nemesis -DQTHREAEDS_TOPOLOGY=no ..
make -j2 VERBOSE=1
# basic tests only
cd test/basics
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 18m make test VERBOSE=1
cd ../../..
# memory sanitizer:
# memory sanitizer doesn't like hwloc, so don't test that config.
export CFLAGS="-fsanitize=memory -fno-sanitize-recover=all"
export CXXFLAGS="-fsanitize=memory -fno-sanitize-recover=all"
export LDFLAGS="-fsanitize=memory -fno-sanitize-recover=all"
for sch in nemesis sherwood distrib
do
echo "********** Sanitizer: memory, Scheduler: $sch **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY=no ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 18m make test VERBOSE=1
cd ..
done
for san in address undefined
do
export CFLAGS="-fsanitize=$san -fno-sanitize-recover=all"
export CXXFLAGS="-fsanitize=$san -fno-sanitize-recover=all"
export LDFLAGS="-fsanitize=$san -fno-sanitize-recover=all"
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Sanitizer: $san, Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 18m make test VERBOSE=1
cd ..
done
done
done
timeout-minutes: 60
linux-thorough:
strategy:
matrix:
image: [ubuntu-26.04, ubuntu-26.04-arm]
runs-on: ${{ matrix.image }}
continue-on-error: true
steps:
- uses: actions/checkout@v6
#- name: container prerequisites
# run: |
# # some additional setup steps are only needed when running in a container.
# # These end up being no-ops in the github actions images.
# apt-get update
# apt-get install -y sudo wget software-properties-common cmake
- run: |
sudo apt-get install -y gcc-16 g++-16
- run: |
sudo apt-get install -y hwloc libhwloc-dev
hwloc-ls --version
- run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
# No current LLVM apt repo for 26.04 (resolute racoon) yet, so just pull in the previous version
sudo apt-add-repository 'deb https://apt.llvm.org/resolute/ llvm-toolchain-resolute-23 main' && break || sleep 1
sudo apt-get install -y clang-23
- name: build and test
run: |
for compiler in gcc clang
do
if [ "$compiler" = "gcc" ]; then export CC=gcc-16 && export CXX=g++-16; fi
if [ "$compiler" = "clang" ]; then export CC=clang-23 && export CXX=clang++-23; fi
for build_type in Release Debug
do
for sch in nemesis sherwood distrib
do
for topo in hwloc binders no
do
echo "********** Compiler: $compiler, Build type: $build_type, Scheduler: $sch, Topology: $topo **********"
rm -rf build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE="$build_type" -DQTHREADS_SCHEDULER="$sch" -DQTHREADS_TOPOLOGY="$topo" ..
make -j2 VERBOSE=1
CTEST_OUTPUT_ON_FAILURE=1 timeout -k 10s --foreground 18m make test VERBOSE=1
cd ..
done
done
done
done
timeout-minutes: 60
clang-format:
runs-on: ubuntu-26.04
continue-on-error: true
env:
CC: 'clang-23'
CXX: 'clang++-23'
steps:
- uses: actions/checkout@v6
- run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
sudo apt-add-repository 'deb https://apt.llvm.org/resolute/ llvm-toolchain-resolute-23 main' && break || sleep 1
sudo apt-get install clang-format-23
- name: check formatting
run: |
sh clang-format.sh
git --no-pager diff
if [[ $(git --no-pager diff) ]]; then echo "need to rerun clang-format"; exit 1; fi