Skip to content

Add Windows support in CMake build #5035

Add Windows support in CMake build

Add Windows support in CMake build #5035

Workflow file for this run

name: Build
on:
push:
branches-ignore:
- "dependabot/*"
pull_request:
workflow_dispatch:
jobs:
windows:
name: Windows ${{ matrix.Configuration }} ${{ matrix.Platform }} (msvc)
runs-on: windows-latest
timeout-minutes: 35
strategy:
fail-fast: false
matrix:
Configuration: [Debug, Mixed, Release, Release Master Gold]
Platform: [x64, x86]
steps:
- uses: actions/checkout@main
with:
submodules: recursive
- uses: microsoft/setup-msbuild@main
- uses: nuget/setup-nuget@main
- name: Restore NuGet packages
run: nuget restore src\engine.sln
- name: Build
working-directory: src
run: msbuild /m /p:Configuration="${{ matrix.Configuration }}" /p:Platform="${{ matrix.Platform }}" engine.sln
- name: Prepare artifacts
shell: cmd
run: misc/windows/xr_pack_build.cmd "${{ matrix.Configuration }}" "${{ matrix.Platform }}"
- name: Upload OpenXRay artifact
uses: actions/upload-artifact@main
with:
name: OpenXRay.${{ matrix.Configuration }} ${{ matrix.Platform }} (github-${{ github.run_number }}).7z
path: res/OpenXRay.*.7z
- name: Upload Symbols
uses: actions/upload-artifact@main
with:
name: Symbols.${{ matrix.Configuration }} ${{ matrix.Platform }} (github-${{ github.run_number }}).7z
path: res/Symbols.*.7z
- name: Upload Utils
uses: actions/upload-artifact@main
with:
name: Utils.${{ matrix.Configuration }} ${{ matrix.Platform }} (github-${{ github.run_number }}).7z
path: res/Utils.*.7z
- name: Update latest-nightly tag
uses: EndBug/latest-tag@latest
if: github.ref_name == 'dev'
id: update-latest-nightly-tag
with:
ref: latest-nightly
- name: Publish latest nightly build
if: ${{ steps.update-latest-nightly-tag.outcome == 'success' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload --clobber latest-nightly (get-item res/*.*.7z)
cmake:
name: ${{ matrix.platform.name }} ${{ matrix.configuration }} ${{ matrix.platform.arch }} (${{ matrix.platform.cc || 'unknown compiler' }})
runs-on: ${{ matrix.platform.os }}
container: ${{ matrix.platform.container || '' }}
defaults:
run:
shell: ${{ matrix.platform.shell || 'bash -e {0}' }}
env:
CFLAGS: "-w"
CXXFLAGS: "-w"
strategy:
fail-fast: false
matrix:
platform:
# cc is always set for the correct naming of the job.
# Both cc and cxx should be set if we want to change the compiler.
# You may also want to set XRAY_LINKER when changing the compiler.
- { name: Ubuntu, os: ubuntu-latest, arch: amd64, cc: gcc, }
- { name: Ubuntu, os: ubuntu-latest, arch: amd64, cc: clang, cxx: clang++, flags: "-DXRAY_LINKER=lld", }
#- { name: Ubuntu, os: ubuntu-latest, arch: arm64, cc: gcc, container: 'dockcross/linux-arm64', }
#- { name: Ubuntu, os: ubuntu-latest, arch: ppc64el, cc: gcc, container: 'dockcross/linux-ppc64le:latest', }
- { name: Alpine, os: ubuntu-latest, arch: x86_64, cc: gcc, shell: 'alpine.sh {0}', flags: "-DXRAY_LINKER=mold", }
- { name: Alpine, os: ubuntu-latest, arch: x86, cc: gcc, shell: 'alpine.sh {0}', flags: "-DXRAY_LINKER=mold", }
- { name: Fedora, os: ubuntu-latest, arch: x86_64, cc: gcc, container: 'fedora:latest', }
#- { name: Haiku, os: ubuntu-latest, arch: x86_64, cc: x86_64-unknown-haiku-gcc, cxx: x86_64-unknown-haiku-g++, container: 'haiku/cross-compiler:x86_64-r1beta4', }
- { name: macOS 13, os: macos-13, arch: x86_64, cc: clang, flags: "-DCMAKE_OSX_DEPLOYMENT_TARGET=13.6" }
- { name: macOS 15, os: macos-15, arch: arm64, cc: clang, flags: "-DCMAKE_OSX_DEPLOYMENT_TARGET=15.0", threads: 3 }
configuration: [Debug, Release]
steps:
- name: Install latest stable Alpine Linux and packages
if: ${{ matrix.platform.name == 'Alpine' }}
uses: jirutka/setup-alpine@master
with:
arch: ${{ matrix.platform.arch }}
branch: 'latest-stable'
packages: build-base cmake git mold sdl2-dev lzo-dev libjpeg-turbo-dev openal-soft-dev libogg-dev libtheora-dev libvorbis-dev
- name: Install Ubuntu packages
if: ${{ matrix.platform.name == 'Ubuntu' }}
run: |
sudo dpkg --add-architecture ${{ matrix.platform.arch }}
sudo apt-get update -qq
sudo apt-get install -qq -y \
libsdl2-dev:${{ matrix.platform.arch }} \
liblzo2-dev:${{ matrix.platform.arch }} \
libjpeg-dev:${{ matrix.platform.arch }} \
libopenal-dev:${{ matrix.platform.arch }} \
libogg-dev:${{ matrix.platform.arch }} \
libtheora-dev:${{ matrix.platform.arch }} \
libvorbis-dev:${{ matrix.platform.arch }}
- name: Install macOS packages
if: ${{ startsWith(matrix.platform.name, 'macOS') }}
run: |
brew update
brew install sdl2 lzo libogg libvorbis theora
- name: Install Fedora packages
if: ${{ matrix.platform.name == 'Fedora' }}
run: dnf install -y git gcc gcc-c++ rpmdevtools cmake SDL2-devel lzo-devel libjpeg-turbo-devel openal-devel libogg-devel libtheora-devel libvorbis-devel
- name: Set environment variables
if: ${{ matrix.platform.cc != '' && matrix.platform.cxx != '' }}
run: |
echo "CC=${{ matrix.platform.cc }}" >> $GITHUB_ENV
echo "CXX=${{ matrix.platform.cxx }}" >> $GITHUB_ENV
- uses: actions/checkout@main
with:
submodules: recursive
- name: Run CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DCMAKE_UNITY_BUILD=ON ${{ matrix.platform.flags }}
- name: Run CMake Build
id: cmake-build
run: cmake --build build --config ${{ matrix.configuration }} --parallel ${{ matrix.platform.threads || 4 }}
- name: Make package
if: ${{ steps.cmake-build.outcome == 'success' }}
id: make-package
#continue-on-error: true
working-directory: build
run: |
cpack -B artifacts -C ${{ matrix.configuration }} -DCPACK_THREADS=${{ matrix.platform.threads || 4 }}
file artifacts/openxray*.*
- name: Upload OpenXRay artifact
if: ${{ steps.make-package.outcome == 'success' }}
uses: actions/upload-artifact@main
with:
name: ${{ matrix.platform.name }} ${{ matrix.configuration }} ${{ matrix.platform.arch }} (${{ matrix.platform.cc }} github-${{ github.run_number }})
path: build/artifacts/openxray*.*
bsd:
name: ${{ matrix.platform.name }} ${{ matrix.configuration }} ${{ matrix.platform.arch }}
runs-on: ubuntu-latest
timeout-minutes: 35
env:
CFLAGS: "-w"
CXXFLAGS: "-w"
strategy:
fail-fast: false
matrix:
platform:
- { name: FreeBSD, os: freebsd, os-version: '14.1', arch: x86_64,
install-cmd: "sudo pkg update && sudo pkg install -y cmake sdl2 lzo2 jpeg-turbo openal-soft libogg libtheora libvorbis"
}
- { name: OpenBSD, os: openbsd, os-version: '7.5', arch: x86_64,
install-cmd: "sudo pkg_add cmake SDL2 lzo2 jpeg openal libogg libtheora libvorbis",
}
- { name: NetBSD, os: netbsd, os-version: '10.0', arch: x86_64,
install-cmd: "sudo pkgin -y install cmake SDL2 lzo libjpeg-turbo openal-soft libogg libtheora libvorbis",
}
configuration: [Debug, Release]
steps:
- uses: actions/checkout@main
with:
submodules: recursive
- name: Setup ${{ matrix.platform.name }} and packages
uses: cross-platform-actions/[email protected]
with:
operating_system: ${{ matrix.platform.os }}
architecture: ${{ matrix.platform.arch }}
version: ${{ matrix.platform.os-version }}
cpu_count: 4
memory: 13G
environment_variables: CFLAGS CXXFLAGS
shutdown_vm: false
sync_files: runner-to-vm
run: ${{ matrix.platform.install-cmd }}
- name: Run CMake
uses: cross-platform-actions/[email protected]
with:
operating_system: ${{ matrix.platform.os }}
architecture: ${{ matrix.platform.arch }}
version: ${{ matrix.platform.os-version }}
cpu_count: 4
memory: 13G
environment_variables: CFLAGS CXXFLAGS
shutdown_vm: false
sync_files: false
run: cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.Configuration }} -DCMAKE_UNITY_BUILD=ON
- name: Run CMake Build
uses: cross-platform-actions/[email protected]
with:
operating_system: ${{ matrix.platform.os }}
architecture: ${{ matrix.platform.arch }}
version: ${{ matrix.platform.os-version }}
cpu_count: 4
memory: 13G
environment_variables: CFLAGS CXXFLAGS
shutdown_vm: false
sync_files: false
run: cmake --build build --config ${{ matrix.Configuration }} --parallel 4