boc-sys 0.0.1

Implementation details of boc.
Documentation
name: snmalloc CI for Morello

on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
    inputs:
      bootenv_label:
        description: "Morello host environment"
        type: string
        required: true
        default: "benchmark"

      runqueue_label:
        description: "Morello runner queue (production or test scripts?)"
        required: true
        type: choice
        options:
          - "msr-morello"
          - "msr-morello-test"

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: >-
              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: >-
              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'
      # 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", "benchmark"]'))
    #         || matrix.os }}
    # to dispatch dynamically.
    runs-on: >-
      ${{ fromJSON(format(
        '[ "self-hosted", "{0}", "{1}" ]',
        inputs.runqueue_label || 'msr-morello',
        inputs.bootenv_label || 'benchmark' )) }}
    name: ${{ matrix.os }} ${{ matrix.build-type }} ${{ matrix.caps }}
    steps:
    - uses: actions/checkout@v2
    - name: Install build dependencies
      run: |
        su -l root -c "pkg64 install -y ${{ matrix.dependencies }}"
    - name: Log environment details
      run: |
        uname -a
        mount
    - 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
      working-directory: ${{github.workspace}}/build
      run: |
        NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja
    - name: Test file size of binaries is sane
      working-directory: ${{github.workspace}}/build
      run: |
        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: |
        ctest --output-on-failure -j 4 -C ${{ matrix.build-type }} --timeout 400