76 lines
1.8 KiB
PowerShell
76 lines
1.8 KiB
PowerShell
param(
|
|
[switch]$Run
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$ProjectDir = Join-Path $Root "src"
|
|
$IncludeDir = Join-Path $ProjectDir "include"
|
|
$SourceDir = Join-Path $ProjectDir "source"
|
|
$ResourceDir = Join-Path $ProjectDir "resources"
|
|
$AssetIconDir = Join-Path $Root "assets\icons"
|
|
$BuildDir = Join-Path $Root ".vscode-build\vs2026"
|
|
$ExePath = Join-Path $BuildDir "Tetris.exe"
|
|
$ResPath = Join-Path $BuildDir "Tetris.res"
|
|
$RcPath = Join-Path $ResourceDir "Tetris.rc"
|
|
|
|
if (-not (Get-Command cl.exe -ErrorAction SilentlyContinue)) {
|
|
throw "cl.exe not found. Open Visual Studio 2026: Tools -> Command Line -> Developer PowerShell, then run this script again."
|
|
}
|
|
|
|
if (-not (Get-Command rc.exe -ErrorAction SilentlyContinue)) {
|
|
throw "rc.exe not found. Install the Windows SDK from the Visual Studio Installer C++ desktop workload."
|
|
}
|
|
|
|
New-Item -ItemType Directory -Force -Path $BuildDir | Out-Null
|
|
|
|
$Sources = Get-ChildItem -Path $SourceDir -Recurse -Filter "*.cpp" |
|
|
Sort-Object FullName |
|
|
Select-Object -ExpandProperty FullName
|
|
|
|
if ($Sources.Count -lt 10) {
|
|
throw "Too few source files found under src\source. The render, app, logic, rogue, common, and extension modules must all be compiled."
|
|
}
|
|
|
|
& rc.exe `
|
|
/nologo `
|
|
/i $IncludeDir `
|
|
/i $AssetIconDir `
|
|
/fo $ResPath `
|
|
$RcPath
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
exit $LASTEXITCODE
|
|
}
|
|
|
|
& cl.exe `
|
|
/nologo `
|
|
/utf-8 `
|
|
/std:c++17 `
|
|
/EHsc `
|
|
/Zi `
|
|
/Od `
|
|
/DUNICODE `
|
|
/D_UNICODE `
|
|
/D_WINDOWS `
|
|
/I $IncludeDir `
|
|
$Sources `
|
|
$ResPath `
|
|
/Fe:$ExePath `
|
|
/link `
|
|
/SUBSYSTEM:WINDOWS `
|
|
winmm.lib `
|
|
gdiplus.lib `
|
|
gdi32.lib `
|
|
user32.lib `
|
|
shell32.lib
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
exit $LASTEXITCODE
|
|
}
|
|
|
|
if ($Run) {
|
|
Start-Process -FilePath $ExePath -WorkingDirectory $Root
|
|
}
|