1+ param ([switch ] $Generate , [switch ] $Install , [switch ] $InstallOnly , [switch ] $Debug , [string ] $Version = " 19.x" , [string ] $VisualStudio = " C:\Program Files\Microsoft Visual Studio\2022\Community" )
2+
3+ $global :ErrorActionPreference = ' Stop'
4+
5+ if (! (Test-Path " C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" )) {
6+ Write-Error " LLVM not found at C:\ProgramData\LLVM-Chainbuild; please download the official Clang/LLVM 19.x build and extract it to this path, such that C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe exists."
7+ }
8+
9+ function Invoke-CmdScript {
10+ param (
11+ [String ] $scriptName
12+ )
13+ $cmdLine = " "" $scriptName "" $args & set"
14+ & $Env: SystemRoot \system32\cmd.exe / c $cmdLine |
15+ select-string ' ^([^=]*)=(.*)$' | foreach-object {
16+ $varName = $_.Matches [0 ].Groups[1 ].Value
17+ $varValue = $_.Matches [0 ].Groups[2 ].Value
18+ set-item Env:$varName $varValue
19+ }
20+ }
21+
22+ $RootPath = " $PSScriptRoot \.."
23+ $CachePath = " $RootPath \cache"
24+ $TempPath = " $RootPath \temp"
25+
26+ if (! (Test-Path $CachePath )) {
27+ New-Item - ItemType Directory $CachePath
28+ }
29+ $env: FASTBUILD_CACHE_PATH = $CachePath
30+
31+ if (! (Test-Path $TempPath )) {
32+ New-Item - ItemType Directory $TempPath
33+ }
34+ Push-Location $TempPath
35+ try {
36+ # Set the build path.
37+ $BuildPathDebug = " $RootPath \llvm\$Version \build\win64\debug"
38+ $BuildPathRelease = " $RootPath \llvm\$Version \build\win64\release"
39+ $CMakeCommand = (Get-Command cmake).Source
40+ $CMakeCommandArguments = @ ()
41+ $CMakeCommandGenerateArguments = @ (
42+ " -G" ,
43+ " FASTBuild"
44+ )
45+
46+ Write-Host " BuildPathDebug: $BuildPathDebug "
47+ Write-Host " BuildPathRelease: $BuildPathRelease "
48+ Write-Host " CMakeCommand: $CMakeCommand "
49+ Write-Host " CMakeCommandArguments: $CMakeCommandArguments "
50+ Write-Host " CMakeCommandGenerateArguments: $CMakeCommandGenerateArguments "
51+
52+ # Create the session ID for this build.
53+ $env: CMAKE_UBA_SESSION_ID = " $ ( Get-Random ) "
54+
55+ # Initialize MSVC environment.
56+ Invoke-CmdScript " $VisualStudio \VC\Auxiliary\Build\vcvarsall.bat" x64
57+
58+ # Generate compile_command.json
59+ $env: CMAKE_EXPORT_COMPILE_COMMANDS = " true"
60+
61+ # Generate CMake projects if needed.
62+ if ($Generate `
63+ -or (! (Test-Path " $BuildPathDebug \CMakeCache.txt" )) `
64+ -or (! (Test-Path " $BuildPathRelease \CMakeCache.txt" ))) {
65+ if (! (Test-Path $BuildPathDebug )) {
66+ New-Item - ItemType Directory $BuildPathDebug | Out-Null
67+ }
68+ if (! (Test-Path $BuildPathRelease )) {
69+ New-Item - ItemType Directory $BuildPathRelease | Out-Null
70+ }
71+ & $CMakeCommand $CMakeCommandArguments $CMakeCommandGenerateArguments `
72+ " -DCMAKE_MAKE_PROGRAM=C:\Users\juner\Downloads\FASTBuild-Windows-x64-v1.18\FBuild.exe" `
73+ " -DLLVM_ENABLE_PROJECTS:STRING=clang;lld" `
74+ " -DCMAKE_C_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
75+ " -DCMAKE_CXX_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
76+ " -DCMAKE_ASM_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
77+ " -DCMAKE_RC_COMPILER=C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/rc.exe" `
78+ " -DCMAKE_MT=C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/mt.exe" `
79+ - DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL= TRUE `
80+ - DLLVM_INCLUDE_BENCHMARKS:BOOL= FALSE `
81+ - DLLVM_INCLUDE_DOCS:BOOL= FALSE `
82+ - DLLVM_INCLUDE_EXAMPLES:BOOL= FALSE `
83+ - DLLVM_INCLUDE_TESTS:BOOL= FALSE `
84+ - DCLANG_INCLUDE_TESTS:BOOL= FALSE `
85+ - DCLANG_INCLUDE_DOCS:BOOL= FALSE `
86+ - DLLVM_ENABLE_DIA_SDK:BOOL= FALSE `
87+ - DCMAKE_BUILD_TYPE= Debug `
88+ - DCMAKE_CFG_INTDIR= Debug `
89+ " -DCMAKE_INSTALL_PREFIX=C:\Program Files\LLVM" `
90+ $LauncherFlags `
91+ " -H$RootPath \llvm\$Version \llvm" `
92+ " -B$BuildPathDebug "
93+ if ($LastExitCode -ne 0 ) {
94+ exit $LastExitCode
95+ }
96+ & $CMakeCommand $CMakeCommandArguments $CMakeCommandGenerateArguments `
97+ " -DCMAKE_MAKE_PROGRAM=C:\Users\juner\Downloads\FASTBuild-Windows-x64-v1.18\FBuild.exe" `
98+ " -DLLVM_ENABLE_PROJECTS:STRING=clang;lld" `
99+ " -DCMAKE_C_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
100+ " -DCMAKE_CXX_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
101+ " -DCMAKE_ASM_COMPILER=C:\ProgramData\LLVM-Chainbuild\bin\clang-cl.exe" `
102+ " -DCMAKE_RC_COMPILER=C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/rc.exe" `
103+ " -DCMAKE_MT=C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/mt.exe" `
104+ - DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL= TRUE `
105+ - DLLVM_INCLUDE_BENCHMARKS:BOOL= FALSE `
106+ - DLLVM_INCLUDE_DOCS:BOOL= FALSE `
107+ - DLLVM_INCLUDE_EXAMPLES:BOOL= FALSE `
108+ - DLLVM_INCLUDE_TESTS:BOOL= FALSE `
109+ - DCLANG_INCLUDE_TESTS:BOOL= FALSE `
110+ - DCLANG_INCLUDE_DOCS:BOOL= FALSE `
111+ - DLLVM_ENABLE_DIA_SDK:BOOL= FALSE `
112+ - DCMAKE_BUILD_TYPE= Release `
113+ - DCMAKE_CFG_INTDIR= Release `
114+ " -DCMAKE_INSTALL_PREFIX=C:\Program Files\LLVM" `
115+ $LauncherFlags `
116+ " -H$RootPath \llvm\$Version \llvm" `
117+ " -B$BuildPathRelease "
118+ if ($LastExitCode -ne 0 ) {
119+ exit $LastExitCode
120+ }
121+ }
122+
123+ # Determine what build path we're going to use.
124+ $BuildPath = $BuildPathRelease
125+ $BuildConfiguration = " Release"
126+ if ($Debug ) {
127+ $BuildPath = $BuildPathDebug
128+ $BuildConfiguration = " Debug"
129+ }
130+
131+ # Build if not only installing.
132+ if (! $InstallOnly ) {
133+ & $CMakeCommand $CMakeCommandArguments `
134+ -- build $BuildPath `
135+ -- config $BuildConfiguration `
136+ -- `
137+ - cache `
138+ - dist
139+ if ($LastExitCode -ne 0 ) {
140+ exit $LastExitCode
141+ }
142+ }
143+
144+ # Install if requested.
145+ if ($Install -or $InstallOnly ) {
146+ & $CMakeCommand `
147+ -- install $BuildPath `
148+ -- config $BuildConfiguration
149+ if ($LastExitCode -ne 0 ) {
150+ exit $LastExitCode
151+ }
152+ }
153+ } finally {
154+ Pop-Location
155+ }
0 commit comments