17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 06:19:19 +02:00
Files
maszyna/.github/workflows/build_bin.yml
maj00r 07cd3b3769 Editor imagery: unflip the WMS tiles, and build without libcurl
Two things about the map behind the plan, neither of them the plan's own doing.

stb keeps one flip flag for the whole program - there is a single stb_image.c in
the build - and the model texture loader turned it on for its own sake, because
models want the bottom row first. A WMS tile is the other way about: its first row
is its northern edge, which is what the drawing code takes v=0 to be. So every
tile came out upside down as soon as any model texture had been loaded through
that path, which is why this has come and gone with the order things load in. Both
decoders now say which way they want it per thread, where nobody else can reach it.

And libcurl is no longer required to configure. A tree without it builds an editor
that draws and exports as usual, only with nothing behind the plan, and says so
once rather than showing a silent grey screen; the CI installs it, so what comes
out of the build has its imagery.
2026-09-14 16:35:06 +02:00

292 lines
8.5 KiB
YAML

name: Build binaries
on:
push:
branches:
- "**"
pull_request:
types:
- opened
- reopened
- synchronize
workflow_dispatch:
permissions:
contents: read
env:
CONFIG_WIN: RelWithDebInfo
CONFIG_LINUX: Release
jobs:
# ============================================================
# Windows / Clang (GNU driver, MSVC ABI)
# ============================================================
windows:
name: Windows x64 / Clang
runs-on: windows-2022
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- name: Setup Python 3.14
id: python
uses: actions/setup-python@v6
with:
python-version: "3.14"
architecture: "x64"
# clang++ with its GNU driver, not clang-cl: CMake only wires up C++20
# module scanning for the GNU frontend variant, and refuses to generate
# otherwise. The default target on Windows is still x86_64-pc-windows-msvc,
# so the ABI, the Windows SDK, the vcpkg packages and D3D12 are unchanged.
# Pinned to the version the Linux job uses.
- name: Install LLVM and Ninja
shell: pwsh
run: |
choco install llvm --version=22.1.8 -y --no-progress
choco install ninja -y --no-progress
- name: Show environment
shell: pwsh
run: |
python --version
cmake --version
ninja --version
& "$env:ProgramFiles\LLVM\bin\clang++.exe" --version
& "$env:ProgramFiles\LLVM\bin\clang-scan-deps.exe" --version
Write-Host "Python:"
Get-Command python
Write-Host "Visual Studio (for the SDK and the MSVC STL):"
& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" `
-latest `
-products * `
-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
-property installationPath
# README: bootstrap vcpkg + install DirectX DXC
- name: Prepare Windows dependencies
shell: cmd
run: |
call setup.bat
# Ninja, not MSBuild: CMake's module dependency scanning is best supported
# there.
#
# Deliberately not inside vcvars64. clang finds the MSVC toolchain and the
# Windows SDK by itself; letting vcvars also put them in INCLUDE gives the
# same directory two spellings, one of them with doubled separators, and
# #pragma once then fails to recognise the file - the SDK headers get
# parsed twice and every COM interface looks like a uuid mismatch.
- name: Configure
shell: cmd
run: |
for %%p in ("${{ steps.python.outputs.python-path }}") do set "PYROOT=%%~dpp"
rem CMake writes these paths verbatim into its own .cmake files, where a
rem backslash starts an escape: "C:\Program Files" would be read as \P.
set "LLVMBIN=%ProgramFiles:\=/%/LLVM/bin"
set "PYROOT=%PYROOT:\=/%"
cmake -S . -B build ^
-G Ninja ^
-DCMAKE_BUILD_TYPE=%CONFIG_WIN% ^
-DCMAKE_C_COMPILER="%LLVMBIN%/clang.exe" ^
-DCMAKE_CXX_COMPILER="%LLVMBIN%/clang++.exe" ^
-DCMAKE_RC_COMPILER="%LLVMBIN%/llvm-rc.exe" ^
-DPython3_ROOT_DIR="%PYROOT%"
- name: Build
shell: cmd
run: |
cmake --build build --parallel
- name: Copy shaders
shell: pwsh
run: |
$output = "build/bin"
New-Item `
-ItemType Directory `
-Force `
-Path "$output/shaders" | Out-Null
Copy-Item `
-Path "shaders/*" `
-Destination "$output/shaders" `
-Recurse `
-Force
- name: Upload Windows build
uses: actions/upload-artifact@v4
with:
name: maszyna-windows-x64-${{ env.CONFIG_WIN }}
path: |
build/bin/
if-no-files-found: error
retention-days: 14
- name: Upload Windows debug symbols
uses: actions/upload-artifact@v4
with:
name: maszyna-windows-x64-symbols-${{ env.CONFIG_WIN }}
path: |
build/pdb/*.pdb
build/bin/*.map
if-no-files-found: warn
retention-days: 14
# ============================================================
# Linux / Clang
# ============================================================
linux:
name: Linux x64 / Clang
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
- name: Setup Python 3.14
id: python
uses: actions/setup-python@v6
with:
python-version: "3.14"
- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential ninja-build wget lsb-release software-properties-common gnupg \
libgl1-mesa-dev \
libglew-dev \
libglfw3-dev \
libpng-dev \
libopenal-dev \
libluajit-5.1-dev \
libserialport-dev \
libsndfile1-dev \
libcurl4-openssl-dev \
xorg-dev \
libxkbcommon-dev \
libwayland-dev \
wayland-protocols
- name: Install LLVM/Clang 22
run: |
# Noble ships Clang 18, whose C++20 module support is not good enough
# for this tree; apt.llvm.org has current releases.
wget -qO /tmp/llvm.sh https://apt.llvm.org/llvm.sh
chmod +x /tmp/llvm.sh
sudo /tmp/llvm.sh 22
sudo apt-get install -y clang-tools-22 # clang-scan-deps, needed to scan modules
#
# Existing MaSzyna CI already builds OpenAL Soft 1.24.2,
# so retain that instead of relying only on Ubuntu's package.
#
- name: Build OpenAL Soft
run: |
git clone \
--depth 1 \
--branch 1.24.2 \
https://github.com/kcat/openal-soft.git \
/tmp/openal-soft
cmake \
-S /tmp/openal-soft \
-B /tmp/openal-soft/build \
-DCMAKE_BUILD_TYPE=Release \
-DALSOFT_EXAMPLES=OFF \
-DALSOFT_UTILS=OFF
cmake \
--build /tmp/openal-soft/build \
--parallel "$(nproc)"
sudo cmake \
--install /tmp/openal-soft/build
sudo ldconfig
- name: Show environment
run: |
clang-22 --version
clang-scan-deps-22 --version
ninja --version
cmake --version
python --version
- name: Configure
env:
CC: clang-22
CXX: clang++-22
run: |
cmake \
-S . \
-B build \
-G Ninja \
-DCMAKE_BUILD_TYPE="${CONFIG_LINUX}" \
-DWITH_BETTER_RENDERER=OFF \
-DWITH_ZMQ=OFF \
-DWITH_OPENVR=OFF \
-DUSE_LTO=OFF \
-DPython3_EXECUTABLE="${{ steps.python.outputs.python-path }}" \
-DCMAKE_CXX_FLAGS="-Wno-attributes"
- name: Build
run: |
cmake \
--build build \
--parallel "$(nproc)"
- name: Prepare Linux Python environment
run: |
PYTHON_ROOT="$(python -c 'import sys; print(sys.base_prefix)')"
PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
PYTHON_HOME="$GITHUB_WORKSPACE/build/bin/linuxpython64"
echo "Python root: $PYTHON_ROOT"
echo "Python version: $PYTHON_VERSION"
echo "Embedded Python home: $PYTHON_HOME"
python -m venv --copies "$PYTHON_HOME"
cp -a \
"$PYTHON_ROOT/lib/python${PYTHON_VERSION}/." \
"$PYTHON_HOME/lib/python${PYTHON_VERSION}/"
"$PYTHON_HOME/bin/python" -m pip install --upgrade pip
"$PYTHON_HOME/bin/python" -m pip install --no-cache-dir Pillow
"$PYTHON_HOME/bin/python" -c "from PIL import Image; print('Pillow:', Image.__version__)"
- name: Copy shaders
run: |
mkdir -p build/bin/shaders
cp -R shaders/. build/bin/shaders/
- name: Upload Linux build
uses: actions/upload-artifact@v4
with:
name: maszyna-linux-x64-${{ env.CONFIG_LINUX }}
path: |
build/bin/
if-no-files-found: error
retention-days: 14