56 lines
1.7 KiB
PowerShell
56 lines
1.7 KiB
PowerShell
param(
|
|
[string]$DllPath = "open_wrapper/lib/open.dll",
|
|
[string]$OutputLibPath = "",
|
|
[ValidateSet("x64", "x86")]
|
|
[string]$Machine = "x64"
|
|
)
|
|
|
|
$errorActionPreference = "Stop"
|
|
|
|
function Resolve-Tool($name) {
|
|
$cmd = Get-Command $name -ErrorAction SilentlyContinue
|
|
if (-not $cmd) {
|
|
throw "Could not find '$name' on PATH. Run this script from the Visual Studio Developer Command Prompt or add $name.exe to PATH."
|
|
}
|
|
return $cmd.Path
|
|
}
|
|
|
|
$dumpbin = Resolve-Tool "dumpbin.exe"
|
|
$libExe = Resolve-Tool "lib.exe"
|
|
|
|
if (-not (Test-Path $DllPath)) {
|
|
throw "DLL not found: $DllPath"
|
|
}
|
|
|
|
$dllFullPath = (Get-Item $DllPath).FullName
|
|
$workDir = Split-Path $dllFullPath -Parent
|
|
|
|
if ([string]::IsNullOrWhiteSpace($OutputLibPath)) {
|
|
$dllBase = [System.IO.Path]::GetFileNameWithoutExtension($dllFullPath)
|
|
$OutputLibPath = [System.IO.Path]::Combine($workDir, "$dllBase.lib")
|
|
}
|
|
|
|
$libName = [System.IO.Path]::GetFileNameWithoutExtension($OutputLibPath)
|
|
$exportsFile = Join-Path $workDir "$libName.exports"
|
|
$defFile = Join-Path $workDir "$libName.def"
|
|
|
|
Write-Host "Generating exports list from $dllFullPath ..."
|
|
& $dumpbin /nologo /exports $dllFullPath | Set-Content -Encoding UTF8 $exportsFile
|
|
|
|
$lines = Get-Content $exportsFile | Where-Object { $_ -match '^\s+\d+\s+[0-9A-F]+\s+[0-9A-F]+\s+\S+' }
|
|
$symbols = $lines | ForEach-Object {
|
|
($_.Trim() -split '\s+')[3]
|
|
}
|
|
|
|
if (-not $symbols) {
|
|
throw "Failed to parse exports from $dllFullPath. Inspect $exportsFile for details."
|
|
}
|
|
|
|
$defContent = @("LIBRARY $libName", "EXPORTS") + $symbols
|
|
$defContent | Set-Content -Encoding ASCII $defFile
|
|
|
|
Write-Host "Creating import library $OutputLibPath ..."
|
|
& $libExe /nologo /def:$defFile /machine:$Machine /out:$OutputLibPath
|
|
|
|
Write-Host "Done."
|