1
- # ===--- build.ps1 - Windows Build Script -----------------*- PowerShell -*-===//
2
- #
3
- # This source file is part of the Swift.org open source project
4
- #
5
- # Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
6
- # Licensed under Apache License v2.0 with Runtime Library Exception
7
- #
8
- # See https://swift.org/LICENSE.txt for license information
9
- # See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10
- #
11
- # ===----------------------------------------------------------------------===//
12
-
13
1
# Copyright 2020 Saleem Abdulrasool <[email protected] >
14
2
# Copyright 2023 Tristan Labelle <[email protected] >
15
3
@@ -54,6 +42,9 @@ An array of architectures for which the Swift SDK should be built.
54
42
The product version to be used when building the installer.
55
43
Supports semantic version strings.
56
44
45
+ . PARAMETER PinnedToolchain
46
+ The development toolchain snapshot to build the early components with.
47
+
57
48
. PARAMETER WinSDKVersion
58
49
The version number of the Windows SDK to be used.
59
50
Overrides the value resolved by the Visual Studio command prompt.
95
86
[string ] $SwiftDebugFormat = " dwarf" ,
96
87
[string []] $SDKs = @ (" X64" , " X86" , " Arm64" ),
97
88
[string ] $ProductVersion = " 0.0.0" ,
89
+ [string ] $PinnedToolchain = " swift-DEVELOPMENT-SNAPSHOT-2023-08-12-a" ,
98
90
[string ] $WinSDKVersion = " " ,
99
91
[switch ] $SkipBuild = $false ,
100
92
[switch ] $SkipRedistInstall = $false ,
@@ -413,6 +405,32 @@ function Ensure-WindowsSDK {
413
405
}
414
406
}
415
407
408
+ function Ensure-SwiftToolchain ($Arch ) {
409
+ if (Test-Path " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Toolchains\0.0.0+Asserts\usr\bin\swiftc.exe" ) {
410
+ return
411
+ }
412
+
413
+ if (-not (Test-Path $BinaryCache \wix- 4.0 .1. zip)) {
414
+ curl.exe - sL https:// www.nuget.org/ api/ v2/ package/ wix/ 4.0 .1 - o $BinaryCache \wix- 4.0 .1. zip
415
+ }
416
+ New-Item - ItemType Directory - ErrorAction Ignore $BinaryCache \wix- 4.0 .1 | Out-Null
417
+ Expand-Archive - Path $BinaryCache \wix- 4.0 .1. zip - Destination $BinaryCache \wix- 4.0 .1 - Force
418
+
419
+ Write-Output " Swift toolchain not found. Downloading from swift.org..."
420
+ $SwiftToolchainURL = " https://swift.org/builds/development/windows10/${PinnedToolchain} /${PinnedToolchain} -windows10.exe"
421
+ New-Item - ItemType Directory - ErrorAction Ignore " $BinaryCache \toolchains" | Out-Null
422
+ if (-not (Test-Path " $BinaryCache \toolchains\${PinnedToolchain} .exe" )) {
423
+ (New-Object Net.WebClient).DownloadFile($SwiftToolchainURL , " $BinaryCache \toolchains\${PinnedToolchain} .exe" )
424
+ }
425
+
426
+ Write-Output " Installing Swift toolchain..."
427
+ Invoke-Program " $BinaryCache \wix-4.0.1\tools\net6.0\any\wix.exe" -- burn extract " $BinaryCache \toolchains\${PinnedToolchain} .exe" - out " $BinaryCache \toolchains\"
428
+ Invoke-Program - OutNull msiexec.exe / qn / a " $BinaryCache \toolchains\a0" TARGETDIR= " $BinaryCache \toolchains\${PinnedToolchain} \PFiles64\Swift\Runtimes\0.0.0\usr\bin"
429
+ Invoke-Program - OutNull msiexec.exe / qn / a " $BinaryCache \toolchains\a1" TARGETDIR= " $BinaryCache \toolchains\${PinnedToolchain} "
430
+ Invoke-Program - OutNull msiexec.exe / qn / a " $BinaryCache \toolchains\a2" TARGETDIR= " $BinaryCache \toolchains\${PinnedToolchain} "
431
+ Invoke-Program - OutNull msiexec.exe / qn / a " $BinaryCache \toolchains\a5" TARGETDIR= " $BinaryCache \toolchains\${PinnedToolchain} "
432
+ }
433
+
416
434
function TryAdd-KeyValue ([hashtable ]$Hashtable , [string ]$Key , [string ]$Value ) {
417
435
if (-not $Hashtable.Contains ($Key )) {
418
436
$Hashtable.Add ($Key , $Value )
@@ -600,6 +618,9 @@ function Build-CMakeProject {
600
618
$cmakeGenerateArgs += @ (" -D" , " $ ( $Define.Key ) =$Value " )
601
619
}
602
620
621
+ if ($UseBuiltCompilers.Contains (" Swift" )) {
622
+ $env: Path = " $RuntimeInstallRoot \usr\bin;$ToolchainInstallRoot \usr\bin;${env: Path} "
623
+ }
603
624
Invoke-Program cmake.exe @cmakeGenerateArgs
604
625
605
626
# Build all requested targets
@@ -717,6 +738,25 @@ function Build-WiXProject() {
717
738
Invoke-Program $msbuild @MSBuildArgs
718
739
}
719
740
741
+ function Build-CompilerDependencies ($Arch ) {
742
+ Isolate- EnvVars {
743
+ $env: Path = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Runtimes\0.0.0\usr\bin;${env: Path} "
744
+ $env: SDKROOT = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Platforms\Windows.platform\Developer\SDKs\Windows.sdk"
745
+
746
+ Build-CMakeProject `
747
+ - Src $SourceCache \swift- syntax `
748
+ - Bin $BinaryCache \99 `
749
+ - InstallTo " $ ( $Arch.ToolchainInstallRoot ) \usr" `
750
+ - Arch $Arch `
751
+ - BuildTargets default `
752
+ - Defines @ {
753
+ BUILD_SHARED_LIBS = " YES" ;
754
+ CMAKE_Swift_COMPILER = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Toolchains\0.0.0+Asserts\usr\bin\swiftc.exe" ;
755
+ CMAKE_Swift_FLAGS = @ (" -sdk" , " ${env: SDKROOT} " );
756
+ }
757
+ }
758
+ }
759
+
720
760
function Build-BuildTools ($Arch ) {
721
761
Build-CMakeProject `
722
762
- Src $SourceCache \llvm- project\llvm `
@@ -767,6 +807,8 @@ function Build-Compilers($Arch, [switch]$Test = $false) {
767
807
}
768
808
}
769
809
810
+ $env: Path = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Runtimes\0.0.0\usr\bin;${env: Path} "
811
+
770
812
$LLVM_ENABLE_PDB = switch ($BuildType ) {
771
813
" Release" { " NO" }
772
814
default { " YES" }
@@ -787,6 +829,8 @@ function Build-Compilers($Arch, [switch]$Test = $false) {
787
829
# give us a sligtly faster build.
788
830
CMAKE_BUILD_TYPE = " Release" ;
789
831
CMAKE_INSTALL_PREFIX = " $ ( $Arch.ToolchainInstallRoot ) \usr" ;
832
+ CMAKE_Swift_COMPILER = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Toolchains\0.0.0+Asserts\usr\bin\swiftc.exe" ;
833
+ CMAKE_Swift_FLAGS = @ (" -sdk" , " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Platforms\Windows.platform\Developer\SDKs\Windows.sdk" );
790
834
LLDB_PYTHON_EXE_RELATIVE_PATH = " python.exe" ;
791
835
LLDB_PYTHON_EXT_SUFFIX = " .pyd" ;
792
836
LLDB_PYTHON_RELATIVE_PATH = " lib/site-packages" ;
@@ -804,9 +848,11 @@ function Build-Compilers($Arch, [switch]$Test = $false) {
804
848
SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED = " YES" ;
805
849
SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION = " YES" ;
806
850
SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING = " YES" ;
851
+ SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR = " $BinaryCache \99" ;
807
852
SWIFT_PATH_TO_LIBDISPATCH_SOURCE = " $SourceCache \swift-corelibs-libdispatch" ;
808
853
SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE = " $SourceCache \swift-syntax" ;
809
854
SWIFT_PATH_TO_STRING_PROCESSING_SOURCE = " $SourceCache \swift-experimental-string-processing" ;
855
+ SWIFT_PATH_TO_SWIFT_SDK = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Platforms\Windows.platform\Developer\SDKs\Windows.sdk" ;
810
856
})
811
857
}
812
858
}
@@ -935,29 +981,33 @@ function Build-ICU($Arch) {
935
981
function Build-Runtime ($Arch ) {
936
982
$LLVMBinaryCache = Get-ProjectBinaryCache $Arch 0
937
983
938
- Build-CMakeProject `
939
- - Src $SourceCache \swift `
940
- - Bin (Get-ProjectBinaryCache $Arch 1 ) `
941
- - InstallTo " $ ( $Arch.SDKInstallRoot ) \usr" `
942
- - Arch $Arch `
943
- - CacheScript $SourceCache \swift\cmake\caches\Runtime- Windows- $ ($Arch.LLVMName ).cmake `
944
- - UseBuiltCompilers C, CXX `
945
- - BuildTargets default `
946
- - Defines @ {
947
- CMAKE_Swift_COMPILER_TARGET = $Arch.LLVMTarget ;
948
- LLVM_DIR = " $LLVMBinaryCache \lib\cmake\llvm" ;
949
- SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY = " YES" ;
950
- SWIFT_ENABLE_EXPERIMENTAL_CXX_INTEROP = " YES" ;
951
- SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING = " YES" ;
952
- SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED = " YES" ;
953
- SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION = " YES" ;
954
- SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING = " YES" ;
955
- SWIFT_NATIVE_SWIFT_TOOLS_PATH = " $BinaryCache \1\bin" ;
956
- SWIFT_PATH_TO_LIBDISPATCH_SOURCE = " $SourceCache \swift-corelibs-libdispatch" ;
957
- SWIFT_PATH_TO_STRING_PROCESSING_SOURCE = " $SourceCache \swift-experimental-string-processing" ;
958
- SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE = " $SourceCache \swift-syntax" ;
959
- CMAKE_SHARED_LINKER_FLAGS = @ (" /INCREMENTAL:NO" , " /OPT:REF" , " /OPT:ICF" );
960
- }
984
+ Isolate- EnvVars {
985
+ $env: Path = " $BinaryCache \toolchains\$PinnedToolchain \PFiles64\Swift\Runtimes\0.0.0\usr\bin;${env: Path} "
986
+
987
+ Build-CMakeProject `
988
+ - Src $SourceCache \swift `
989
+ - Bin (Get-ProjectBinaryCache $Arch 1 ) `
990
+ - InstallTo " $ ( $Arch.SDKInstallRoot ) \usr" `
991
+ - Arch $Arch `
992
+ - CacheScript $SourceCache \swift\cmake\caches\Runtime- Windows- $ ($Arch.LLVMName ).cmake `
993
+ - UseBuiltCompilers C, CXX `
994
+ - BuildTargets default `
995
+ - Defines @ {
996
+ CMAKE_Swift_COMPILER_TARGET = $Arch.LLVMTarget ;
997
+ LLVM_DIR = " $LLVMBinaryCache \lib\cmake\llvm" ;
998
+ SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY = " YES" ;
999
+ SWIFT_ENABLE_EXPERIMENTAL_CXX_INTEROP = " YES" ;
1000
+ SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING = " YES" ;
1001
+ SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED = " YES" ;
1002
+ SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION = " YES" ;
1003
+ SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING = " YES" ;
1004
+ SWIFT_NATIVE_SWIFT_TOOLS_PATH = " $BinaryCache \1\bin" ;
1005
+ SWIFT_PATH_TO_LIBDISPATCH_SOURCE = " $SourceCache \swift-corelibs-libdispatch" ;
1006
+ SWIFT_PATH_TO_STRING_PROCESSING_SOURCE = " $SourceCache \swift-experimental-string-processing" ;
1007
+ SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE = " $SourceCache \swift-syntax" ;
1008
+ CMAKE_SHARED_LINKER_FLAGS = @ (" /INCREMENTAL:NO" , " /OPT:REF" , " /OPT:ICF" );
1009
+ }
1010
+ }
961
1011
962
1012
Invoke-Program $python - c " import plistlib; print(str(plistlib.dumps({ 'DefaultProperties': { 'DEFAULT_USE_RUNTIME': 'MD' } }), encoding='utf-8'))" `
963
1013
- OutFile " $ ( $Arch.SDKInstallRoot ) \SDKSettings.plist"
@@ -1526,6 +1576,9 @@ if (-not $SkipBuild) {
1526
1576
}
1527
1577
1528
1578
if (-not $SkipBuild ) {
1579
+ Ensure- SwiftToolchain $HostArch
1580
+ Build-CompilerDependencies $HostArch
1581
+
1529
1582
Build-BuildTools $HostArch
1530
1583
Build-Compilers $HostArch
1531
1584
}
0 commit comments