azure-sdk-for-cpp/eng/scripts/Get-BinarySizes.ps1
Scott Beddall 3658df22db
1ES Template Refactor (#5441)
* All eng/ folder changes necessary to enable 1es-templates for the azure-sdk-for-cpp
* Includes updates to all ci.yml files to reflect new syntax requirements from 1es-template changes to archetype-sdk-client
2024-03-12 15:20:45 -07:00

199 lines
5.0 KiB
PowerShell

[CmdletBinding()]
param(
[Parameter()]
[string] $BuildDirectory = "$PSScriptRoot/../../build/",
[Parameter()]
[string] $ServiceDirectory = "*",
[Parameter()]
[string] $OsVMImage,
[Parameter()]
[string] $CmakeArgs,
[Parameter()]
[string] $CmakeEnvArg,
[Parameter()]
[string] $BuildArgs,
[Parameter()]
[string] $VcpkgArgs,
[Parameter()]
[string] $Job,
[Parameter()]
[string] $BuildReason,
[Parameter()]
[string] $SourceBranch,
[Parameter()]
[switch] $CI = ($null -ne $env:SYSTEM_TEAMPROJECTID),
[Parameter()]
[hashtable]$ExtraLabels = @{}
)
. $PSScriptRoot/../common/scripts/common.ps1
function setEnvVar($key, $value) {
Write-Host "##vso[task.setvariable variable=_$key;issecret=true;]$value"
}
function getTargetOs {
if ($OsVMImage -like 'macOS*') {
return $OsVMImage
}
if ($OsVMImage -eq "windows-2019" -or $OsVMImage.Contains("win-2019")) {
return "win-2019"
}
if ($OsVMImage -eq "windows-2022" -or $OsVMImage.Contains("win-2022")) {
return "win-2022"
}
if ($OsVMImage -in "MMSUbuntu18.04", "ubuntu-18.04", "azsdk-pool-mms-ubuntu-1804-1espt") {
return "ubuntu-18.04"
}
if ($OsVMImage -in "MMSUbuntu20.04", "ubuntu-20.04", "azsdk-pool-mms-ubuntu-2004-1espt") {
return "ubuntu-20.04"
}
if ($OsVMImage -in "MMSUbuntu22.04", "ubuntu-22.04", "azsdk-pool-mms-ubuntu-2204-1espt") {
return "ubuntu-22.04"
}
LogError "Could not infer target OS from " $OSVmImage
}
function getTargetArchitecture {
if ($OSVmImage -like 'macOS*') {
return "x64"
}
if ($env:CMAKE_GENERATOR_PLATFORM -and $env:CMAKE_GENERATOR_PLATFORM -eq "Win32") {
return "x86"
}
if ($env:CMAKE_GENERATOR_PLATFORM -and $env:CMAKE_GENERATOR_PLATFORM -eq "x64") {
return "x64"
}
# Most builds target x64 by default
return "x64"
}
function getToolChain {
if ($OSVmImage -like 'macOS*') {
return "AppleClang 12"
}
if ($OSVmImage -match "MMS\d{4}") {
return "MSVC"
}
if ($OSVmImage -match "windows-\d{4}" -or $OSVmImage -match "win-\d{4}") {
return "MSVC17"
}
if ($OSVmImage.Contains("Ubuntu") -or $OSVmImage.Contains("ubuntu")) {
if ($CmakeEnvArg.Contains('g++-5')) {
return 'g++-5'
} elseif ($env:CXX -and $env:CXX.Contains("g++8")) {
return 'g++-8'
} elseif ($env:CXX -and $env:CXX.Contains("g++-9")) {
return 'g++-9'
} elseif ($env:CXX -and $env:CXX.Contains("clang-11")) {
return 'clang-11'
}
return "g++-7"
}
LogError "Could not infer toolchain from " $OSVmImage and $CmakeEnvArg
}
function getTargetPlatform {
if ($OSVmImage -like 'macOS*') {
return "macos"
}
if ($OSVmImage -match 'MMS\d{4}' -or $OsVMImage -match "windows-\d{4}" -or $OsVMImage -match "win-\d{4}") {
if (!$env:CMAKE_SYSTEM_NAME -and !$CmakeArgs.Contains('WindowsStore')) {
return 'win32'
} elseif ($env:CMAKE_SYSTEM_NAME -eq 'WindowsStore' -or $CmakeArgs.Contains('WindowsStore')) {
return 'uwp'
}
}
if ($OSVmImage.Contains("Ubuntu") -or $OSVmImage.Contains("ubuntu")) {
return 'linux'
}
LogError "Could not infer target platform from " $OSVmImage
}
function getBuildConfiguration {
if ($env:CMAKE_BUILD_TYPE) {
return $env:CMAKE_BUILD_TYPE
}
if ($BuildArgs.Contains("--config Debug")) {
return "Debug"
}
if ($BuildArgs.Contains("--config Release")) {
return "Release"
}
# Most builds default to Debug unless overridden by configuration variables
return "Debug"
}
# It's possible that due to external factors, the build directory doesn't exist.
if (Test-Path "$BuildDirectory/sdk/$ServiceDirectory") {
$searchPath = "$BuildDirectory/sdk/$ServiceDirectory/*/*.a"
if ($IsWindows) {
$searchPath = "$BuildDirectory/sdk/$ServiceDirectory/*/*/*.lib"
}
$binaries = Get-ChildItem -Path $searchPath
}
$buildLabels = @{
TargetOs = getTargetOs;
Toolchain = getToolChain;
BuildConfig = getBuildConfiguration;
TargetArchitecture = getTargetArchitecture;
TargetPlatform = getTargetPlatform;
}
if ($CI) {
foreach ($binary in $binaries) {
$metricLogObject = @{
name = "BinarySize";
value = $binary.Length
timestamp = (Get-Date -AsUTC).ToString("o")
labels = @{
Job = $Job;
BuildReason = $BuildReason;
SourceBranch = $SourceBranch;
BinaryName = $binary.Name;
} + $buildLabels + $ExtraLabels
}
$metricLogJson = ConvertTo-Json $metricLogObject -Compress
Write-Host "logmetric: $metricLogJson"
}
}
$binaries `
| Format-Table -Property Name, @{Name="SizeInKB"; Expression={"{0:N2}" -f ($_.Length / 1KB)}; Alignment='right'} `
| Out-String `
| Write-Host
return $binaries