Provisioning: Add Windows 11 on ARM as non-blocking in CI

Visual Studio 2022 is the first msvc having natively support for
building and debugging ARM64 apps. [CI Platforms]

Provisioning needed to take new Get-CpuArchitecture
helpers.ps1 function into use in several installations.

Requirements for other branches
- Get-CpuArchitecture helpers.ps1 function
- Skip qtwebengine with Windows 11 ARM (QTBUG-124632)

List of excluded installations in Windows on ARM:

- Could be added later
  - MinGW - QTQAINFRA-6079
  - DirectX SDK for RTA
  - libclang
  - mcuexpresso
  - fbx for msvc2022
  - Ruby
  - For python
    - conan
    - emsdk

- Not supported yet
  - FFmpeg
  - Msys2 (for FFmpeg QTBUG-124399)
  - MySQL
  - PostgreSQL
  - Java JDK
  - Strawberry Perl

Task-number: QTQAINFRA-6109
Task-number: QTQAINFRA-5855
Pick-to: 6.7
Change-Id: I4130e78add53f8a6e05eb41b7617b3f9ca802178
Reviewed-by: Simo Fält <simo.falt@qt.io>
This commit is contained in:
Tero Heikkinen
2023-11-01 12:52:36 +02:00
parent 7aa7c459ac
commit 3ac3b7d9f3
68 changed files with 746 additions and 70 deletions

View File

@@ -6,18 +6,40 @@
$majorminorversion = "3.27"
$version = "3.27.7"
$zip = Get-DownloadLocation ("cmake-" + $version + "-windows-i386.zip")
$officialurl = "https://cmake.org/files/v" + $majorminorversion + "/cmake-" + $version + "-windows-i386.zip"
$cachedurl = "\\ci-files01-hki.ci.qt.io\provisioning\cmake\cmake-" + $version + "-windows-i386.zip"
$cpu_arch = Get-CpuArchitecture
Write-Host "Installing CMake for architecture $cpu_arch"
switch ($cpu_arch) {
arm64 {
$arch = "arm64"
$sha1 = "52ee08671dcb478c5ec6e862f41717f65047c598"
$majorminorversion = "3.29"
$version = "3.29.2"
Break
}
x64 {
$arch = "i386"
$sha1 = "b6147215a5f9cd1138b012265229fbf2224d02c6"
}
default {
throw "Unknown architecture $cpu_arch"
}
}
$filename = "cmake-" + $version + "-windows-" + $arch
$filename_zip = $filename + ".zip"
$zip = Get-DownloadLocation ($filename_zip)
$officialurl = "https://cmake.org/files/v" + $majorminorversion + "/" + $filename_zip
$cachedurl = "https://ci-files01-hki.ci.qt.io/input/cmake/" + $filename_zip
Write-Host "Removing old cmake"
Remove "C:\CMake"
Download $officialurl $cachedurl $zip
Verify-Checksum $zip "b6147215a5f9cd1138b012265229fbf2224d02c6"
Verify-Checksum $zip $sha1
Extract-7Zip $zip C:
$defaultinstallfolder = "C:\cmake-" + $version + "-windows-i386"
$defaultinstallfolder = "C:\" + $filename
Rename-Item $defaultinstallfolder C:\CMake
Add-Path "C:\CMake\bin"

View File

@@ -1,4 +1,6 @@
. "$PSScriptRoot\helpers.ps1"
# Disable Windows Module Installer (Trusted Installer).
# Trusted Installe enables installation, modification, and removal of Windows updates and optional components.
# If this service is disabled, install or uninstall of Windows updates might fail for this computer.
sc.exe config TrustedInstaller start=disabled
Run-Executable "sc.exe" "config TrustedInstaller start=disabled"

View File

@@ -2,8 +2,29 @@
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
. "$PSScriptRoot\helpers.ps1"
Start-Process -NoNewWindow -FilePath "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ngen.exe" -ArgumentList ExecuteQueuedItems -Wait
if( (is64bitWinHost) -eq 1 ) {
Start-Process -NoNewWindow -FilePath "C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" -ArgumentList ExecuteQueuedItems -Wait
function ngen() {
Param (
[ValidateSet("Framework","Framework64","FrameworkArm64")][string]$framework
)
Start-Process -NoNewWindow -FilePath "C:\WINDOWS\Microsoft.NET\$framework\v4.0.30319\ngen.exe" -ArgumentList ExecuteQueuedItems -Wait
}
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
ngen("FrameworkArm64")
Break
}
x64 {
ngen("Framework")
ngen("Framework64")
Break
}
x86 {
ngen("Framework")
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}

View File

