name: CMake on: push: paths: - src/** - cmake/** - "**/CMakeLists.txt" - "CMakePresets.json" - .github/workflows/cmake.yml - vcpkg.json - "!**/Makefile*" pull_request: paths: - src/** - cmake/** - "**/CMakeLists.txt" - "CMakePresets.json" - .github/workflows/** - .github/workflows/cmake.yml - vcpkg.json - "!**/Makefile*" jobs: msys2: name: "Windows MSYS2 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }})" runs-on: windows-2022 env: BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed defaults: run: shell: msys2 {0} strategy: fail-fast: true matrix: build: # - name: Regular # preset: regular - name: Debug preset: debug slug: -Debug - name: Dev preset: experimental slug: -Dev dynarec: - name: ODR new: off slug: -ODR - name: NDR new: on slug: -NDR ui: - name: Win32 GUI qt: off static: on - name: Qt GUI qt: on static: on slug: -Qt packages: >- qt5-static:p # qt5-base:p # qt5-tools:p environment: # - msystem: MSYS # toolchain: ./cmake/flags-gcc-x86_64.cmake - msystem: MINGW32 prefix: mingw-w64-i686 toolchain: ./cmake/flags-gcc-i686.cmake - msystem: MINGW64 prefix: mingw-w64-x86_64 toolchain: ./cmake/flags-gcc-x86_64.cmake # - msystem: CLANG32 # prefix: mingw-w64-clang-i686 # toolchain: ./cmake/llvm-win32-i686.cmake # - msystem: CLANG64 # prefix: mingw-w64-clang-x86_64 # toolchain: ./cmake/llvm-win32-x86_64.cmake - msystem: UCRT64 prefix: mingw-w64-ucrt-x86_64 toolchain: ./cmake/flags-gcc-x86_64.cmake steps: - name: Prepare MSYS2 environment uses: msys2/setup-msys2@v2 with: release: false update: true msystem: ${{ matrix.environment.msystem }} pacboy: >- ninja:p cmake:p gcc:p pkgconf:p freetype:p SDL2:p zlib:p libpng:p openal:p rtmidi:p libslirp:p fluidsynth:p libvncserver:p ${{ matrix.ui.packages }} - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 - name: Configure CMake run: >- cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain ${{ matrix.environment.toolchain }} -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts -D QT=${{ matrix.ui.qt }} -D STATIC_BUILD=${{ matrix.ui.static }} - name: Build run: | .sonar/build-wrapper-win-x86/build-wrapper-win-x86-64.exe --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build - name: Run sonar-scanner if: 0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | .sonar/sonar-scanner-5.0.1.3006-windows/bin/sonar-scanner.bat --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" - name: Generate package run: cmake --install build - name: Upload artifact uses: actions/upload-artifact@v3 with: name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}' path: build/artifacts/** llvm-windows: name: "Windows vcpkg/LLVM (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.target.name }})" if: 0 runs-on: windows-2022 env: BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' strategy: fail-fast: true matrix: build: # - name: Regular # preset: regular - name: Debug preset: debug slug: -Debug - name: Dev preset: experimental slug: -Dev dynarec: - name: ODR new: off slug: -ODR - name: NDR new: on slug: -NDR ui: - name: Win32 GUI qt: off - name: Qt GUI qt: on slug: -Qt target: - name: x86 triplet: x86-windows-static toolchain: ./cmake/llvm-win32-i686.cmake vcvars: x64_x86 - name: x64 triplet: x64-windows-static toolchain: ./cmake/llvm-win32-x86_64.cmake vcvars: x64 # - name: ARM # triplet: arm-windows-static # toolchain: ./cmake/llvm-win32-arm.cmake # vcvars: x64_arm - name: ARM64 triplet: arm64-windows-static toolchain: ./cmake/llvm-win32-aarch64.cmake vcvars: x64_arm64 exclude: - dynarec: new: off target: name: ARM64 steps: - name: Prepare VS environment uses: ilammy/msvc-dev-cmd@v1 with: arch: ${{ matrix.target.vcvars }} - name: Add LLVM to path run: echo "C:/Program Files/LLVM/bin" >> $env:GITHUB_PATH - name: Download Ninja run: > Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip && Expand-Archive ninja-win.zip -DestinationPath . - name: Setup NuGet Credentials run: > & (C:/vcpkg/vcpkg --vcpkg-root "${{ env.VCPKG_ROOT }}" fetch nuget | tail -n 2) sources add -source "https://nuget.pkg.github.com/86Box/index.json" -storepasswordincleartext -name "GitHub" -username "86Box" -password "${{ secrets.GITHUB_TOKEN }}" - name: Fix MSVC atomic headers run: dir "C:/Program Files/Microsoft Visual Studio/2022/*/VC/Tools/MSVC/*/include" -include stdatomic.h -recurse | del - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 - name: Configure CMake run: > cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain C:/vcpkg/scripts/buildsystems/vcpkg.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D QT=${{ matrix.ui.qt }} -D CMAKE_INSTALL_PREFIX=./build/artifacts -D VCPKG_CHAINLOAD_TOOLCHAIN_FILE=${{ github.workspace }}/${{ matrix.target.toolchain }} -D VCPKG_TARGET_TRIPLET=${{ matrix.target.triplet }} -D VCPKG_HOST_TRIPLET=x64-windows -D VCPKG_USE_HOST_TOOLS=ON - name: Fix Qt if: matrix.ui.qt == 'on' run: | $qtTargetsPath = "${{ github.workspace }}/build/vcpkg_installed/${{ matrix.target.triplet }}/share/Qt6/Qt6Targets.cmake" (Get-Content $qtTargetsPath) -replace "^.*-Zc:__cplusplus;-permissive-.*$","#$&" | Set-Content $qtTargetsPath - name: Reconfigure CMake if: matrix.ui.qt == 'on' run: | cmake clean build - name: Build run: | .sonar/build-wrapper-win-x86/build-wrapper-win-x86-64.exe --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build - name: Run sonar-scanner if: 0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | .sonar/sonar-scanner-5.0.1.3006-windows/bin/sonar-scanner.bat --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" - name: Generate package run: | cmake --install build - name: Upload artifact uses: actions/upload-artifact@v3 with: name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-LLVM-${{ matrix.target.name }}-gha${{ github.run_number }}' path: build/artifacts/** linux: name: "Linux GCC 11 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: ubuntu-22.04 env: BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed strategy: fail-fast: true matrix: build: # - name: Regular # preset: regular - name: Debug preset: debug slug: -Debug - name: Dev preset: experimental slug: -Dev dynarec: - name: ODR new: off slug: -ODR - name: NDR new: on slug: -NDR ui: - name: SDL GUI qt: off static: on - name: Qt GUI qt: on slug: -Qt packages: >- qtbase5-dev qtbase5-private-dev qttools5-dev libevdev-dev libxkbcommon-x11-dev steps: - name: Install dependencies run: >- sudo apt update && sudo apt install build-essential ninja-build libfreetype-dev libsdl2-dev libpng-dev libc6-dev librtmidi-dev libopenal-dev libslirp-dev libfluidsynth-dev libvncserver-dev ${{ matrix.ui.packages }} - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 - name: Configure CMake run: >- cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain ./cmake/flags-gcc-x86_64.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts -D QT=${{ matrix.ui.qt }} - name: Build run: | build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build - name: Run sonar-scanner # if: 0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | sonar-scanner --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" - name: Generate package run: | cmake --install build - name: Upload artifact uses: actions/upload-artifact@v3 with: name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-UbuntuJammy-x86_64-gha${{ github.run_number }}' path: build/artifacts/** macos11: name: "macOS 11 (${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, x86_64)" runs-on: macos-11 env: BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed strategy: fail-fast: true matrix: build: # - name: Regular # preset: regular - name: Debug preset: debug slug: -Debug - name: Dev preset: experimental slug: -Dev dynarec: - name: ODR new: off slug: -ODR - name: NDR new: on slug: -NDR ui: - name: SDL GUI qt: off static: on src-packages: >- libsndfile - name: Qt GUI qt: on slug: -Qt packages: >- qt@5 src-packages: >- libsndfile steps: - name: Install source dependencies run: >- brew reinstall -s ${{ matrix.ui.src-packages }} - name: Install dependencies run: >- brew install ninja freetype sdl2 libpng rtmidi openal-soft fluidsynth libvncserver ${{ matrix.ui.packages }} - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 - name: Configure CMake run: >- cmake -G Ninja -S . -B build --preset ${{ matrix.build.preset }} --toolchain ./cmake/flags-gcc-x86_64.cmake -D NEW_DYNAREC=${{ matrix.dynarec.new }} -D CMAKE_INSTALL_PREFIX=./build/artifacts -D QT=${{ matrix.ui.qt }} -D Qt5_ROOT=$(brew --prefix qt@5) -D Qt5LinguistTools_ROOT=$(brew --prefix qt@5) -D OpenAL_ROOT=$(brew --prefix openal-soft) - name: Build run: | build-wrapper-macosx-x86 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build - name: Run sonar-scanner if: 0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | sonar-scanner --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" - name: Generate package run: | cmake --install build - name: Upload artifact uses: actions/upload-artifact@v3 with: name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}' path: build/artifacts/**