diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e319c87 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,156 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + branches: [master] + +jobs: + + linux: + + strategy: + fail-fast: false + matrix: + runs-on: [ubuntu-latest] + sys: + - {compiler: gcc, version: '11'} + - {compiler: clang, version: '15'} + + defaults: + run: + shell: bash -e -l {0} + + name: ${{ matrix.runs-on }} • ${{ matrix.sys.compiler }}${{ matrix.sys.version }} - ${{ matrix.sys.name }} + runs-on: ${{ matrix.runs-on }} + steps: + + - name: Setup GCC + if: ${{ matrix.sys.compiler == 'gcc' }} + run: | + echo "CC=gcc-${{ matrix.sys.version }}" >> $GITHUB_ENV + echo "CXX=g++-${{ matrix.sys.version }}" >> $GITHUB_ENV + + - name: Setup clang + if: ${{ matrix.sys.compiler == 'clang' }} + run: | + LLVM_VERSION=${{ matrix.sys.version }} + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - || exit 1 + if [[ $LLVM_VERSION -ge 13 ]]; then + sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-$LLVM_VERSION main" || exit 1 + else + sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal main" || exit 1 + fi || exit 1 + sudo apt-get update || exit 1 + sudo apt-get --no-install-suggests --no-install-recommends install clang-$LLVM_VERSION || exit 1 + sudo apt-get --no-install-suggests --no-install-recommends install g++-9 g++-9-multilib || exit 1 + sudo ln -s /usr/include/asm-generic /usr/include/asm + CC=clang-$LLVM_VERSION + echo "CC=$CC" >> $GITHUB_ENV + CXX=clang++-$LLVM_VERSION + echo "CXX=$CXX" >> $GITHUB_ENV + + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set conda environment + uses: mamba-org/setup-micromamba@main + with: + environment-name: myenv + environment-file: environment-dev.yml + init-shell: bash + cache-downloads: true + create-args: | + ${{ (matrix.sys.name == 'tbb' || matrix.sys.name == 'xsimd-tbb' ) && 'tbb-devel' || '' }} + + - name: Configure using CMake + run: cmake -Bbuild + + - name: Build + working-directory: build + run: cmake --build . --target xbenchmark + + - name: Run + working-directory: build + run: ./xbenchmark.exe + + macos: + + strategy: + fail-fast: false + matrix: + runs-on: [macos-latest] + + defaults: + run: + shell: bash -e -l {0} + + name: ${{ matrix.runs-on }} • default - default + runs-on: ${{ matrix.runs-on }} + steps: + + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set conda environment + uses: mamba-org/setup-micromamba@main + with: + environment-name: myenv + environment-file: environment-dev.yml + init-shell: bash + cache-downloads: true + + - name: Configure using CMake + run: cmake -Bbuild + + - name: Build + working-directory: build + run: cmake --build . --target xbenchmark + windows: + + strategy: + fail-fast: false + matrix: + runs-on: [windows-latest] + sys: + - {compiler: default} + - {compiler: clang} + + defaults: + run: + shell: bash -e -l {0} + + name: ${{ matrix.runs-on }} • ${{ matrix.sys.compiler }} - default + runs-on: ${{ matrix.runs-on }} + steps: + + - name: Setup MSVC + if: matrix.sys.compiler == 'default' + uses: ilammy/msvc-dev-cmd@v1 + + - name: Setup clang + if: matrix.sys.compiler == 'clang' + run: | + echo "CC=clang" >> $GITHUB_ENV + echo "CXX=clang++" >> $GITHUB_ENV + + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set conda environment + uses: mamba-org/setup-micromamba@main + with: + environment-name: myenv + environment-file: environment-dev.yml + init-shell: bash + cache-downloads: true + create-args: | + ninja + + - name: Configure using CMake + run: cmake -Bbuild -DCMAKE_BUILD_TYPE:STRING=Release -G Ninja + + - name: Build + working-directory: build + run: cmake --build . --target xbenchmark