diff --git a/.github/workflows/morello.yml b/.github/workflows/morello.yml new file mode 100644 index 0000000..31e7a5f --- /dev/null +++ b/.github/workflows/morello.yml @@ -0,0 +1,93 @@ +name: snmalloc CI for Morello + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ main ] + pull_request: + branches: [ main ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # UNIX-like, but with some needed TLC for the moment, so not folded in to the main unixlike CI. + # Morello can't easily self-host since it mixes purecap and hybrid build tools. + # We point cmake at the LLVM Clang frontend explicitly lest it pick up the more magic wrappers. + morello: + strategy: + matrix: + # Build each combination of OS and release/debug variants + os: [ "morello" ] + build-type: [ Release, Debug ] + caps: [ Hybrid, Purecap ] + include: + - os: "morello" + caps: Hybrid + dependencies: | + pkg64 install -y llvm-localbase cmake ninja + cmake-flags: > + -DCMAKE_CXX_COMPILER=/usr/local64/bin/clang++ + -DCMAKE_C_COMPILER=/usr/local64/bin/clang + -DCMAKE_CXX_FLAGS='-march=morello -Xclang -morello-vararg=new' + -DCMAKE_C_FLAGS='-march=morello -Xclang -morello-vararg=new' + - os: "morello" + caps: Purecap + dependencies: | + pkg64 install -y llvm-localbase cmake ninja + cmake-flags: > + -DCMAKE_CXX_COMPILER=/usr/local64/bin/clang++ + -DCMAKE_C_COMPILER=/usr/local64/bin/clang + -DCMAKE_CXX_FLAGS='-march=morello -mabi=purecap -Xclang -morello-vararg=new' + -DCMAKE_C_FLAGS='-march=morello -mabi=purecap -Xclang -morello-vararg=new' + -DSNMALLOC_LINK_ICF=OFF + # SNMALLOC_LINK_ICF=OFF until the fix for + # https://git.morello-project.org/morello/llvm-project/-/issues/51 , namely + # https://git.morello-project.org/morello/llvm-project/-/commit/f41cb9104e0793de87d98b38acb274b2e3266091 + # lands in a package or a release. That's probably the Fall 2022 release. + # Don't abort runners if a single one fails + fail-fast: false + # Morello needs special handling to get picked up by our self-hosted runners + # When/if we do integrate this back into the unixlike matrix above, we could + # say something like:: + # runs-on: >- + # ${{ (matrix.os == 'morello' && fromJSON('["self-hosted", "msr-morello", "2022.05-benchmark"]')) + # || matrix.os }} + # to dispatch dynamically. + runs-on: ["self-hosted", "msr-morello", "2022.05-benchmark"] + name: ${{ matrix.os }} ${{ matrix.build-type }} ${{ matrix.caps }} + 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.cmake-flags }} + ${{ matrix.extra-cmake-flags }} + # Build with a nice ninja status line + - name: Build + # https://github.com/ChristopherHX/github-act-runner seemingly ignores working-directory, + # but everyone agrees that we start in ${{github.workspace}} by default, so just cd into + # the build directory ourselves. See + # https://docs.github.com/en/actions/learn-github-actions/contexts#github-context + # https://github.com/ChristopherHX/github-act-runner/issues/61 + # working-directory: ${{github.workspace}}/build + run: | + cd build + NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja + - name: Test file size of binaries is sane + # working-directory: ${{github.workspace}}/build + run: | + cd build + ls -l func-first_operation-fast ; [ $(ls -l func-first_operation-fast | awk '{ print $5}') -lt 10000000 ] + # If the tests are enabled for this job, run them + - name: Test + if: ${{ matrix.build-only != 'yes' }} + # working-directory: ${{github.workspace}}/build + run: | + cd build + ctest --output-on-failure -j 4 -C ${{ matrix.build-type }} --timeout 400