satdump/windows/Finish-Debug.ps1
2025-01-30 21:27:13 -05:00

116 lines
No EOL
3.8 KiB
PowerShell

# Preps satdump for execution within the debugger
# MSVC 2022 seems to build in a ./out/... folder
# Assume this is true
param(
[string]$platform="x64-windows", #or x86-windows, arm64-windows
[switch]$fast
)
function Parse-DumpBin($binary_path)
{
$return_val = @()
$dumpbin_result = dumpbin /dependents $binary_path
$reading = $false
for($i = 0; $i -lt $dumpbin_result.Count; $i++)
{
$this_line = $dumpbin_result[$i].trim()
if($this_line -eq "Image has the following dependencies:")
{
$i++
$reading = $true
continue
}
if($reading -and [string]::IsNullOrWhiteSpace($this_line))
{
break
}
if($reading)
{
$return_val += $this_line
}
}
return $return_val
}
cd "$(Split-Path -Parent $MyInvocation.MyCommand.Path)\..\out\build\$($platform.Split("-")[0])-Debug"
#Remove old dirs
if(Test-Path Debug\resources -ErrorAction SilentlyContinue) {rm -Recurse Debug\resources}
if(Test-Path Debug\plugins -ErrorAction SilentlyContinue) {rm -Recurse Debug\plugins}
cp -r ..\..\..\resources Debug
mkdir Debug\plugins | Out-Null
cp -force plugins\Debug\*.dll Debug\plugins
cp -force plugins\Debug\*.pdb Debug\plugins
cp -force ..\..\..\satdump_cfg.json Debug
if(-not $fast)
{
$input_dlls = Get-ChildItem Debug\ -Recurse -Filter *.dll
$input_dlls += Get-ChildItem Debug\ -Recurse -Filter *.exe
$dll_array = @()
foreach($input_dll in $input_dlls)
{
$dll_array += Parse-Dumpbin $input_dll.FullName
}
$dll_array = $dll_array | select -Unique
$available_dlls = Get-ChildItem ..\..\..\vcpkg\installed\$platform\bin -Filter *.dll
$dlls_to_copy = @()
foreach($available_dll in $available_dlls)
{
if($dll_array.Contains($available_dll.Name))
{
$dlls_to_copy += $available_dll
}
}
# Recursively get remaining dependencies
$last_count = 0
while($last_count -ne $dlls_to_copy.Count)
{
$last_count = $dlls_to_copy.Count
foreach($dll_to_copy in $dlls_to_copy)
{
$potential_dlls = Parse-DumpBin $dll_to_copy.FullName
foreach($available_dll in $available_dlls)
{
if($potential_dlls.Contains($available_dll.Name) -and -not $dlls_to_copy.Name.Contains($available_dll.Name))
{
$dlls_to_copy += $available_dll
}
}
}
}
# Copy determined dependencies
foreach($dll_to_copy in $dlls_to_copy)
{
cp -Force $dll_to_copy.FullName Debug
}
#Overwrite debug DLLs
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\libpng16d.dll Debug\libpng16.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\fftw3f.dll Debug\fftw3f.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\glfw3.dll Debug\glfw3.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\jpeg62.dll Debug\jpeg62.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\tiffd.dll Debug\tiff.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\liblzma.dll Debug\liblzma.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\libcurl-d.dll Debug\libcurl.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\libusb-1.0.dll Debug\libusb-1.0.dll
cp -force ..\..\..\vcpkg\installed\$platform\debug\bin\pthreadVC3d.dll Debug\pthreadVC3.dll
}
#Remove stray DLLs from plugin folder, if they're there
rm Debug\plugins\fftw3f.dll | Out-Null
rm Debug\plugins\nng.dll | Out-Null
rm Debug\plugins\libusb-1.0.dll | Out-Null
rm Debug\plugins\portaudio.dll | Out-Null
rm Debug\plugins\zstd.dll | Out-Null
#Done
cd "$(Split-Path -Parent $MyInvocation.MyCommand.Path)\.."
Write-Output "Done!"