vulcast-vertical/build-vulcast-vertical.ps1
Vulcast 63b49749c9
Some checks are pending
Build Windows DLL / Build for Windows (push) Waiting to run
Build OBS manually, pass pre-built libs to plugin cmake, skip auto-deps
2026-06-30 18:18:14 +01:00

155 lines
6.5 KiB
PowerShell

#Requires -Version 7.2
<#
.SYNOPSIS
Builds the Vulcast Vertical OBS plugin DLL.
Builds OBS manually, then the plugin links against it.
#>
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
$OBS_VERSION = '31.1.1'
$DEPS_DATE = '2025-07-11'
$WORK = "$env:TEMP\vulcast-build"
$SRC = "$WORK\vulcast-vertical"
Write-Host "=== Vulcast Vertical Build Script ===" -ForegroundColor Cyan
Write-Host ""
# ---------- Build Tools ----------
function Find-MSVC {
$vsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (Test-Path $vsWhere) {
$p = & $vsWhere -latest -property installationPath 2>$null
if ($p) { return $p }
}
foreach ($v in '2022','2019') {
foreach ($ed in 'BuildTools','Community','Professional','Enterprise') {
foreach ($base in "${env:ProgramFiles(x86)}","${env:ProgramFiles}") {
$p = "$base\Microsoft Visual Studio\$v\$ed"
if (Test-Path "$p\VC\Auxiliary\Build\vcvarsall.bat") { return $p }
}
}
}
return $null
}
$vsPath = Find-MSVC
if (-not $vsPath) {
Write-Host "Installing VS 2022 Build Tools (~3GB, 5-15 min)..." -ForegroundColor Yellow
$installer = "$env:TEMP\vs_buildtools.exe"
if (-not (Test-Path $installer)) {
Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_BuildTools.exe' -OutFile $installer
}
$proc = Start-Process -FilePath $installer -ArgumentList @(
'--quiet','--wait','--norestart',
'--add','Microsoft.VisualStudio.Workload.VCTools',
'--add','Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
'--add','Microsoft.VisualStudio.Component.Windows11SDK.22621',
'--includeRecommended'
) -Wait -PassThru
if ($proc.ExitCode -ne 0 -and $proc.ExitCode -ne 3010) {
Write-Error "Install failed. Get it from https://visualstudio.microsoft.com/downloads/"
exit 1
}
$vsPath = Find-MSVC
if (-not $vsPath) { Write-Error "Restart terminal and run again."; exit 1 }
Write-Host "[OK] Installed: $vsPath`n" -ForegroundColor Green
} else {
Write-Host "[OK] Build Tools: $vsPath`n" -ForegroundColor Green
}
$vcvars = Get-ChildItem -Path $vsPath -Recurse -Filter 'vcvarsall.bat' -ErrorAction SilentlyContinue |
Select-Object -First 1 -ExpandProperty FullName
Write-Host "Setting up MSVC x64..." -ForegroundColor Yellow
cmd /c "`"$vcvars`" x64 >nul 2>&1 && set" | ForEach-Object {
if ($_ -match '^([^=]+)=(.*)$') {
[System.Environment]::SetEnvironmentVariable($Matches[1], $Matches[2])
}
}
if (Get-Command cl.exe -ErrorAction SilentlyContinue) { Write-Host "[OK] cl.exe ready`n" -ForegroundColor Green }
# ---------- Directories ----------
New-Item -ItemType Directory -Path $WORK -Force | Out-Null
$DEPS = "$WORK\deps"
$OBS = "$WORK\obs-studio"
# ---------- Step 1: Source ----------
Write-Host "[1/5] Source code" -ForegroundColor Cyan
if (-not (Test-Path "$SRC\CMakeLists.txt")) {
Write-Host " Downloading..." -ForegroundColor Yellow
Invoke-WebRequest -Uri 'https://vulcast.xyz/dl/vulcast-vertical-source.zip' -OutFile "$WORK\source.zip"
Expand-Archive -Path "$WORK\source.zip" -DestinationPath $WORK -Force
}
# ---------- Step 2: OBS source ----------
Write-Host "[2/5] OBS Studio source" -ForegroundColor Cyan
if (-not (Test-Path "$OBS\CMakeLists.txt")) {
Write-Host " Downloading..." -ForegroundColor Yellow
Invoke-WebRequest -Uri "https://github.com/obsproject/obs-studio/archive/refs/tags/$OBS_VERSION.zip" -OutFile "$WORK\obs.zip"
Expand-Archive -Path "$WORK\obs.zip" -DestinationPath $WORK -Force
if (Test-Path "$WORK\obs-studio-$OBS_VERSION") { Rename-Item "$WORK\obs-studio-$OBS_VERSION" $OBS }
}
# ---------- Step 3: Dependencies ----------
Write-Host "[3/5] OBS pre-built dependencies" -ForegroundColor Cyan
New-Item -ItemType Directory -Path $DEPS -Force | Out-Null
if (-not (Test-Path "$DEPS\include\obs")) {
$depsUrl = "https://github.com/obsproject/obs-deps/releases/download/$DEPS_DATE/windows-deps-$DEPS_DATE-x64.zip"
Write-Host " Downloading deps (~60MB)..." -ForegroundColor Yellow
Invoke-WebRequest -Uri $depsUrl -OutFile "$DEPS\deps.zip"
Expand-Archive -Path "$DEPS\deps.zip" -DestinationPath $DEPS -Force
}
if (-not (Test-Path "$DEPS\lib\cmake\Qt6")) {
$qt6Url = "https://github.com/obsproject/obs-deps/releases/download/$DEPS_DATE/windows-deps-qt6-$DEPS_DATE-x64.zip"
Write-Host " Downloading Qt6 (~250MB)..." -ForegroundColor Yellow
Invoke-WebRequest -Uri $qt6Url -OutFile "$DEPS\qt6.zip"
Expand-Archive -Path "$DEPS\qt6.zip" -DestinationPath $DEPS -Force
}
# ---------- Step 4: Build OBS ----------
Write-Host "[4/5] Building OBS libraries" -ForegroundColor Cyan
$obsBuild = "$OBS\build_x64"
if (-not (Test-Path "$obsBuild\libobs\Release\obs.lib")) {
cmake -S $OBS -B $obsBuild `
-G "Visual Studio 17 2022" -A x64 `
-DENABLE_PLUGINS=OFF `
-DENABLE_UI=OFF `
-DENABLE_SCRIPTING=OFF `
-DCMAKE_PREFIX_PATH="$DEPS" 2>&1 | Write-Host
cmake --build $obsBuild --config Debug --target obs-frontend-api -- /m /noLogo 2>&1 | Write-Host
cmake --build $obsBuild --config Release --target obs-frontend-api -- /m /noLogo 2>&1 | Write-Host
# Install to deps dir so plugin can find it
cmake --install $obsBuild --component Development --config Debug --prefix "$DEPS" 2>&1 | Write-Host
cmake --install $obsBuild --component Development --config Release --prefix "$DEPS" 2>&1 | Write-Host
} else {
Write-Host " OBS libs (cached)" -ForegroundColor DarkGray
}
# ---------- Step 5: Build plugin ----------
Write-Host "[5/5] Building Vulcast Vertical" -ForegroundColor Cyan
Push-Location $SRC
cmake -S . -B build `
-G "Visual Studio 17 2022" -A x64 `
-DBUILD_OUT_OF_TREE=On `
-DCMAKE_PREFIX_PATH="$DEPS" `
-DQT_VERSION=6 `
-DCMAKE_BUILD_TYPE=Release `
-DFETCHCONTENT_FULLY_DISCONNECTED=ON 2>&1 | Write-Host
cmake --build build --config Release -- /m /noLogo 2>&1 | Write-Host
Pop-Location
# ---------- Done ----------
$dll = Get-ChildItem -Path "$SRC\build" -Recurse -Filter "vulcast-vertical.dll" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($dll) {
$dest = "$env:USERPROFILE\Desktop\vulcast-vertical.dll"
Copy-Item $dll.FullName $dest -Force
Write-Host "`n=== BUILD SUCCESSFUL ===" -ForegroundColor Green
Write-Host "DLL: $dest" -ForegroundColor Green
Write-Host "`nInstall: copy to `"C:\Program Files\obs-studio\obs-plugins\64bit\`" and restart OBS."
} else {
Write-Error "DLL not found. Check output above."
}