The status badge should report the most recent status for the master branch, not the most recent actions run. llvm.sh wasn't updated when trunk moved to 14 so was failing to fetch clang-13 (which is now in the llvm-toolchain-focal-13 repo, not the llvm-toolchain-focal repo). Duplicate the correct logic here rather than relying on the external script.
208 lines
7.8 KiB
YAML
208 lines
7.8 KiB
YAML
name: snmalloc CI
|
|
|
|
# Controls when the workflow will run
|
|
on:
|
|
# Triggers the workflow on push or pull request events but only for the master branch
|
|
push:
|
|
branches: [ master ]
|
|
pull_request:
|
|
branches: [ master, snmalloc2 ]
|
|
|
|
# Allows you to run this workflow manually from the Actions tab
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
unixlike:
|
|
strategy:
|
|
matrix:
|
|
# Build each combination of OS and release/debug variants
|
|
os: [ "ubuntu-latest", "ubuntu-18.04", "macos-11", "macos-10.15", "freebsd-12.2", "freebsd-13.0" ]
|
|
build-type: [ Release, Debug ]
|
|
extra-cmake-flags: [ " " ]
|
|
# Modify the complete matrix
|
|
include:
|
|
# Provide the dependency installation for each platform
|
|
- os: "ubuntu-18.04"
|
|
dependencies: "sudo apt install ninja-build"
|
|
- os: "ubuntu-latest"
|
|
dependencies: "sudo apt install ninja-build"
|
|
- os: "macos-11"
|
|
dependencies: "brew update && brew install ninja"
|
|
- os: "macos-10.15"
|
|
dependencies: "brew update && brew install ninja"
|
|
# Skip the tests for the FreeBSD release builds
|
|
- os: "freebsd-13.0"
|
|
build-type: Release
|
|
build-only: yes
|
|
- os: "freebsd-12.2"
|
|
build-type: Debug
|
|
build-only: yes
|
|
# Add the self-host build
|
|
- os: ubuntu-latest
|
|
build-type: Debug
|
|
self-host: true
|
|
# Add an extra element to the matrix that does a build with clang 12
|
|
# but doesn't run tests.
|
|
- os: "freebsd-13.0"
|
|
variant: Clang 12 (Build only)
|
|
extra-cmake-flags: "-DCMAKE_CXX_COMPILER=clang++12"
|
|
build-only: yes
|
|
- os: ubuntu-latest
|
|
variant: Clang 10 libstdc++ (Build only)
|
|
dependencies: "sudo apt install ninja-build"
|
|
extra-cmake-flags: "-DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_CXX_FLAGS=-stdlib=libstdc++"
|
|
build-only: yes
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} ${{ matrix.build-type }} ${{ matrix.variant }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install build dependencies
|
|
run: ${{ matrix.dependencies }}
|
|
- name: Configure CMake
|
|
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -G Ninja ${{ matrix.extra-cmake-flags }}
|
|
# Build with a nice ninja status line
|
|
- name: Build
|
|
working-directory: ${{github.workspace}}/build
|
|
run: NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja
|
|
# If the tests are enabled for this job, run them
|
|
- name: Test
|
|
if: ${{ matrix.build-only != 'yes' }}
|
|
working-directory: ${{github.workspace}}/build
|
|
run: ctest --output-on-failure -j 4
|
|
- name: Selfhost
|
|
if: ${{ matrix.self-host }}
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
sudo cp libsnmallocshim.so libsnmallocshim-16mib.so libsnmallocshim-oe.so /usr/local/lib/
|
|
ninja clean
|
|
LD_PRELOAD=/usr/local/lib/libsnmallocshim.so ninja
|
|
ninja clean
|
|
LD_PRELOAD=/usr/local/lib/libsnmallocshim-16mib.so ninja
|
|
ninja clean
|
|
LD_PRELOAD=/usr/local/lib/libsnmallocshim-oe.so ninja
|
|
|
|
qemu-crossbuild:
|
|
strategy:
|
|
matrix:
|
|
build-type: [ Release, Debug ]
|
|
arch: [ arm64, armhf ]
|
|
include:
|
|
- arch: armhf
|
|
system-processor: arm
|
|
triple: arm-linux-gnueabihf
|
|
rtld: ld-linux-armhf.so.3
|
|
- arch: arm64
|
|
system-processor: aarch64
|
|
triple: aarch64-linux-gnu
|
|
rtld: ld-linux-aarch64.so.1
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install cross-compile toolchain and QEMU
|
|
# Install the dependencies and clang 13. Earlier versions of clang don't
|
|
# find the multilib things for this week's Ubuntu filesystem layout.
|
|
run: |
|
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
|
sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main"
|
|
sudo apt update
|
|
sudo apt install libstdc++-9-dev-${{ matrix.arch }}-cross qemu-user ninja-build clang-13 lld-13
|
|
- name: Configure
|
|
run: >
|
|
RTLD_NAME=${{ matrix.rtld }}
|
|
AARCH=${{ matrix.arch }}
|
|
TRIPLE=${{ matrix.triple}}
|
|
cmake
|
|
-B ${{github.workspace}}/build
|
|
-DCMAKE_BUILD_TYPE=${{matrix.build-type}}
|
|
-G Ninja
|
|
-DSNMALLOC_CI_BUILD=ON
|
|
-DSNMALLOC_QEMU_WORKAROUND=ON
|
|
-DSNMALLOC_STATIC_LIBRARY=OFF
|
|
-DCMAKE_TOOLCHAIN_FILE=ci/Toolchain.cmake
|
|
- name: Build
|
|
working-directory: ${{github.workspace}}/build
|
|
run: NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja
|
|
# Run the tests, skipping the -malloc and perf- tests (perf doesn't make
|
|
# sense in an emulator and the pass-through malloc is slightly flaky in
|
|
# QEMU)
|
|
- name: Test
|
|
working-directory: ${{github.workspace}}/build
|
|
run: ctest --output-on-failure -E '(perf-.*)|(.*-malloc$)'
|
|
timeout-minutes: 30
|
|
|
|
windows:
|
|
strategy:
|
|
matrix:
|
|
# Build each combination of OS and release/debug variants
|
|
os: [ windows-2016, windows-2019 ]
|
|
build-type: [ Release, Debug ]
|
|
arch: [ Win32, x64 ]
|
|
toolchain: [ "", "-T ClangCL" ]
|
|
extra-cmake-flags: [ "" ]
|
|
# The ClangCL toolchain was added in Visual Studio 2019, the Windows
|
|
# 2016 runners have only VS 2017, so skip them for this configuration
|
|
exclude:
|
|
- os: windows-2016
|
|
toolchain: "-T ClangCL"
|
|
# Add an extra check for the Windows 8 compatible PAL
|
|
include:
|
|
- os: windows-2016
|
|
build-type: Release
|
|
arch: x64
|
|
toolchain: ""
|
|
extra-cmake-flags: -DWIN8COMPAT=TRUE
|
|
variant: Windows 8 compatible
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} ${{ matrix.arch }} ${{ matrix.build-type }} ${{ matrix.toolchain }} ${{ matrix.variant }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Configure CMake
|
|
run: |
|
|
cmake -B ${{github.workspace}}/build -A ${{ matrix.arch }} ${{ matrix.toolchain }} ${{ matrix.extra-cmake-flags }} -DSNMALLOC_CI_BUILD=On -DSNMALLOC_RUST_SUPPORT=On
|
|
# Build with whatever version of msbuild was configured, for a single build configuration.
|
|
- name: Build
|
|
run: cmake --build ${{github.workspace}}/build -- /m /p:Configuration=${{ matrix.build-type }}
|
|
# Run the tests.
|
|
- name: Test
|
|
working-directory: ${{ github.workspace }}/build
|
|
run: ctest -j 2 --interactive-debug-mode 0 --output-on-failure -C ${{ matrix.build-type }}
|
|
|
|
|
|
# Job to run clang-format and report errors
|
|
format:
|
|
runs-on: ubuntu-18.04
|
|
# We don't need to do the build for this job, but we need to configure it to get the clang-format target
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Configure CMake
|
|
run: cmake -B ${{github.workspace}}/build
|
|
- name: Install clang-tidy
|
|
run: sudo apt install clang-tidy-9
|
|
# Run the clang-format check and error if it generates a diff
|
|
- name: Run clang-format
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
set -eo pipefail
|
|
make clangformat
|
|
git diff --exit-code
|
|
- name: Run clang-tidy
|
|
run: |
|
|
clang-tidy-9 src/override/malloc.cc -header-filter="`pwd`/*" -warnings-as-errors='*' -export-fixes=tidy.fail -- -std=c++17 -mcx16 -DSNMALLOC_PLATFORM_HAS_GETENTROPY=0
|
|
if [ -f tidy.fail ] ; then
|
|
cat tidy.fail
|
|
exit 1
|
|
fi
|
|
|
|
all-checks:
|
|
needs: [unixlike, qemu-crossbuild, windows, format]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Dummy step
|
|
run: true
|