Files
whetstone_DSL/installer/windows/build.ps1
Bill e08fc9e0e0 Add build infrastructure, installer scripts, and fix build errors
- Create vcpkg.json manifest with all editor dependencies
- Create CMakePresets.json for Windows (MSVC) and Linux (GCC)
- Create Inno Setup installer script (setup.iss) with file associations
- Create Windows build helper (build.ps1) with vcpkg auto-install
- Create Linux build/install scripts (build.sh, install.sh)
- Vendor imgui SDL2 backend locally (removed from vcpkg imgui 1.91+)
- Switch CMakeLists.txt from FetchContent to vcpkg find_package
- Fix ElispGenerator missing pure virtual overrides for memory annotations
- Fix Orchestrator::findNodeById const-correctness
- Fix orchestrator_main.cpp loadFile/saveFile type mismatches
- Fix main.cpp SDL_GL_SwapBuffers -> SDL_GL_SwapWindow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 22:15:50 -07:00

166 lines
4.5 KiB
PowerShell

# Whetstone Editor - Windows Build Script
# Prerequisites: Visual Studio 2022, CMake 3.20+, vcpkg
# Usage: .\build.ps1 [-Config Release|Debug] [-VcpkgRoot E:\vcpkg]
param(
[ValidateSet("Release", "Debug")]
[string]$Config = "Release",
[string]$VcpkgRoot = $env:VCPKG_ROOT
)
$ErrorActionPreference = "Stop"
$EditorDir = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
$EditorDir = Join-Path $EditorDir "editor"
$BuildDir = Join-Path $EditorDir "build"
$StagingDir = Join-Path $PSScriptRoot "staging"
$Triplet = "x64-windows"
function Write-Step($msg) {
Write-Host "`n==> $msg" -ForegroundColor Cyan
}
function Test-Command($cmd) {
return [bool](Get-Command $cmd -ErrorAction SilentlyContinue)
}
# --- Check prerequisites ---
Write-Step "Checking prerequisites"
# CMake
if (-not (Test-Command "cmake")) {
Write-Error "CMake not found. Install CMake 3.20+ and add it to PATH."
}
$cmakeVersion = (cmake --version | Select-Object -First 1)
Write-Host " CMake: $cmakeVersion"
# Visual Studio
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (Test-Path $vsWhere) {
$vsPath = & $vsWhere -latest -property installationPath
Write-Host " Visual Studio: $vsPath"
} else {
Write-Warning "vswhere not found - Visual Studio may not be installed."
}
# vcpkg
if (-not $VcpkgRoot) {
# Try common locations
$candidates = @("E:\vcpkg", "C:\vcpkg", "$env:USERPROFILE\vcpkg")
foreach ($c in $candidates) {
if (Test-Path (Join-Path $c "vcpkg.exe")) {
$VcpkgRoot = $c
break
}
}
}
if (-not $VcpkgRoot -or -not (Test-Path (Join-Path $VcpkgRoot "vcpkg.exe"))) {
Write-Error "vcpkg not found. Set VCPKG_ROOT or pass -VcpkgRoot <path>."
}
Write-Host " vcpkg: $VcpkgRoot"
$vcpkgExe = Join-Path $VcpkgRoot "vcpkg.exe"
$toolchainFile = Join-Path $VcpkgRoot "scripts\buildsystems\vcpkg.cmake"
# --- Install vcpkg dependencies ---
Write-Step "Installing vcpkg dependencies"
$packages = @(
"nlohmann-json:$Triplet",
"sdl2:$Triplet",
"imgui[docking-experimental,opengl3-binding]:$Triplet",
"glad:$Triplet"
)
foreach ($pkg in $packages) {
Write-Host " Installing $pkg ..."
& $vcpkgExe install $pkg --recurse 2>&1 | Out-Null
if ($LASTEXITCODE -ne 0) {
Write-Warning "vcpkg install $pkg returned exit code $LASTEXITCODE (may already be installed)"
}
}
Write-Host " All vcpkg packages installed." -ForegroundColor Green
# --- Configure CMake ---
Write-Step "Configuring CMake ($Config)"
if (-not (Test-Path $BuildDir)) {
New-Item -ItemType Directory -Path $BuildDir | Out-Null
}
cmake -S $EditorDir -B $BuildDir `
-G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="$toolchainFile" `
-DVCPKG_TARGET_TRIPLET="$Triplet"
if ($LASTEXITCODE -ne 0) {
Write-Error "CMake configure failed."
}
# --- Build ---
Write-Step "Building ($Config)"
$targets = @("whetstone_editor", "orchestrator")
foreach ($t in $targets) {
cmake --build $BuildDir --config $Config --target $t --parallel
if ($LASTEXITCODE -ne 0) {
Write-Error "Build of $t failed."
}
}
Write-Host "`n Build succeeded." -ForegroundColor Green
# --- Stage output for installer ---
Write-Step "Staging build output to $StagingDir"
if (Test-Path $StagingDir) {
Remove-Item -Recurse -Force $StagingDir
}
New-Item -ItemType Directory -Path $StagingDir | Out-Null
# Copy executables
$binDir = Join-Path $BuildDir $Config
$exes = @("whetstone_editor.exe", "orchestrator.exe")
foreach ($exe in $exes) {
$src = Join-Path $binDir $exe
if (Test-Path $src) {
Copy-Item $src $StagingDir
Write-Host " Copied $exe"
} else {
Write-Warning " $exe not found at $src"
}
}
# Copy DLLs from vcpkg installed dir
$vcpkgBinDir = Join-Path $VcpkgRoot "installed\$Triplet\bin"
if (Test-Path $vcpkgBinDir) {
$dlls = @("SDL2.dll")
foreach ($dll in $dlls) {
$src = Join-Path $vcpkgBinDir $dll
if (Test-Path $src) {
Copy-Item $src $StagingDir
Write-Host " Copied $dll"
}
}
}
# Also copy any DLLs that ended up in the build output directory
Get-ChildItem -Path $binDir -Filter "*.dll" -ErrorAction SilentlyContinue | ForEach-Object {
if (-not (Test-Path (Join-Path $StagingDir $_.Name))) {
Copy-Item $_.FullName $StagingDir
Write-Host " Copied $($_.Name) (from build output)"
}
}
Write-Step "Done!"
Write-Host " Executables staged in: $StagingDir"
Write-Host " To create the installer, compile setup.iss with Inno Setup."
Write-Host ""