Skip to content

Update Emscripten build to llvm 22 #2224

Update Emscripten build to llvm 22

Update Emscripten build to llvm 22 #2224

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
release:
types: [published]
schedule:
- cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
jobs:
prepare-dell:
name: Activate self-host infrastructure
runs-on: [self-hosted, spotter]
steps:
- name: Send Magic Packet
env:
TARGET_IP: 192.168.100.30
MAC_ADDR: a4:bb:6d:51:d5:d2
# The container has no ping, emulate it.
run: |
# Mask the IP and potential broadcast to keep logs clean
echo "::add-mask::$MAC_ADDR"
echo "::add-mask::$BROADCAST"
echo "::add-mask::$TARGET_IP"
BROADCAST=$(echo $TARGET_IP | sed 's/\.[0-9]*$/ .255/' | tr -d ' ')
PING="timeout 1 bash -c 'cat < /dev/null > /dev/tcp/$TARGET_IP/22' 2>/dev/null"
# Install tool silently
sudo apt-get update -qq && sudo apt-get install -y -qq wakeonlan > /dev/null
# Check if already awake (using the Bash TCP PING variable)
if eval "$PING"; then
echo "Target machine is already awake. Exiting."
exit 0
fi
# If offline, send WoL
echo "Machine is offline. Sending WoL..."
wakeonlan -i $BROADCAST $MAC_ADDR > /dev/null
# Wait & Verify Loop (checks every 10s for 4 minutes)
echo "Waiting for response (checking Port 22)..."
for i in {1..24}; do
if eval "$PING"; then
echo "Machine is online and SSH is ready."
exit 0
fi
sleep 10
done
echo "Error: Target hardware did not respond within the timeout period."
exit 1
build:
needs: prepare-dell
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
env:
# Default cling version for cling rows; override per-row if a bump is
# needed. The matching root-llvm-tag is pinned via a YAML anchor
# (&root_llvm_tag) on the first cling row and referenced via
# *root_llvm_tag on the rest: the cache key on this job literally
# reads matrix.root-llvm-tag, so the tag must live on the row.
CLING_VERSION: '1.3'
strategy:
fail-fast: false
matrix:
# Rows omit fields that match these defaults (applied in
# Build_LLVM and in the setup-python step):
# llvm_targets_to_build: "host;NVPTX"
# python-version: '3.14'
include:
# Ubuntu Arm
- { name: ubu24-arm-gcc12-llvm22-vg, os: ubuntu-24.04-arm, compiler: gcc-12, clang-runtime: '22', Valgrind: On }
# Ubuntu X86
- { name: ubu24-x86-gcc12-llvm22, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '22' }
- { name: ubu24-x86-clang22-llvm22-asan-ubsan, os: ubuntu-24.04, compiler: clang-22, clang-runtime: '22', sanitizer: "Address;Undefined" }
- { name: ubu24-x86-gcc12-llvm21-cppyy-vg, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '21', cppyy: On, Valgrind: On }
- { name: ubu24-x86-gcc12-llvm22-cppyy, os: ubuntu-24.04, compiler: gcc-12, clang-runtime: '22', cppyy: On }
- { name: ubu24-x86-gcc14-cling-llvm20-cppyy, os: ubuntu-24.04, compiler: gcc-14, clang-runtime: '20', cling: On, cppyy: On, root-llvm-tag: &root_llvm_tag 'cling-llvm20-20260119-01' }
- name: selfh-ubu22-x86-gcc12-llvm22-cuda
os: [self-hosted, cuda, heavy]
compiler: gcc-12
clang-runtime: '22'
coverage: true
- name: ubu24-x86-gcc12-llvm22-vg
os: ubuntu-24.04
compiler: gcc-12
clang-runtime: '22'
Valgrind: On
# MacOS Arm
- { name: osx26-arm-clang-llvm22, os: macos-26, compiler: clang, clang-runtime: '22', llvm_targets_to_build: host }
- { name: osx26-arm-clang-llvm21-cppyy, os: macos-26, compiler: clang, clang-runtime: '21', cppyy: On, llvm_targets_to_build: host }
- { name: osx26-arm-clang-cling-llvm20-cppyy, os: macos-26, compiler: clang, clang-runtime: '20', cling: On, cppyy: On, root-llvm-tag: *root_llvm_tag }
# MacOS X86
- { name: osx26-x86-clang-llvm21-cppyy, os: macos-26-intel, compiler: clang, clang-runtime: '21', cppyy: On, llvm_targets_to_build: host }
- { name: osx26-x86-clang-cling-llvm20-cppyy, os: macos-26-intel, compiler: clang, clang-runtime: '20', cling: On, cppyy: On, root-llvm-tag: *root_llvm_tag }
# Windows
- { name: win11-msvc-llvm22, os: windows-11-arm, compiler: msvc, clang-runtime: '22' }
- { name: win2025-msvc-llvm22, os: windows-2025, compiler: msvc, clang-runtime: '22' }
- { name: win2025-msvc-cling-llvm20, os: windows-2025, compiler: msvc, clang-runtime: '20', cling: On, root-llvm-tag: *root_llvm_tag }
steps:
- uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version || '3.14' }}
- name: Save PR Info
uses: ./.github/actions/Miscellaneous/Save_PR_Info
- name: Restore cached LLVM-${{ matrix.clang-runtime }} and ${{ matrix.cling == 'On' && 'Cling' || 'Clang-REPL' }} build
if: ${{ runner.environment != 'self-hosted' }}
uses: actions/cache/restore@v4
id: cache
with:
path: |
llvm-project
${{ matrix.cling=='On' && 'cling' || '' }}
key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}-${{ matrix.root-llvm-tag || 'none' }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }}${{ matrix.sanitizer || '' }}
- name: Setup default Build Type
uses: ./.github/actions/Miscellaneous/Select_Default_Build_Type
- name: Setup compiler
uses: ./.github/actions/Miscellaneous/Setup_Compiler
- name: Install dependencies
uses: ./.github/actions/Miscellaneous/Install_Dependencies
- name: Install LLVM-${{ matrix.clang-runtime }} dependencies on self-hosted
if: ${{ runner.environment == 'self-hosted' }}
shell: bash
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
codename="$(. /etc/os-release && echo $UBUNTU_CODENAME)"
echo "deb http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-${{ matrix.clang-runtime }} main" | sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get update
sudo apt-get install -y llvm-${{ matrix.clang-runtime }}-dev libclang-${{ matrix.clang-runtime }}-dev clang-${{ matrix.clang-runtime }} libpolly-${{ matrix.clang-runtime }}-dev libzstd-dev
- name: Build LLVM-${{ matrix.clang-runtime }} and ${{ matrix.cling == 'On' && 'Cling' || 'Clang-REPL' }}
if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/Build_LLVM
with:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
- name: Cache LLVM-${{ matrix.clang-runtime }} and ${{ matrix.cling == 'On' && 'Cling' || 'Clang-REPL' }} build
uses: actions/cache/save@v4
if: ${{ runner.environment != 'self-hosted' && steps.cache.outputs.cache-hit != 'true' }}
with:
path: |
llvm-project
${{ matrix.cling=='On' && 'cling' || '' }}
key: ${{ steps.cache.outputs.cache-primary-key }}
- name: Setup code coverage
if: ${{ success() && (matrix.coverage == true) }}
run: |
sudo apt-get install -y lcov
echo "CODE_COVERAGE=1" >> $GITHUB_ENV
echo "BUILD_TYPE=Debug" >> $GITHUB_ENV
- name: Build and test CppInterOp
uses: ./.github/actions/Build_and_Test_CppInterOp
- name: Prepare code coverage report
if: ${{ success() && (matrix.coverage == true) }}
run: |
# Create lcov report
# capture coverage info
vers="${CC#*-}"
lcov --directory build/ --capture --output-file coverage.info --gcov-tool /usr/bin/gcov-${vers}
lcov --remove coverage.info '/usr/*' ${{ github.workspace }}'/llvm-project/*' --ignore-errors unused --output-file coverage.info
lcov --remove coverage.info '${{ github.workspace }}/unittests/*' --ignore-errors unused --output-file coverage.info
lcov --remove coverage.info '${{ github.workspace }}/build/*' --ignore-errors unused --output-file coverage.info
# output coverage data for debugging (optional)
lcov --list coverage.info
rm -rf ./build/
- name: Upload to codecov.io
if: ${{ success() && (matrix.coverage == true) }}
uses: codecov/codecov-action@v5
with:
files: ./coverage.info
fail_ci_if_error: true
verbose: true
token: ${{ secrets.CODECOV_TOKEN }}
- name: Build and test cppyy
uses: ./.github/actions/Build_and_Test_cppyy
- name: Show debug info
if: ${{ failure() }}
run: |
export
echo $GITHUB_ENV
- name: Setup tmate session
if: ${{ failure() && runner.debug }}
uses: mxschmitt/action-tmate@v3
# When debugging increase to a suitable value!
timeout-minutes: 30