R7 and 8 of the paper and fixes to optional after wording and LEWG reviews. #235
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: CI Tests | |
on: | |
workflow_dispatch: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
jobs: | |
build: | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- {name: "Ubuntu Clang 17", os: ubuntu-24.04, toolchain: "clang-17", clang_version: 17, installed_clang_version: 17, cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" "} | |
- {name: "Ubuntu Clang 18", os: ubuntu-24.04, toolchain: "clang-18", clang_version: 18, installed_clang_version: 17, cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" "} | |
# Note: clang-19 + Asan setup causes errors on some platforms. Temporary skip some checks via .asan_options. | |
- {name: "Ubuntu Clang 19", os: ubuntu-24.04, toolchain: "clang-19", clang_version: 19, installed_clang_version: 17, cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" ", asan_options: "new_delete_type_mismatch=0"} | |
- {name: "Ubuntu GCC 12", os: ubuntu-24.04, toolchain: "gcc-12", cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" "} | |
- {name: "Ubuntu GCC 13", os: ubuntu-24.04, toolchain: "gcc-13", cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" "} | |
- {name: "Ubuntu GCC 14", os: ubuntu-24.04, toolchain: "gcc-14", cmake_args: "-G \"Ninja Multi-Config\" -DCMAKE_CONFIGURATION_TYPES=\"RelWithDebInfo;Asan\" "} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: 'true' | |
- uses: seanmiddleditch/gha-setup-ninja@master | |
- name: Activate verbose shell | |
run: set -x | |
- name: Install LLVM+Clang | |
if: startsWith(matrix.config.name, 'Ubuntu Clang') | |
run: | | |
set -x | |
cat /etc/lsb-release | |
# Remove existing Clang installations. | |
sudo apt-get remove \ | |
clang-${{matrix.config.installed_clang_version}} \ | |
clang++-${{matrix.config.installed_clang_version}} \ | |
clangd-${{matrix.config.installed_clang_version}} \ | |
clang-tidy-${{matrix.config.installed_clang_version}} \ | |
clang-format-${{matrix.config.installed_clang_version}} \ | |
clang-tools-${{matrix.config.installed_clang_version}} \ | |
llvm-${{matrix.config.installed_clang_version}}-dev \ | |
lld-${{matrix.config.installed_clang_version}} \ | |
lldb-${{matrix.config.installed_clang_version}} \ | |
llvm-${{matrix.config.installed_clang_version}}-tools \ | |
libc++-${{matrix.config.installed_clang_version}}-dev \ | |
libc++abi-${{matrix.config.installed_clang_version}}-dev \ | |
libclang-common-${{matrix.config.installed_clang_version}}-dev \ | |
libclang-${{matrix.config.installed_clang_version}}-dev \ | |
libclang-cpp${{matrix.config.installed_clang_version}}-dev \ | |
libomp-${{matrix.config.installed_clang_version}}-dev \ | |
libunwind-${{matrix.config.installed_clang_version}}-dev \ | |
libc++-dev libc++1 libc++abi-dev libc++abi1 | |
# Install LLVM+Clang. | |
CLANG_VERSION=$(echo ${{matrix.config.toolchain}} | cut -d '-' -f2) | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x llvm.sh | |
sudo ./llvm.sh ${CLANG_VERSION} all | |
# Link Clang libraries (if not done by llvm.sh - some links are already set). | |
sudo ln -fs /usr/lib/llvm-${CLANG_VERSION}/lib/lib* /usr/lib/x86_64-linux-gnu/ || true | |
# If Clang 17, install a newer version of libc++ and libc++abi. | |
[[ ${CLANG_VERSION} = 17 ]] && sudo apt-get install libc++-dev libc++1 libc++abi-dev libc++abi1 | |
find /usr/lib/x86_64-linux-gnu/ -name libc++.so* || true | |
clang++-${CLANG_VERSION} --version | |
- name: Install GCC | |
if: startsWith(matrix.config.name, 'Ubuntu GCC') | |
run: | | |
set -x | |
# Remove existing GCC installations. | |
sudo apt-get remove gcc-13 g++-13 gcc-14 g++-14 gcc g++ | |
sudo apt update | |
# Install GCC. | |
GCC_VERSION=$(echo ${{matrix.config.toolchain}} | cut -d '-' -f2) | |
echo "GCC_VERSION=$GCC_VERSION" | |
sudo apt-get install g++-${GCC_VERSION} gcc-${GCC_VERSION} | |
find /usr/lib/x86_64-linux-gnu/ -name libstdc++.so* | |
g++-${GCC_VERSION} --version | |
- name: CMake Configure | |
run: | | |
set -x | |
echo ${{ matrix.config.cmake_args }} | |
echo ${{ matrix.config.toolchain }} | |
rm -rf .build | |
cmake ${{ matrix.config.cmake_args }} -DCMAKE_TOOLCHAIN_FILE="etc/${{ matrix.config.toolchain }}-toolchain.cmake" -B .build -S . | |
- name: CMake Build | |
run: | | |
set -x | |
cmake --build .build --config Asan --target all -- -k 0 | |
- name: CMake Test | |
run: | | |
set -x | |
[[ ! -z "${{ matrix.config.asan_options }}" ]] && export ASAN_OPTIONS="${{ matrix.config.asan_options }}" | |
ctest --build-config Asan --output-on-failure --test-dir .build |