aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Edelev <alexey.edelev@qt.io>2023-05-11 14:57:12 +0200
committerSamuel Mira <samuel.mira@qt.io>2023-05-17 22:55:28 +0000
commit9b481175c47d93f361bdec77de5b552365708413 (patch)
treed04fba91c402fded10778816b41bb5718357113d
parente4447d0b55d556ba0551c9665093b229c4e18b14 (diff)
Uninify MSVC version that is used in provisioning
We pick the oldest build tools we can find because there is lower chance that the produced binaries will be incomaptible with the newer version of MSVC. With the current provisioning design we also cannot change the MSVC version for the each package on demand. Once Enter-VsDevShell is called it litters the powershell environment and blocks the use of Enter-VsDevShell second time. It could be better to run each .ps1 file in own instance of powershell to avoid mixing build environment. Amends f58afd5476ab6695961ef127da4427371004723c Change-Id: Ie752cfc8b69ed985e61ec16209007dd586611866 Reviewed-by: Samuel Mira <samuel.mira@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit 84df93d37e8e56028ced3d8b2fac9777065c152f) Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
-rw-r--r--coin/provisioning/common/windows/grpc.ps126
-rw-r--r--coin/provisioning/common/windows/helpers.ps132
-rw-r--r--coin/provisioning/common/windows/install-ffmpeg.ps111
-rw-r--r--coin/provisioning/common/windows/protobuf.ps126
4 files changed, 36 insertions, 59 deletions
diff --git a/coin/provisioning/common/windows/grpc.ps1 b/coin/provisioning/common/windows/grpc.ps1
index 5e0e1bf9..49fe945f 100644
--- a/coin/provisioning/common/windows/grpc.ps1
+++ b/coin/provisioning/common/windows/grpc.ps1
@@ -144,31 +144,7 @@ $env:Path = $oldPath
### MSVC
-# Add cl to path if it is not already there
-if (!(Get-Command cl.exe -ErrorAction SilentlyContinue)) {
- $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
- $vc_component = "Microsoft.VisualStudio.Component.VC.CoreIde"
- # We pick the oldest build tools we can find and use that to be compatible with it and any newer version:
- # If MSVC has an ABI break this will stop working, and yet another build must be added.
- $vs_location = (& $vswhere -nologo -products * -requires $vc_component -sort -format value -property installationPath | Select-Object -Last 1)
- $vcvars_location = Join-Path $vs_location "VC\Auxiliary\Build\"
-
- Push-Location $vcvars_location
-
- # This snippet was stolen from https://stackoverflow.com/a/2124759
- # Grabs all the environment variables that the script has set and assigns it
- # to environment variables in PowerShell (calling batch files creates a
- # cmd.exe instance which does not propagate environment variables)
- cmd /c "vcvarsall.bat $env:PROCESSOR_ARCHITECTURE & set" |
- ForEach-Object {
- if ($_ -match "=") {
- $v = $_.Split("=");
- Set-Item -Force -Path "ENV:\$($v[0])" -Value "$($v[1])"
- }
- }
-
- Pop-Location
-}
+EnterVSDevShell
build-install-grpc -CC "cl" -CXX "cl" -BuildType "Release" -Postfix "msvc"
diff --git a/coin/provisioning/common/windows/helpers.ps1 b/coin/provisioning/common/windows/helpers.ps1
index 1967b02a..8dd3721a 100644
--- a/coin/provisioning/common/windows/helpers.ps1
+++ b/coin/provisioning/common/windows/helpers.ps1
@@ -274,3 +274,35 @@ function DeleteSchedulerTask {
Write-Host "Disabling $Task from Task Scheduler"
SCHTASKS /DELETE /TN "Microsoft\Windows\$Task" /F
}
+
+function GetVSPath {
+ Param (
+ [string]$VSWhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe",
+ [string]$Component = "Microsoft.VisualStudio.Component.VC.Tools.x86.x64"
+ )
+
+ return (& $VSWhere -nologo -latest -products * -requires $Component -property installationPath)
+}
+
+function EnterVSDevShell {
+ # Add cl to path if it is not already there.
+ if (Get-Command cl.exe -ErrorAction SilentlyContinue) {
+ return $true
+ }
+
+ $vsWere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
+ $vcComponent = "Microsoft.VisualStudio.Component.VC.CoreIde"
+ # We pick the oldest build tools we can find and use that to be compatible with it and any newer version:
+ # If MSVC has an ABI break this will stop working, and yet another build must be added.
+ $VSPath = (& $vsWere -nologo -products * -requires $vcComponent -sort -format value -property installationPath | Select-Object -Last 1)
+
+ Write-Host "Enter VisualStudio developer shell"
+ try {
+ Import-Module "$VSPath\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
+ Enter-VsDevShell -VsInstallPath $VSPath -DevCmdArguments "-arch=x64 -no_logo"
+ } catch {
+ Write-Host "Failed to enter VisualStudio DevShell"
+ return $false
+ }
+ return $true
+}
diff --git a/coin/provisioning/common/windows/install-ffmpeg.ps1 b/coin/provisioning/common/windows/install-ffmpeg.ps1
index a608bdba..72c406f9 100644
--- a/coin/provisioning/common/windows/install-ffmpeg.ps1
+++ b/coin/provisioning/common/windows/install-ffmpeg.ps1
@@ -107,15 +107,8 @@ function InstallMingwFfmpeg {
function InstallMsvcFfmpeg {
- $vsPath = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional"
- #$vsPath = "C:\Program Files\Microsoft Visual Studio\2022\Professional"
-
- Write-Host "Enter VisualStudio developer shell"
- try {
- Import-Module "$vsPath\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
- Enter-VsDevShell -VsInstallPath $vsPath -DevCmdArguments "-arch=x64 -no_logo"
- } catch {
- Write-Host "Failed to enter VisualStudio DevShell"
+ $result = EnterVSDevShell
+ if (-Not $result) {
return $false
}
diff --git a/coin/provisioning/common/windows/protobuf.ps1 b/coin/provisioning/common/windows/protobuf.ps1
index 306d3397..910be44b 100644
--- a/coin/provisioning/common/windows/protobuf.ps1
+++ b/coin/provisioning/common/windows/protobuf.ps1
@@ -104,31 +104,7 @@ $env:Path = $oldPath
### MSVC
-# Add cl to path if it is not already there
-if (!(Get-Command cl.exe -ErrorAction SilentlyContinue)) {
- $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
- $vc_component = "Microsoft.VisualStudio.Component.VC.CoreIde"
- # We pick the oldest build tools we can find and use that to be compatible with it and any newer version:
- # If MSVC has an ABI break this will stop working, and yet another build must be added.
- $vs_location = (& $vswhere -nologo -products * -requires $vc_component -sort -format value -property installationPath | Select-Object -Last 1)
- $vcvars_location = Join-Path $vs_location "VC\Auxiliary\Build\"
-
- Push-Location $vcvars_location
-
- # This snippet was stolen from https://stackoverflow.com/a/2124759
- # Grabs all the environment variables that the script has set and assigns it
- # to environment variables in PowerShell (calling batch files creates a
- # cmd.exe instance which does not propagate environment variables)
- cmd /c "vcvarsall.bat $env:PROCESSOR_ARCHITECTURE & set" |
- ForEach-Object {
- if ($_ -match "=") {
- $v = $_.Split("=");
- Set-Item -Force -Path "ENV:\$($v[0])" -Value "$($v[1])"
- }
- }
-
- Pop-Location
-}
+EnterVSDevShell
# We pass along an extra argument to stop protobuf linking with the static runtime
build-install-protobuf -CC "cl" -CXX "cl" -BuildType "Release" -Postfix "msvc" -ExtraArguments @("-Dprotobuf_MSVC_STATIC_RUNTIME=OFF")