@@ -127,7 +127,6 @@ param(
127
127
[string ] $PinnedBuild = " " ,
128
128
[string ] $PinnedSHA256 = " " ,
129
129
[string ] $PinnedVersion = " " ,
130
- [string ] $PythonVersion = " 3.9.10" ,
131
130
[string ] $AndroidNDKVersion = " r26b" ,
132
131
[string ] $WinSDKVersion = " " ,
133
132
[switch ] $Android = $false ,
@@ -163,22 +162,6 @@ $env:SDKROOT = ""
163
162
$BuildArchName = $env: PROCESSOR_ARCHITEW6432
164
163
if ($null -eq $BuildArchName ) { $BuildArchName = $env: PROCESSOR_ARCHITECTURE }
165
164
166
- if ($PinnedBuild -eq " " ) {
167
- switch ($BuildArchName ) {
168
- " AMD64" {
169
- $PinnedBuild = " https://download.swift.org/swift-5.10.1-release/windows10/swift-5.10.1-RELEASE/swift-5.10.1-RELEASE-windows10.exe"
170
- $PinnedSHA256 = " 3027762138ACFA1BBE3050FF6613BBE754332E84C9EFA5C23984646009297286"
171
- $PinnedVersion = " 5.10.1"
172
- }
173
- " ARM64" {
174
- $PinnedBuild = " https://download.swift.org/development/windows10-arm64/swift-DEVELOPMENT-SNAPSHOT-2024-07-02-a/swift-DEVELOPMENT-SNAPSHOT-2024-07-02-a-windows10-arm64.exe"
175
- $PinnedSHA256 = " 037BDBF9D1A1A99D7156584948870A8A958FD27CC4FF5711691CC0A76F2E88F5"
176
- $PinnedVersion = " 0.0.0"
177
- }
178
- default { throw " Unsupported processor architecture" }
179
- }
180
- }
181
-
182
165
# Store the revision zero variant of the Windows SDK version (no-op if unspecified)
183
166
$WindowsSDKMajorMinorBuildMatch = [Regex ]::Match($WinSDKVersion , " ^\d+\.\d+\.\d+" )
184
167
$WinSDKVersionRevisionZero = if ($WindowsSDKMajorMinorBuildMatch.Success ) { $WindowsSDKMajorMinorBuildMatch.Value + " .0" } else { " " }
@@ -188,8 +171,82 @@ $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.e
188
171
$VSInstallRoot = & $vswhere - nologo - latest - products " *" - all - prerelease - property installationPath
189
172
$msbuild = " $VSInstallRoot \MSBuild\Current\Bin\$BuildArchName \MSBuild.exe"
190
173
191
- # Hoist to global scope as this is used in two sites.
174
+ # Update package hashes when changing versions
192
175
$WiXVersion = " 4.0.5"
176
+ $PythonVersion = " 3.9.10"
177
+ $WinFlexBisonVersion = " 2.5.25"
178
+
179
+ $Components = @ {
180
+ WiX = @ {
181
+ URL = " https://www.nuget.org/api/v2/package/wix/$WiXVersion "
182
+ Hash = " DF9BDB347183716F82EFE2CECB8C54BB3554AA907A69F47A41741D6FA4D0A754"
183
+ }
184
+ PythonAMD64 = @ {
185
+ URL = " https://www.nuget.org/api/v2/package/python/$PythonVersion "
186
+ Hash = " ac43b491e9488ac926ed31c5594f0c9409a21ecbaf99dc7a93f8c7b24cf85867"
187
+ }
188
+ PythonARM64 = @ {
189
+ URL = " https://www.nuget.org/api/v2/package/pythonarm64/$PythonVersion "
190
+ Hash = " 429ada77e7f30e4bd8ff22953a1f35f98b2728e84c9b1d006712561785641f69"
191
+ }
192
+ PinnedSwiftAMD64 = @ {
193
+ URL = " https://download.swift.org/swift-5.10.1-release/windows10/swift-5.10.1-RELEASE/swift-5.10.1-RELEASE-windows10.exe"
194
+ Hash = " 3027762138ACFA1BBE3050FF6613BBE754332E84C9EFA5C23984646009297286"
195
+ Version = " 5.10.1"
196
+ }
197
+ PinnedSwiftARM64 = @ {
198
+ URL = " https://download.swift.org/development/windows10-arm64/swift-DEVELOPMENT-SNAPSHOT-2024-07-02-a/swift-DEVELOPMENT-SNAPSHOT-2024-07-02-a-windows10-arm64.exe"
199
+ Hash = " 037BDBF9D1A1A99D7156584948870A8A958FD27CC4FF5711691CC0A76F2E88F5"
200
+ Version = " 0.0.0"
201
+ }
202
+ PinnedSwiftCustom = @ {
203
+ URL = $PinnedBuild
204
+ Hash = $PinnedSHA256
205
+ Version = $PinnedVersion
206
+ }
207
+ NDK = @ {
208
+ URL = " https://dl.google.com/android/repository/android-ndk-r26b-windows.zip"
209
+ Hash = " A478D43D4A45D0D345CDA6BE50D79642B92FB175868D9DC0DFC86181D80F691E"
210
+ }
211
+ WinFlexBison = @ {
212
+ URL = " https://github.com/lexxmark/winflexbison/releases/download/v$WinFlexBisonVersion /win_flex_bison-$WinFlexBisonVersion .zip"
213
+ Hash = " 8D324B62BE33604B2C45AD1DD34AB93D722534448F55A16CA7292DE32B6AC135"
214
+ }
215
+ GnuWin32Make = @ {
216
+ URL = " https://downloads.sourceforge.net/project/ezwinports/make-4.4.1-without-guile-w32-bin.zip"
217
+ Hash = " fb66a02b530f7466f6222ce53c0b602c5288e601547a034e4156a512dd895ee7"
218
+ }
219
+ packaging = @ {
220
+ URL = " https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl"
221
+ Hash = " 5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
222
+ }
223
+ distutils = @ {
224
+ # 'setuptools' provides 'distutils' module for Python 3.12+, required for SWIG support
225
+ # https://github.com/swiftlang/llvm-project/issues/9289
226
+ URL = " https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl"
227
+ Hash = " 35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"
228
+ }
229
+ psutil = @ {
230
+ URL = " https://files.pythonhosted.org/packages/11/91/87fa6f060e649b1e1a7b19a4f5869709fbf750b7c8c262ee776ec32f3028/psutil-6.1.0-cp37-abi3-win_amd64.whl"
231
+ Hash = " a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be"
232
+ }
233
+ unittest2 = @ {
234
+ URL = " https://files.pythonhosted.org/packages/72/20/7f0f433060a962200b7272b8c12ba90ef5b903e218174301d0abfd523813/unittest2-1.1.0-py2.py3-none-any.whl"
235
+ Hash = " 13f77d0875db6d9b435e1d4f41e74ad4cc2eb6e1d5c824996092b3430f088bb8"
236
+ }
237
+ }
238
+
239
+ if ($PinnedBuild -eq " " ) {
240
+ $PinnedSwift = " PinnedSwift$BuildArchName "
241
+ if ($Components [$PinnedSwift ] -eq $null ) {
242
+ throw " Unsupported processor architecture"
243
+ }
244
+ } else {
245
+ $PinnedSwift = " PinnedSwiftCustom"
246
+ if ($Components [$PinnedSwift ].Version -eq " " ) {
247
+ throw " PinnedVersion must be set"
248
+ }
249
+ }
193
250
194
251
# Avoid $env:ProgramFiles in case this script is running as x86
195
252
$UnixToolsBinDir = " $env: SystemDrive \Program Files\Git\usr\bin"
@@ -375,7 +432,7 @@ function Get-HostSwiftSDK() {
375
432
}
376
433
377
434
$NugetRoot = " $BinaryCache \nuget"
378
- $PinnedToolchain = [IO.Path ]::GetFileNameWithoutExtension($PinnedBuild )
435
+ $PinnedToolchain = [IO.Path ]::GetFileNameWithoutExtension($Components [ $PinnedSwift ].URL )
379
436
380
437
$LibraryRoot = " $ImageRoot \Library"
381
438
@@ -630,22 +687,26 @@ function Fetch-Dependencies {
630
687
631
688
$WebClient = New-Object Net.WebClient
632
689
633
- function DownloadAndVerify ($URL , $Destination , $Hash ) {
690
+ function DownloadAndVerify ($Component , $Destination ) {
634
691
if (Test-Path $Destination ) {
635
692
return
636
693
}
694
+ $Comp = $Components [$Component ]
695
+ if ($Comp -eq $null ) {
696
+ throw " Unknown component requested"
697
+ }
637
698
638
699
Write-Output " $Destination not found. Downloading ..."
639
700
if ($ToBatch ) {
640
701
Write-Output " md `" $ ( Split-Path - Path $Destination - Parent) `" "
641
- Write-Output " curl.exe -sL $URL -o $Destination "
642
- Write-Output " (certutil -HashFile $Destination SHA256) == $Hash || (exit /b)"
702
+ Write-Output " curl.exe -sL $ ( $Comp . URL) -o $Destination "
703
+ Write-Output " (certutil -HashFile $Destination SHA256) == $ ( $Comp . Hash) || (exit /b)"
643
704
} else {
644
705
New-Item - ItemType Directory (Split-Path - Path $Destination - Parent) - ErrorAction Ignore | Out-Null
645
- $WebClient.DownloadFile ($URL , $Destination )
706
+ $WebClient.DownloadFile ($Comp . URL , $Destination )
646
707
$SHA256 = Get-FileHash - Path $Destination - Algorithm SHA256
647
- if ($SHA256.Hash -ne $Hash ) {
648
- throw " SHA256 mismatch ($ ( $SHA256.Hash ) vs $Hash )"
708
+ if ($SHA256.Hash -ne $Comp . Hash ) {
709
+ throw " SHA256 mismatch ($ ( $SHA256.Hash ) vs $ ( $Comp . Hash) )"
649
710
}
650
711
}
651
712
}
@@ -716,28 +777,19 @@ function Fetch-Dependencies {
716
777
717
778
if ($SkipBuild -and $SkipPackaging ) { return }
718
779
719
- $WiXURL = " https://www.nuget.org/api/v2/package/wix/$WiXVersion "
720
- $WiXHash = " DF9BDB347183716F82EFE2CECB8C54BB3554AA907A69F47A41741D6FA4D0A754"
721
- DownloadAndVerify $WixURL " $BinaryCache \WiX-$WiXVersion .zip" $WiXHash
780
+ DownloadAndVerify " WiX" " $BinaryCache \WiX-$WiXVersion .zip"
722
781
Extract- ZipFile WiX- $WiXVersion.zip $BinaryCache WiX- $WiXVersion
723
782
724
783
if ($SkipBuild ) { return }
725
784
726
- DownloadAndVerify $PinnedBuild " $BinaryCache \$PinnedToolchain .exe" $PinnedSHA256
785
+ DownloadAndVerify $PinnedSwift " $BinaryCache \$PinnedToolchain .exe"
727
786
728
787
# TODO(compnerd) stamp/validate that we need to re-extract
729
788
New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \toolchains | Out-Null
730
789
Extract- Toolchain " $PinnedToolchain .exe" $BinaryCache $PinnedToolchain
731
790
732
791
function Download-Python ($ArchName ) {
733
- $PythonAMD64URL = " https://www.nuget.org/api/v2/package/python/$PythonVersion "
734
- $PythonAMD64Hash = " ac43b491e9488ac926ed31c5594f0c9409a21ecbaf99dc7a93f8c7b24cf85867"
735
-
736
- $PythonARM64URL = " https://www.nuget.org/api/v2/package/pythonarm64/$PythonVersion "
737
- $PythonARM64Hash = " 429ada77e7f30e4bd8ff22953a1f35f98b2728e84c9b1d006712561785641f69"
738
-
739
- DownloadAndVerify (Get-Variable - Name " Python${ArchName} URL" ).Value $BinaryCache \Python$ArchName - $PythonVersion.zip (Get-Variable - Name " Python${ArchName} Hash" ).Value
740
-
792
+ DownloadAndVerify " Python$ArchName " " $BinaryCache \Python$ArchName -$PythonVersion .zip"
741
793
if (-not $ToBatch ) {
742
794
Extract- ZipFile Python$ArchName - $PythonVersion.zip $BinaryCache Python$ArchName - $PythonVersion
743
795
}
@@ -755,20 +807,14 @@ function Fetch-Dependencies {
755
807
try {
756
808
Invoke-Program - OutNull $Python - c ' import packaging' * > $null
757
809
} catch {
758
- $WheelURL = " https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl"
759
- $WheelHash = " 5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"
760
- DownloadAndVerify $WheelURL " $BinaryCache \python\packaging-24.1-py3-none-any.whl" $WheelHash
810
+ DownloadAndVerify " packaging" " $BinaryCache \python\packaging-24.1-py3-none-any.whl"
761
811
Write-Output " Installing 'packaging-24.1-py3-none-any.whl' ..."
762
812
Invoke-Program - OutNull $Python ' -I' - m pip install " $BinaryCache \python\packaging-24.1-py3-none-any.whl" -- disable-pip - version- check
763
813
}
764
- # 'setuptools' provides 'distutils' module for Python 3.12+, required for SWIG support
765
- # https://github.com/swiftlang/llvm-project/issues/9289
766
814
try {
767
815
Invoke-Program - OutNull $Python - c ' import distutils' * > $null
768
816
} catch {
769
- $WheelURL = " https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl"
770
- $WheelHash = " 35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"
771
- DownloadAndVerify $WheelURL " $BinaryCache \python\setuptools-75.1.0-py3-none-any.whl" $WheelHash
817
+ DownloadAndVerify " distutils" " $BinaryCache \python\setuptools-75.1.0-py3-none-any.whl"
772
818
Write-Output " Installing 'setuptools-75.1.0-py3-none-any.whl' ..."
773
819
Invoke-Program - OutNull $Python ' -I' - m pip install " $BinaryCache \python\setuptools-75.1.0-py3-none-any.whl" -- disable-pip - version- check
774
820
}
@@ -786,19 +832,12 @@ function Fetch-Dependencies {
786
832
if ($AndroidNDKVersion -ne " r26b" ) {
787
833
throw " Unsupported Android NDK version"
788
834
}
789
- $NDKURL = " https://dl.google.com/android/repository/android-ndk-r26b-windows.zip"
790
- $NDKHash = " A478D43D4A45D0D345CDA6BE50D79642B92FB175868D9DC0DFC86181D80F691E"
791
- DownloadAndVerify $NDKURL " $BinaryCache \android-ndk-$AndroidNDKVersion -windows.zip" $NDKHash
792
-
835
+ DownloadAndVerify " NDK" " $BinaryCache \android-ndk-$AndroidNDKVersion -windows.zip"
793
836
Extract- ZipFile - ZipFileName " android-ndk-$AndroidNDKVersion -windows.zip" - BinaryCache $BinaryCache - ExtractPath " android-ndk-$AndroidNDKVersion " - CreateExtractPath $false
794
837
}
795
838
796
839
if ($IncludeDS2 ) {
797
- $WinFlexBisonVersion = " 2.5.25"
798
- $WinFlexBisonURL = " https://github.com/lexxmark/winflexbison/releases/download/v$WinFlexBisonVersion /win_flex_bison-$WinFlexBisonVersion .zip"
799
- $WinFlexBisonHash = " 8D324B62BE33604B2C45AD1DD34AB93D722534448F55A16CA7292DE32B6AC135"
800
- DownloadAndVerify $WinFlexBisonURL " $BinaryCache \win_flex_bison-$WinFlexBisonVersion .zip" $WinFlexBisonHash
801
-
840
+ DownloadAndVerify " WinFlexBison" " $BinaryCache \win_flex_bison-$WinFlexBisonVersion .zip"
802
841
Extract- ZipFile - ZipFileName " win_flex_bison-$WinFlexBisonVersion .zip" - BinaryCache $BinaryCache - ExtractPath " win_flex_bison"
803
842
}
804
843
@@ -856,10 +895,7 @@ function Get-PinnedToolchainRuntime() {
856
895
}
857
896
858
897
function Get-PinnedToolchainVersion () {
859
- if (Test-Path variable:PinnedVersion) {
860
- return $PinnedVersion
861
- }
862
- throw " PinnedVersion must be set"
898
+ $Components [$PinnedSwift ].Version
863
899
}
864
900
865
901
$CompilersBinaryCache = if ($IsCrossCompiling ) {
0 commit comments