Files
flowframes/CodeLegacy/BuildRelease.ps1

83 lines
3.4 KiB
PowerShell
Raw Normal View History

# Define paths and tools
$winDir = ${env:WINDIR}
$progFiles64 = ${env:ProgramW6432}
$msBuildPath = [IO.Path]::Combine($progFiles64, "Microsoft Visual Studio", "2022", "Community", "MSBuild", "Current", "Bin", "MSBuild.exe")
$solutionRoot = $PSScriptRoot
$ilRepackPath = [IO.Path]::Combine($solutionRoot, "packages", "ILRepack.2.0.34", "tools", "ILRepack.exe")
$solutionPath = [IO.Path]::Combine($solutionPath, "Flowframes.sln")
$outputDir = [IO.Path]::Combine($solutionRoot, "bin")
$packedDir = [IO.Path]::Combine($outputDir, "packed")
# Check if files exist
if (Test-Path $msBuildPath) { Write-Host "Found MSBuild at $msBuildPath" } else { Write-Host "MSBuild not found! ($msBuildPath)"; exit 1 }
if (Test-Path $ilRepackPath) { Write-Host "Found ILRepack at $ilRepackPath" } else { Write-Host "ILRepack not found! ($ilRepackPath)"; exit 1 }
if (Test-Path $solutionPath) { Write-Host "Found solution at $solutionPath" } else { Write-Host "Solution not found! ($solutionPath)"; exit 1 }
# Ensure output directory exists
if (-not (Test-Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir
}
# Define configurations and platforms
$configurations = @("Release", "ConsoleRelease")
$assemblyNames = @("Flowframes", "FlowframesCmd")
$buildDirs = @("RelGui", "RelCmd")
# Function to build and repack
function Build-And-Repack ($config, $assemblyName, $buildDir) {
# Build the project
& $msBuildPath $solutionPath /p:Configuration=$config /p:Platform="x64" /m
if ($LASTEXITCODE -ne 0) {
Write-Error "Build failed for configuration: $config"
return
}
# ILRepack to merge all assemblies into a single executable
$targetDir = "$outputDir\$buildDir"
# Rename files matching *Native*.dll to .xdll to exclude them from repacking
Get-ChildItem $targetDir -Filter "*Native*.dll" | Rename-Item -NewName { $_.Name -replace '\.dll$', '.xdll' }
$mainAssembly = "$targetDir\Flowframes.exe"
$outputAssembly = "$packedDir\$assemblyName.exe"
Write-Host "------------"
$target = "winexe"
if ($assemblyName -like "*Cmd") { $target = "exe" }
& $ilRepackPath /out:$outputAssembly /target:$target /targetplatform:v4,"$winDir\Microsoft.NET\Framework64\v4.0.30319" /union /wildcards "$mainAssembly" "$targetDir\*.dll"
if ($LASTEXITCODE -ne 0) {
Write-Error "Repacking failed for configuration: $config"
} else {
Write-Host "Successfully repacked: $outputAssembly"
}
# Delete everything in $targetDir except .xdll files
Get-ChildItem $targetDir -Exclude "*.xdll" | Remove-Item -Force
# Reverse the renaming from .xdll back to .dll
Get-ChildItem $targetDir -Filter "*.xdll" | Rename-Item -NewName { $_.Name -replace '\.xdll$', '.dll' }
}
# Remove $packedDir
if (Test-Path $packedDir) {
Remove-Item -Recurse -Force $packedDir
}
# Process each configuration
foreach ($index in 0..1) {
Build-And-Repack -config $configurations[$index] -assemblyName $assemblyNames[$index] -buildDir $buildDirs[$index]
}
Write-Host "Build and repack process completed."
# Delete files other than .exe
Get-ChildItem $packedDir -Exclude "*.exe" | Remove-Item -Force
# Copy all files matching "*Native*.dll" from first $buildDirs directory to $packedDir
Get-ChildItem "$outputDir\$($buildDirs[0])" -Filter "*Native*.dll" | Copy-Item -Destination $packedDir
# Remove buildDirs
foreach ($buildDir in $buildDirs) {
Remove-Item -Recurse -Force "$outputDir\$buildDir"
}
Write-Host "All done."