| name: CMake |
| |
| on: |
| push: |
| branches: |
| - '**' # only run on branches |
| pull_request: |
| release: |
| types: [published] |
| |
| env: |
| # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) |
| BUILD_TYPE: Release |
| |
| jobs: |
| build: |
| name: ${{matrix.name}} |
| strategy: |
| matrix: |
| include: |
| - os: ubuntu-22.04 |
| name: Linux |
| cache-key: linux |
| release-suffix: LIN64 |
| cmake-args: '"-DCMAKE_CXX_CLANG_TIDY=clang-tidy;-header-filter=(32blit|32blit-sdl)/;-checks=performance-*,portability-*,modernize-*,-modernize-use-trailing-return-type,-modernize-avoid-c-arrays,-modernize-use-nodiscard" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache' |
| apt-packages: ccache clang-tidy libsdl2-dev libsdl2-image-dev libsdl2-net-dev pipx python3-requests |
| |
| - os: ubuntu-22.04 |
| name: STM32 |
| cache-key: stm32 |
| release-suffix: STM32 |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/32blit.toolchain -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| apt-packages: ccache gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib pipx python3-requests |
| |
| - os: ubuntu-22.04 |
| pico-sdk: true |
| name: PicoSystem |
| cache-key: picosystem |
| release-suffix: PicoSystem |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/pico.toolchain -DPICO_SDK_PATH=$GITHUB_WORKSPACE/pico-sdk -DPICO_BOARD=pimoroni_picosystem -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| apt-packages: ccache gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib pipx python3-requests |
| |
| - os: ubuntu-22.04 |
| pico-sdk: true |
| name: PicoVision |
| cache-key: picovision |
| release-suffix: PicoVision |
| cmake-args: -D32BLIT_DIR=$GITHUB_WORKSPACE -DPICO_SDK_PATH=$GITHUB_WORKSPACE/pico-sdk -DPICO_BOARD=pimoroni_picovision -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| apt-packages: ccache gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib pipx python3-requests |
| |
| - os: ubuntu-22.04 |
| name: MinGW |
| cache-key: mingw |
| artifact-suffix: MinGW |
| cmake-args: -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/mingw.toolchain -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DSDL2_DIR=$GITHUB_WORKSPACE/SDL2/cmake -DSDL2_image_DIR=$GITHUB_WORKSPACE/SDL2_image/cmake -DSDL2_net_DIR=$GITHUB_WORKSPACE/SDL2_net/cmake |
| apt-packages: ccache g++-mingw-w64 pipx python3-requests |
| |
| - os: macos-13 |
| name: macOS |
| cache-key: macos |
| artifact-suffix: macOS |
| cmake-args: -DCMAKE_OSX_ARCHITECTURES=x86_64\;arm64 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| |
| - os: windows-latest |
| name: Visual Studio |
| cache-key: windows |
| release-suffix: WIN64 |
| cmake-args: -DSDL2_DIR=$GITHUB_WORKSPACE/vs/sdl |
| |
| runs-on: ${{matrix.os}} |
| |
| env: |
| RELEASE_FILE: ${{github.event.repository.name}}-${{github.event.release.tag_name || github.sha}}-${{matrix.release-suffix || matrix.artifact-suffix}} |
| |
| steps: |
| - name: Checkout 32Blit SDK |
| uses: actions/checkout@v4 |
| |
| - name: Checkout Examples |
| uses: actions/checkout@v4 |
| with: |
| repository: 32blit/32blit-examples |
| path: examples |
| |
| # pico sdk/extras for some builds |
| - name: Checkout Pico SDK |
| if: matrix.pico-sdk |
| uses: actions/checkout@v4 |
| with: |
| repository: raspberrypi/pico-sdk |
| path: pico-sdk |
| submodules: true |
| |
| - name: Checkout Pico Extras |
| if: matrix.pico-sdk |
| uses: actions/checkout@v4 |
| with: |
| repository: raspberrypi/pico-extras |
| path: pico-extras |
| |
| # PicoVision needs the RAM driver and the firmware |
| - name: Checkout PicoVision |
| if: matrix.name == 'PicoVision' |
| uses: actions/checkout@v4 |
| with: |
| repository: pimoroni/picovision |
| ref: 03df7694ed4fb396c1d12adf90d0150ada6baedc |
| path: picovision |
| |
| - name: Cache |
| uses: actions/cache@v4 |
| with: |
| path: | |
| ~/.ccache |
| ~/.cache/ccache |
| key: ccache-${{matrix.cache-key}}-${{github.ref}}-${{github.sha}} |
| restore-keys: | |
| ccache-${{matrix.cache-key}}-${{github.ref}} |
| ccache-${{matrix.cache-key}}- |
| |
| # Linux deps |
| - name: Install deps |
| if: runner.os == 'Linux' |
| run: | |
| sudo apt update && sudo apt install ${{matrix.apt-packages}} |
| pipx install 32blit |
| |
| # macOS deps |
| - name: Install deps |
| if: runner.os == 'macOS' |
| run: | |
| ci/install_sdl_macos.sh |
| brew install ccache |
| echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV |
| python3 -m pip install 32blit requests |
| |
| # Windows (VS) deps |
| - name: Install deps |
| if: runner.os == 'Windows' |
| shell: bash |
| run: | |
| python -m pip install 32blit requests |
| |
| - name: MinGW deps |
| if: matrix.name == 'MinGW' |
| run: ci/install_sdl_mingw.sh |
| |
| - name: Create Build Environment |
| run: | |
| cmake -E make_directory ${{runner.workspace}}/build |
| |
| - name: Set Tag Variable |
| if: github.event_name == 'release' |
| shell: bash |
| run: | |
| echo "TRAVIS_TAG=${{github.event.release.tag_name}}" >> $GITHUB_ENV |
| python3 tools/update-contributors.py || python tools/update-contributors.py |
| |
| - name: Configure CMake |
| shell: bash |
| working-directory: ${{runner.workspace}}/build |
| run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=`pwd`/install -DCPACK_PACKAGE_FILE_NAME=${{env.RELEASE_FILE}} ${{matrix.cmake-args}} |
| |
| # Problem matching |
| - if: runner.os != 'Windows' |
| uses: ammaraskar/gcc-problem-matcher@master |
| - if: runner.os == 'Windows' |
| uses: ammaraskar/msvc-problem-matcher@master |
| |
| - name: Build |
| working-directory: ${{runner.workspace}}/build |
| shell: bash |
| run: | |
| ccache --zero-stats || true |
| cmake --build . --config $BUILD_TYPE -j 2 |
| ccache --show-stats || true |
| |
| - name: Prepare Artifact |
| if: github.event_name != 'release' |
| shell: bash |
| run: | |
| cmake --build $RUNNER_WORKSPACE/build --config $BUILD_TYPE --target install |
| |
| - name: Upload Artifact |
| if: github.event_name != 'release' |
| uses: actions/upload-artifact@v4 |
| with: |
| name: ${{env.RELEASE_FILE}} |
| path: ${{runner.workspace}}/build/install |
| |
| - name: Package Release |
| if: github.event_name == 'release' && matrix.release-suffix != '' |
| shell: bash |
| working-directory: ${{runner.workspace}}/build |
| run: | |
| cmake --build . --config $BUILD_TYPE --target package |
| |
| - name: Upload tar |
| if: github.event_name == 'release' && matrix.release-suffix != '' |
| uses: softprops/action-gh-release@v1 |
| with: |
| files: ${{runner.workspace}}/build/${{env.RELEASE_FILE}}.tar.gz |
| |
| - name: Upload zip |
| if: github.event_name == 'release' && matrix.release-suffix != '' |
| uses: softprops/action-gh-release@v1 |
| with: |
| files: ${{runner.workspace}}/build/${{env.RELEASE_FILE}}.zip |