@@ -25,7 +25,6 @@ Remove $download_location
$config = Get-Content "$PSScriptRoot\..\shared\ffmpeg_config_options.txt"
Write-Host "FFmpeg configuration $config"
function InstallFfmpeg {
Param (
[string]$buildSystem,

View File

@@ -5,16 +5,33 @@
# This script will install Notepad++
$version = "7.3"
if (Is64BitWinHost) {
$arch = ".x64"
$sha1 = "E7306DF1D6E81801FB4BE0868610DB70E979B0AA"
} else {
$arch = ""
$sha1 = "d4c403675a21cc381f640b92e596bae3ef958dc6"
$version = "8.6.5"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$arch = ".arm64"
$sha1 = "eecb8a6b6ed3cb1e467d227b8b7751283c35434e"
Break
}
x64 {
$arch = ".x64"
$sha1 = "a0bf3fb15015bc1fbcb819d9a9c61f4762f4a10f"
Break
}
x86 {
$arch = ""
$sha1 = "ba940c6b526da1ce127f43b835b4d8c9d5c4b59c"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
$url_cache = "\\ci-files01-hki.ci.qt.io\provisioning\windows\npp." + $version + ".Installer" + $arch + ".exe"
$url_official = "https://notepad-plus-plus.org/repository/7.x/" + $version + "/npp." + $version + ".Installer" + $arch + ".exe"
$filename_exe = "npp." + $version + ".Installer" + $arch + ".exe"
$url_cache = "https://ci-files01-hki.ci.qt.io/input/windows/" + $filename_exe
$url_official = "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v" + $version + "/" + $filename_exe
$nppPackage = "C:\Windows\Temp\npp-$version.exe"
Download $url_official $url_cache $nppPackage

View File

@@ -7,19 +7,31 @@
$version = "v9.2.2.0p1-Beta"
$temp = "$env:tmp"
if (Is64BitWinHost) {
$zipPackage = "OpenSSH-Win64"
$url_cache = "http://ci-files01-hki.ci.qt.io/input/windows/" + $zipPackage + ".zip"
$url_official = "https://github.com/PowerShell/Win32-OpenSSH/releases/download/" + $version + "/" + $zipPackage
$sha1 = "D3EA57408C0D3CF83167DF39639FED5397358B79"
} else {
$zipPackage = "OpenSSH-Win32"
$url_cache = "http://ci-files01-hki.ci.qt.io/input/windows/openssh/" + $version + "/" + $zipPackage + ".zip"
$url_official = "https://github.com/PowerShell/Win32-OpenSSH/releases/download/" + $version + "/" + $zipPackage
$sha1 = "4642C62F72C108C411E27CE282A863791B63329B"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$zipPackage = "OpenSSH-ARM64"
$sha1 = "ca3e8f44a550b7ae71c8e122acd4ed905d66feb0"
Break
}
x64 {
$zipPackage = "OpenSSH-Win64"
$sha1 = "1397d40d789ae0911b3cc818b9dcd9321fed529b"
Break
}
x86 {
$zipPackage = "OpenSSH-Win32"
$sha1 = "4642C62F72C108C411E27CE282A863791B63329B"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
Write-Host "Fetching $zipPackage $version..."
$url_cache = "http://ci-files01-hki.ci.qt.io/input/windows/openssh/" + $version + "/" + $zipPackage + ".zip"
$url_official = "https://github.com/PowerShell/Win32-OpenSSH/releases/download/" + $version + "/" + $zipPackage + ".zip"
Download $url_official $url_cache "$temp\$zipPackage"
Verify-Checksum "$temp\$zipPackage" $sha1

View File

@@ -8,12 +8,26 @@
$version = "23.01"
$nonDottedVersion = "2301"
if (Is64BitWinHost) {
$arch = "-x64"
$sha1 = "7DF28D340D7084647921CC25A8C2068BB192BDBB"
} else {
$arch = ""
$sha1 = "D5D00E6EA8B8E68CE7A704FD478DC950E543C25C"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$arch = "-arm64"
$sha1 = "be65c2ea6119c04945c66b13413892f2bb03d9a7"
Break
}
x64 {
$arch = "-x64"
$sha1 = "7DF28D340D7084647921CC25A8C2068BB192BDBB"
Break
}
x86 {
$arch = ""
$sha1 = "D5D00E6EA8B8E68CE7A704FD478DC950E543C25C"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
$url_cache = "https://ci-files01-hki.ci.qt.io/input/windows/7z" + $nonDottedVersion + $arch + ".exe"

View File

@@ -7,28 +7,53 @@
# Install a specific version of Telegraf
# https://github.com/influxdata/telegraf/releases
$version = "1.12.6"
$version = "1.12.6" # TODO: ARM is not supported in this version
$has_telegraf_ver = $false
if (Is64BitWinHost) {
$arch = "amd64"
$sha256 = "5d025d85070e8c180c443580afa8a27421a7bbcf14b5044894e9f3298d0ce97a"
} else {
$arch = "i386"
$sha256 = "5178a0bdaab448c2ef965b0e36f835849cea731ccd87c4a4527f0f05fbbdf271"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$arch = "arm64"
$sha256 = "5925642aad9a35886b172050203287cf33078313f543021781885ed94d9cbcff"
$version = "1.29.4" # TODO: ARM needs this, update this to all
$has_telegraf_ver = $true
Break
}
x64 {
$arch = "amd64"
$sha256 = "5d025d85070e8c180c443580afa8a27421a7bbcf14b5044894e9f3298d0ce97a"
Break
}
x86 {
$arch = "i386"
$sha256 = "5178a0bdaab448c2ef965b0e36f835849cea731ccd87c4a4527f0f05fbbdf271"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
$filename = "telegraf-" + $version + "_windows_" + $arch + ".zip"
$telegraf_ver = "telegraf-" + $version
$filename_zip = $telegraf_ver + "_windows_" + $arch + ".zip"
$url_cache = "http://ci-files01-hki.ci.qt.io/input/telegraf/" + $filename
$url_official = "https://dl.influxdata.com/telegraf/releases/" + $filename
$tempfile = "C:\Windows\Temp\" + $filename
$url_cache = "http://ci-files01-hki.ci.qt.io/input/telegraf/" + $filename_zip
$url_official = "https://dl.influxdata.com/telegraf/releases/" + $filename_zip
$tempfile = "C:\Windows\Temp\" + $filename_zip
Write-Host "Fetching Telegraf $version..."
Download $url_official $url_cache $tempfile
Verify-Checksum $tempfile $sha256 sha256
Write-Host "Installing telegraf.exe under C:\Utils\telegraf"
Extract-7Zip $tempfile C:\Utils "telegraf"
if ($has_telegraf_ver -eq $true) {
Extract-7Zip $tempfile C:\Utils
Rename-Item "C:\Utils\$telegraf_ver" "C:\Utils\telegraf"
} else {
Extract-7Zip $tempfile C:\Utils "telegraf"
}
Copy-Item "$PSScriptRoot\..\..\common\windows\telegraf-coin.conf" C:\telegraf-coin.conf
. "$PSScriptRoot\telegraf_password.ps1"

View File

@@ -1,17 +1,43 @@
. "$PSScriptRoot\helpers.ps1"
$zip = Get-DownloadLocation "ninja-1.10.2-win-x86.zip"
Download http://master.qt.io/development_releases/prebuilt/ninja/v1.10.2/ninja-win-x86.zip \\ci-files01-hki.ci.qt.io\provisioning\ninja\ninja-1.10.2-win-really-x86.zip $zip
Verify-Checksum $zip "1a22ee9269df8ed69c4600d7ee4ccd8841bb99ca"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$arch = "arm64"
$version = "1.12.0"
$longPathFixed = $true # fixed https://github.com/ninja-build/ninja/pull/2225 in 1.12.0
$zip = Get-DownloadLocation "ninja-$version-win-$arch.zip"
$internalUrl = "https://ci-files01-hki.ci.qt.io/input/ninja/v$version/ninja-win$arch.zip"
$externalUrl = "https://github.com/ninja-build/ninja/releases/download/v$version/ninja-win$arch.zip"
$sha1 = "51bf1bac149ae1e3d1572fa9fa87d6431dbddc8b"
Break
}
x64 {
$arch = "amd64"
$version = "1.10.2"
$longPathFixed = $false
$zip = Get-DownloadLocation "ninja-$version-win-x86.zip"
# TODO: Fix this QTQAINFRA-6296
$internalUrl = "http://master.qt.io/development_releases/prebuilt/ninja/v$version/ninja-win-x86.zip"
$externalUrl = "\\ci-files01-hki.ci.qt.io\provisioning\ninja\ninja-$version-win-really-x86.zip"
$sha1 = "1a22ee9269df8ed69c4600d7ee4ccd8841bb99ca"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
Download $internalUrl $externalUrl $zip
Verify-Checksum $zip $sha1
Extract-7Zip $zip C:\Utils\Ninja
Remove "$zip"
Add-Path "C:\Utils\Ninja"
Write-Output "Ninja = 1.10.2" >> ~/versions.txt
Write-Output "Ninja ($arch) = $version" >> ~/versions.txt
if ( -Not $longPathFixed ) {
$manifest = @"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -33,3 +59,5 @@ Invoke-MtCommand "C:\Program Files (x86)\Microsoft Visual Studio\2019\Profession
} else {
Invoke-MtCommand "C:\Program Files (x86)\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64 $manifest "C:\Utils\Ninja\ninja.exe"
}
}

View File

@@ -7,12 +7,27 @@
# Needed by QtWebengine
$version = "20.7.0"
if (Is64BitWinHost) {
$arch = "x64"
$sha256 = "b3e5cbf8e247c75f9ddd235d49cfe40f25dde65bdd0eec4cefbca2805d80376b"
} else {
$arch = "x86"
$sha256 = "d6a3c63a5ae71374c144a33c418ab96be497b08df0e9f51861a78127db03aeb5"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
$arch = "arm64"
$sha256 = "ab4b990c2c1d4a55d565813e7a2f71669dc4d1005faa47185d30bde4416975ab"
$version = "20.12.2" # TODO: ARM starts with newer, LTS
Break
}
x64 {
$arch = "x64"
$sha256 = "b3e5cbf8e247c75f9ddd235d49cfe40f25dde65bdd0eec4cefbca2805d80376b"
Break
}
x86 {
$arch = "x86"
$sha256 = "d6a3c63a5ae71374c144a33c418ab96be497b08df0e9f51861a78127db03aeb5"
Break
}
default {
throw "Unknown architecture $cpu_arch"
}
}
$package = "C:\Windows\temp\nodejs-$version.7z"

View File

@@ -35,10 +35,29 @@ Verify-Checksum $zip_package $sha1
Extract-7Zip $zip_package C:\
Remove $zip_package
Set-EnvironmentVariable "OPENSSL_ROOT_DIR_x64_arm64" "$installFolder"
Set-EnvironmentVariable "OPENSSL_CONF_x64_arm64" "$installFolder\bin\openssl.cfg"
Set-EnvironmentVariable "OPENSSL_INCLUDE_x64_arm64" "$installFolder\include"
Set-EnvironmentVariable "OPENSSL_LIB_x64_arm64" "$installFolder\lib"
$cpu_arch = Get-CpuArchitecture
switch ($cpu_arch) {
arm64 {
# For native arm64
Set-EnvironmentVariable "OPENSSL_ROOT_DIR_arm64" "$installFolder"
Set-EnvironmentVariable "OPENSSL_CONF_arm64" "$installFolder\bin\openssl.cfg"
Set-EnvironmentVariable "OPENSSL_INCLUDE_arm64" "$installFolder\include"
Set-EnvironmentVariable "OPENSSL_LIB_arm64" "$installFolder\lib"
Break
}
x64 {
# For cross-compiling x64_arm64
Set-EnvironmentVariable "OPENSSL_ROOT_DIR_x64_arm64" "$installFolder"
Set-EnvironmentVariable "OPENSSL_CONF_x64_arm64" "$installFolder\bin\openssl.cfg"
Set-EnvironmentVariable "OPENSSL_INCLUDE_x64_arm64" "$installFolder\include"
Set-EnvironmentVariable "OPENSSL_LIB_x64_arm64" "$installFolder\lib"
}
default {
throw "Unknown architecture $cpu_arch"
}
}
Prepend-Path "$installFolder\bin"
# Store version information to ~/versions.txt, which is used to print version information to provision log.
Write-Output "OpenSSL ARM= $version" >> ~/versions.txt

View File

@@ -16,13 +16,26 @@ param(
$package = "C:\Windows\temp\python-$version.exe"
# check bit version
if ( $archVer -eq 64 ) {
Write-Host "Installing 64 bit Python"
$externalUrl = "https://www.python.org/ftp/python/$version/python-$version-amd64.exe"
$internalUrl = "http://ci-files01-hki.ci.qt.io/input/windows/python-$version-amd64.exe"
} else {
$externalUrl = "https://www.python.org/ftp/python/$version/python-$version.exe"
$internalUrl = "http://ci-files01-hki.ci.qt.io/input/windows/python-$version.exe"
$cpu_arch = Get-CpuArchitecture
Write-Host "Installing $cpu_arch Python"
switch ($cpu_arch) {
arm64 {
$externalUrl = "https://www.python.org/ftp/python/$version/python-$version-arm64.exe"
$internalUrl = "http://ci-files01-hki.ci.qt.io/input/windows/python-$version-arm64.exe"
Break
}
x64 {
if ($archVer -eq "64") {
$externalUrl = "https://www.python.org/ftp/python/$version/python-$version-amd64.exe"
$internalUrl = "http://ci-files01-hki.ci.qt.io/input/windows/python-$version-amd64.exe"
} else {
$externalUrl = "https://www.python.org/ftp/python/$version/python-$version.exe"
$internalUrl = "http://ci-files01-hki.ci.qt.io/input/windows/python-$version.exe"
}
}
default {
throw "Unknown architecture $cpu_arch"
}
}
Write-Host "Fetching from URL..."