Repository navigation
Arbitrary Blocking Operation Fix #1324
Workflow file for this run
This file contains hidden or 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: 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 |