Repository navigation
Expand file tree
/
Copy pathbuild-update.ps1
More file actions
38 lines (38 loc) · 2.75 KB
/
Copy pathbuild-update.ps1
File metadata and controls
38 lines (38 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
param([Parameter(Mandatory = $true)][string]$StagingDirectory)
$ErrorActionPreference = 'Stop'
$StagingDirectory = [IO.Path]::GetFullPath($StagingDirectory)
New-Item -ItemType Directory -Force -Path $StagingDirectory | Out-Null
$compiler = Join-Path $env:WINDIR 'Microsoft.NET\Framework64\v4.0.30319\csc.exe'
$payload = Join-Path $StagingDirectory 'GuidePad.payload.exe'
$native = Join-Path $PSScriptRoot 'runtime\isolation\libVIIPER.dll'
if (!(Test-Path -LiteralPath $native)) { throw 'libVIIPER.dll not found; cannot build isolation update.' }
$license = Join-Path $PSScriptRoot 'src\libVIIPER.LICENSE.txt'
$icon = Join-Path $PSScriptRoot 'assets\GuidePad.ico'
$sources = @('GuidePad.cs','Ds5Input.cs','Bilibili.cs','Bindings.cs','Account.cs','StreamRecovery.cs','DanmakuState.cs','DanmakuConverter.cs','SubtitleContinuity.cs') | ForEach-Object { Join-Path $PSScriptRoot "src\$_" }
$sources += @('Isolation.cs','IsolationNative.cs','IsolationAudio.cs') | ForEach-Object { Join-Path $PSScriptRoot "src\$_" }
$sources += Join-Path $PSScriptRoot 'src\IsolationWasapi.cs'
$sources += Join-Path $PSScriptRoot 'research\Standalone\DualSensePacketGate.cs'
& $compiler /nologo /target:winexe /platform:x64 /optimize+ /utf8output `
/reference:System.dll /reference:System.Core.dll /reference:System.Drawing.dll `
/reference:System.Windows.Forms.dll /reference:System.Web.Extensions.dll /reference:System.Xml.dll `
"/win32icon:$icon" `
"/resource:$native,GuidePad.IsolationNative.dll" "/resource:$license,GuidePad.IsolationLicense.txt" `
"/out:$payload" $sources
if ($LASTEXITCODE -ne 0) { throw 'GuidePad compilation failed.' }
$gzipFile = Join-Path $StagingDirectory 'payload.gz'
$shaFile = Join-Path $StagingDirectory 'payload.sha256'
$input = [IO.File]::OpenRead($payload)
$output = [IO.File]::Create($gzipFile)
$gzip = [IO.Compression.GZipStream]::new($output,[IO.Compression.CompressionMode]::Compress)
try { $input.CopyTo($gzip) } finally { $gzip.Dispose(); $output.Dispose(); $input.Dispose() }
[IO.File]::WriteAllText($shaFile,(Get-FileHash -LiteralPath $payload -Algorithm SHA256).Hash)
$updater = Join-Path $PSScriptRoot 'GuidePad-update.exe'
& $compiler /nologo /target:winexe /platform:x64 /optimize+ /utf8output `
/reference:System.dll /reference:System.Core.dll /reference:System.Windows.Forms.dll `
/reference:System.Web.Extensions.dll /reference:System.Management.dll `
"/win32icon:$icon" `
"/resource:$gzipFile,GuidePad.Payload.gz" "/resource:$shaFile,GuidePad.Payload.sha256" `
"/resource:$native,GuidePad.IsolationNative.dll" "/resource:$license,GuidePad.IsolationLicense.txt" `
"/out:$updater" (Join-Path $PSScriptRoot 'src\Updater.cs')
if ($LASTEXITCODE -ne 0) { throw 'Updater compilation failed.' }
Write-Host "Built self-contained updater: $updater"