forked from Crockan/MercuryToolbox
181 lines
4.1 KiB
PowerShell
181 lines
4.1 KiB
PowerShell
function Get-ToolboxCommandNames {
|
|
return @(
|
|
'cjson',
|
|
'ison',
|
|
'isonl',
|
|
'zon',
|
|
'tonl',
|
|
'mhash',
|
|
'jsonlgrep',
|
|
'jsonshape',
|
|
'recent',
|
|
'pathshadow',
|
|
'portping',
|
|
'portunlock',
|
|
'msudo',
|
|
'asmtype',
|
|
'asmmember',
|
|
'asmref',
|
|
'asmapi',
|
|
'asmflow',
|
|
'llvmobjdump',
|
|
'llvmreadobj',
|
|
'llvmnm',
|
|
'peexports',
|
|
'peimports',
|
|
'pecalls',
|
|
'pesig',
|
|
'pestrrefs',
|
|
'drvshape',
|
|
'ioctlscan',
|
|
'binmeta',
|
|
'fileprobe',
|
|
'outline',
|
|
'codeshape',
|
|
'refs',
|
|
'snip',
|
|
'defsnip',
|
|
'ctxpack',
|
|
'chunkcat',
|
|
'hitsnip',
|
|
'diagpick',
|
|
'logshape',
|
|
'stringscan',
|
|
'toon',
|
|
'csvshape',
|
|
'sqliteshape',
|
|
'sqlshape',
|
|
'unityasset',
|
|
'unityprobe',
|
|
'unitydiag',
|
|
'envdiff',
|
|
'proctree',
|
|
'sysshape',
|
|
'runprobe',
|
|
'await',
|
|
'argv',
|
|
'config',
|
|
'gitshape',
|
|
'reposhape',
|
|
'dotnetshape',
|
|
'unlock'
|
|
)
|
|
}
|
|
|
|
function Get-ToolboxSlimBuildCommandNames {
|
|
return @(
|
|
'codeshape',
|
|
'refs',
|
|
'defsnip'
|
|
)
|
|
}
|
|
|
|
function Resolve-ToolboxProfileName {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Configuration
|
|
)
|
|
|
|
switch ($Configuration) {
|
|
'Debug' { return 'debug' }
|
|
'Release' { return 'release' }
|
|
'ReleaseFast' { return 'release-fast' }
|
|
'ReleaseSize' { return 'release-size' }
|
|
default { throw "Unsupported configuration: $Configuration" }
|
|
}
|
|
}
|
|
|
|
function Get-ToolboxBuildArguments {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Configuration,
|
|
[string[]]$Packages = @()
|
|
)
|
|
|
|
$arguments = @('build')
|
|
if ($Packages.Count -gt 0) {
|
|
foreach ($package in $Packages) {
|
|
$arguments += @('-p', $package)
|
|
}
|
|
}
|
|
else {
|
|
$arguments += '--workspace'
|
|
}
|
|
|
|
switch ($Configuration) {
|
|
'Release' {
|
|
$arguments += '--release'
|
|
}
|
|
'ReleaseFast' {
|
|
$arguments += @('--profile', 'release-fast')
|
|
}
|
|
'ReleaseSize' {
|
|
$arguments += @('--profile', 'release-size')
|
|
}
|
|
}
|
|
|
|
return $arguments
|
|
}
|
|
|
|
function Format-ToolboxNativeCommand {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$FilePath,
|
|
[Parameter(Mandatory = $true)]
|
|
[string[]]$ArgumentList
|
|
)
|
|
|
|
$parts = [System.Collections.Generic.List[string]]::new()
|
|
foreach ($part in @($FilePath) + $ArgumentList) {
|
|
if ([string]::IsNullOrEmpty($part)) {
|
|
$parts.Add("''")
|
|
continue
|
|
}
|
|
|
|
if ($part.IndexOfAny([char[]]" `t`r`n'`"") -ge 0) {
|
|
$parts.Add("'" + $part.Replace("'", "''") + "'")
|
|
continue
|
|
}
|
|
|
|
$parts.Add($part)
|
|
}
|
|
|
|
return ($parts -join ' ')
|
|
}
|
|
|
|
function Invoke-StrictToolboxNative {
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$FilePath,
|
|
[Parameter(Mandatory = $true)]
|
|
[string[]]$ArgumentList
|
|
)
|
|
|
|
& $FilePath @ArgumentList
|
|
if ($LASTEXITCODE -ne 0) {
|
|
$commandLine = Format-ToolboxNativeCommand -FilePath $FilePath -ArgumentList $ArgumentList
|
|
throw "Command failed with exit code ${LASTEXITCODE} in '$((Get-Location).Path)': $commandLine"
|
|
}
|
|
}
|
|
|
|
function Invoke-ToolboxBuild {
|
|
param(
|
|
[string]$CargoPath = 'cargo',
|
|
[ValidateSet('Debug', 'Release', 'ReleaseFast', 'ReleaseSize')]
|
|
[string]$Configuration = 'ReleaseFast',
|
|
[switch]$SkipSlimBinaryRebuild
|
|
)
|
|
|
|
Invoke-StrictToolboxNative -FilePath $CargoPath -ArgumentList (Get-ToolboxBuildArguments -Configuration $Configuration)
|
|
|
|
if ($SkipSlimBinaryRebuild -or $Configuration -eq 'Debug') {
|
|
return
|
|
}
|
|
|
|
foreach ($commandName in Get-ToolboxSlimBuildCommandNames) {
|
|
Invoke-StrictToolboxNative -FilePath $CargoPath -ArgumentList (
|
|
Get-ToolboxBuildArguments -Configuration $Configuration -Packages @($commandName)
|
|
)
|
|
}
|
|
}
|