Skip to content

Commit edf8947

Browse files
authored
Update WindowsBuild.md
- Sort the arguments to CMake to make them easier to spot - Sort the clones to be in order of use - Use shorter build directory names as the paths can be troublesome - Update instructions all the way through to swift-package-manager as that now works - Fix instructions for cloning swift-llbuild (the repository contains symlinks) - Add instructions for new swift-package-manager dependencies - Homogenise the build rules (they are at this point, largely copy-paste from each one, just listing dependencies) - Switch `swift-llbuild` to use `clang-cl` instead of `cl` and add a workaround for code splitting
1 parent 8c2e423 commit edf8947

File tree

1 file changed

+183
-34
lines changed

1 file changed

+183
-34
lines changed

docs/WindowsBuild.md

+183-34
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,13 @@ git clone https://github.com/apple/swift-cmark cmark
6262
git clone https://github.com/apple/swift-corelibs-libdispatch swift-corelibs-libdispatch
6363
git clone https://github.com/apple/swift-corelibs-foundation swift-corelibs-foundation
6464
git clone https://github.com/apple/swift-corelibs-xctest swift-corelibs-xctest
65-
git clone https://github.com/apple/swift-llbuild llbuild
6665
git clone https://github.com/apple/swift-tools-support-core swift-tools-support-core
67-
git clone -c core.autocrlf=input https://github.com/apple/swift-package-manager swiftpm
66+
git clone -c core.symlinks=true https://github.com/apple/swift-llbuild swift-llbuild
67+
git clone https://github.com/JPSim/Yams Yams
68+
git clone https://github.com/apple/swift-driver swift-driver
69+
git clone https://github.com/apple/swift-argument-parser swift-argument-parser
70+
git clone -c core.autocrlf=input https://github.com/apple/swift-package-manager swift-package-manager
71+
git clone https://github.com/apple/indexstore-db indexstore-db
6872
```
6973

7074
## Dependencies (ICU, SQLite3, curl, libxml2 and zlib)
@@ -112,116 +116,261 @@ Warning: Creating the above links usually requires administrator privileges. The
112116
## Build the toolchain
113117

114118
```cmd
115-
cmake -B "S:\b\toolchain" ^
119+
cmake -B "S:\b\1" ^
116120
-C S:\swift\cmake\caches\Windows-x86_64.cmake ^
117121
-D CMAKE_BUILD_TYPE=Release ^
118-
-D SWIFT_PATH_TO_LIBDISPATCH_SOURCE=S:\swift-corelibs-libdispatch ^
122+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
123+
-D LLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-windows-msvc ^
119124
-D LLVM_ENABLE_PDB=YES ^
120-
-D LLVM_EXTERNAL_SWIFT_SOURCE_DIR=S:\swift ^
121125
-D LLVM_EXTERNAL_CMARK_SOURCE_DIR=S:\cmark ^
122-
-D SWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE=S:\Library\icu-67\usr\include ^
123-
-D SWIFT_WINDOWS_x86_64_ICU_UC=S:\Library\icu-67\usr\lib\icuuc67.lib ^
126+
-D LLVM_EXTERNAL_SWIFT_SOURCE_DIR=S:\swift ^
127+
-D SWIFT_PATH_TO_LIBDISPATCH_SOURCE=S:\swift-corelibs-libdispatch ^
124128
-D SWIFT_WINDOWS_x86_64_ICU_I18N_INCLUDE=S:\Library\icu-67\usr\include ^
125129
-D SWIFT_WINDOWS_x86_64_ICU_I18N=S:\Library\icu-67\usr\lib\icuin67.lib ^
126-
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
130+
-D SWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE=S:\Library\icu-67\usr\include ^
131+
-D SWIFT_WINDOWS_x86_64_ICU_UC=S:\Library\icu-67\usr\lib\icuuc67.lib ^
127132
-G Ninja ^
128133
-S S:\llvm-project\llvm
129134
130-
ninja -C S:\b\toolchain
135+
ninja -C S:\b\1
131136
```
132137

133138
## Running Swift tests on Windows
134139

135140
```cmd
136-
path S:\Library\icu-67\usr\bin;S:\b\toolchain\bin;S:\b\toolchain\tools\swift\libdispatch-prefix\bin;%PATH%;%ProgramFiles%\Git\usr\bin
141+
path S:\Library\icu-67\usr\bin;S:\b\1\bin;S:\b\1\tools\swift\libdispatch-prefix\bin;%PATH%;%ProgramFiles%\Git\usr\bin
137142
ninja -C S:\b\toolchain check-swift
138143
```
139144

140145
## Build swift-corelibs-libdispatch
141146

142147
```cmd
143-
cmake -B S:\b\libdispatch -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_CXX_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D ENABLE_SWIFT=YES -G Ninja -S S:\swift-corelibs-libdispatch
144-
ninja -C S:\b\libdispatch
148+
cmake -B S:\b\2 ^
149+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
150+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
151+
-D CMAKE_C_COMPILER=S:/b/1/bin/clang-cl.exe ^
152+
-D CMAKE_CXX_COMPILER=S:/b/1/bin/clang-cl.exe ^
153+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
154+
-D ENABLE_SWIFT=YES ^
155+
-G Ninja ^
156+
-S S:\swift-corelibs-libdispatch
157+
158+
ninja -C S:\b\2
145159
```
146160

147161
## Test swift-corelibs-libdispatch
148162

149163
```cmd
150-
ninja -C S:\b\libdispatch check
164+
ninja -C S:\b\2 check
151165
```
152166

153167
## Build swift-corelibs-foundation
154168

155169
```cmd
156-
cmake -B S:\b\foundation -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D CURL_LIBRARY="S:/Library/libcurl-development/usr/lib/libcurl.lib" -D CURL_INCLUDE_DIR="S:/Library/libcurl-development/usr/include" -D ICU_ROOT="S:/Library/icu-67" -D ICU_INCLUDE_DIR=S:/Library/icu-67/usr/include -D LIBXML2_LIBRARY="S:/Library/libxml2-development/usr/lib/libxml2s.lib" -D LIBXML2_INCLUDE_DIR="S:/Library/libxml2-development/usr/include/libxml2" -D ENABLE_TESTING=NO -D dispatch_DIR=S:/b/libdispatch/cmake/modules -G Ninja -S S:\swift-corelibs-foundation
157-
ninja -C S:\b\foundation
170+
cmake -B S:\b\3 ^
171+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
172+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
173+
-D CMAKE_C_COMPILER=S:/b/1/bin/clang-cl.exe ^
174+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
175+
-D CURL_LIBRARY="S:/Library/libcurl-development/usr/lib/libcurl.lib" ^
176+
-D CURL_INCLUDE_DIR="S:/Library/libcurl-development/usr/include" ^
177+
-D ICU_I18N_LIBRARY_RELEASE=S:\library\icu-67\usr\lib\icuin67.lib ^
178+
-D ICU_ROOT=S:\Library\icu-67\usr ^
179+
-D ICU_UC_LIBRARY_RELEASE=S:\Library\icu-67\usr\lib\icuuc67.lib ^
180+
-D LIBXML2_LIBRARY=S:\Library\libxml2-development\usr\lib\libxml2s.lib ^
181+
-D LIBXML2_INCLUDE_DIR=S:\Library\libxml2-development\usr\include\libxml2 ^
182+
-D ENABLE_TESTING=NO ^
183+
-D dispatch_DIR=S:\b\2\cmake\modules ^
184+
-G Ninja ^
185+
-S S:\swift-corelibs-foundation
186+
187+
ninja -C S:\b\3
158188
```
159189

160190
- Add Foundation to your path:
161191

162192
```cmd
163-
path S:\b\foundation\Foundation;%PATH%
193+
path S:\b\3\bin;%PATH%
164194
```
165195

166196
## Build swift-corelibs-xctest
167197

168198
```cmd
169-
cmake -B S:\b\xctest -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D dispatch_DIR=S:\b\dispatch\cmake\modules -D Foundation_DIR=S:\b\foundation\cmake\modules -D LIT_COMMAND=S:\toolchain\llvm\utils\lit\lit.py -G Ninja -S S:\swift-corelibs-xctest
170-
ninja -C S:\b\xctest
199+
cmake -B S:\b\4 ^
200+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
201+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
202+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
203+
-D dispatch_DIR=S:\b\2\cmake\modules ^
204+
-D Foundation_DIR=S:\b\3\cmake\modules ^
205+
-D LIT_COMMAND=S:\llvm-project\llvm\utils\lit\lit.py ^
206+
-G Ninja ^
207+
-S S:\swift-corelibs-xctest
208+
209+
ninja -C S:\b\4
171210
```
172211

173212
- Add XCTest to your path:
174213

175214
```cmd
176-
path S:\b\xctest;%PATH%
215+
216+
path S:\b\4;%PATH%
177217
```
178218

179219
## Test XCTest
180220

181221
```cmd
182-
ninja -C S:\b\xctest check-xctest
222+
ninja -C S:\b\4 check-xctest
183223
```
184224

185225
## Rebuild Foundation
186226

187227
```cmd
188-
cmake -B S:\b\foundation -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D CURL_LIBRARY="S:/Library/libcurl-development/usr/lib/libcurl.lib" -D CURL_INCLUDE_DIR="S:/Library/libcurl-development/usr/include" -D ICU_ROOT="S:/Library/icu-67" -D LIBXML2_LIBRARY="S:/Library/libxml2-development/usr/lib/libxml2.lib" -D LIBXML2_INCLUDE_DIR="S:/Library/libxml2-development/usr/include" -D ENABLE_TESTING=YES -D dispatch_DIR=S:/b/libdispatch/cmake/modules -D XCTest_DIR=S:/b/xctest/cmake/modules -G Ninja -S S:\swift-corelibs-foundation
189-
ninja -C S:\b\foundation
228+
cmake -B S:\b\3 ^
229+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
230+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
231+
-D CMAKE_C_COMPILER=S:/b/1/bin/clang-cl.exe ^
232+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
233+
-D CURL_LIBRARY="S:/Library/libcurl-development/usr/lib/libcurl.lib" ^
234+
-D CURL_INCLUDE_DIR="S:/Library/libcurl-development/usr/include" ^
235+
-D ICU_I18N_LIBRARY_RELEASE=S:\library\icu-67\usr\lib\icuin67.lib ^
236+
-D ICU_ROOT=S:\Library\icu-67\usr ^
237+
-D ICU_UC_LIBRARY_RELEASE=S:\Library\icu-67\usr\lib\icuuc67.lib ^
238+
-D LIBXML2_LIBRARY=S:\Library\libxml2-development\usr\lib\libxml2s.lib ^
239+
-D LIBXML2_INCLUDE_DIR=S:\Library\libxml2-development\usr\include\libxml2 ^
240+
-D ENABLE_TESTING=YES ^
241+
-D dispatch_DIR=S:\b\2\cmake\modules ^
242+
-D XCTest_DIR=S:\b\4\cmake\modules ^
243+
-G Ninja ^
244+
-S S:\swift-corelibs-foundation
245+
246+
ninja -C S:\b\3
190247
```
191248

192249
## Test Foundation
193250

194251
```cmd
195-
cmake --build S:\b\foundation
196-
ninja -C S:\b\foundation test
252+
ninja -C S:\b\3 test
197253
```
198254

199-
## Build llbuild
255+
## Build swift-tools-core-support
200256

201257
```cmd
202-
set AR=llvm-ar
203-
cmake -B S:\b\llbuild -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_CXX_COMPILER=cl -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D Foundation_DIR=S:/b/foundation/cmake/modules -D dispatch_DIR=S:/b/libdispatch/cmake/modules -D SQLite3_INCLUDE_DIR=S:\Library\sqlite-3.28.0\usr\include -D SQLite3_LIBRARY=S:\Library\sqlite-3.28.0\usr\lib\sqlite3.lib -D LLBUILD_SUPPORT_BINDINGS=Swift -G Ninja -S S:\llbuild
204-
ninja -C S:\b\llbuild
258+
cmake -B S:\b\5 ^
259+
-D BUILD_SHARED_LIBS=YES ^
260+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
261+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
262+
-D CMAKE_C_COMPILER=S:/b/1/bin/clang-cl.exe ^
263+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
264+
-D dispatch_DIR=S:\b\2\cmake\modules ^
265+
-D Foundation_DIR=S:\b\3\cmake\modules ^
266+
-D SQLite3_INCLUDE_DIR=S:\Library\sqlite-3.28.0\usr\include ^
267+
-D SQLite3_LIBRARY=S:\Library\sqlite-3.28.0\usr\lib\SQLite3.lib ^
268+
-G Ninja ^
269+
-S S:\swift-tools-support-core
270+
271+
ninja -C S:\b\5
272+
```
273+
274+
## Build swift-llbuild
275+
276+
```cmd
277+
cmake -B S:\b\6 ^
278+
-D BUILD_SHARED_LIBS=YES ^
279+
-D CMAKE_BUILD_TYPE=RelWithDebInfo ^
280+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
281+
-D CMAKE_CXX_COMPILER=S:/b/1/bin/clang-cl.exe ^
282+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
283+
-D CMAKE_CXX_FLAGS="-Xclang -fno-split-cold-code" ^
284+
-D LLBUILD_SUPPORT_BINDINGS=Swift ^
285+
-D dispatch_DIR=S:\b\2\cmake\modules ^
286+
-D Foundation_DIR=S:\b\3\cmake\modules ^
287+
-D SQLite3_INCLUDE_DIR=S:\Library\sqlite-3.28.0\usr\include ^
288+
-D SQLite3_LIBRARY=S:\Library\sqlite-3.28.0\usr\lib\sqlite3.lib ^
289+
-G Ninja ^
290+
-S S:\swift-llbuild
291+
292+
ninja -C S:\b\6
205293
```
206294

207295
- Add llbuild to your path:
208296

209297
```cmd
210-
path S:\b\llbuild\bin;%PATH%
298+
path S:\b\6\bin;%PATH%
211299
```
212300

213-
## Build swift-tools-core-support
301+
## Build Yams
214302

215303
```cmd
216-
cmake -B S:\b\tsc -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_COMPILER=cl -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D Foundation_DIR=S:/b/foundation/cmake/modules -D dispatch_DIR=S:/b/libdispatch/cmake/modules -G Ninja -S S:\swift-tools-support-core
217-
ninja -C S:\b\tsc
304+
cmake -B S:\b\7 ^
305+
-D BUILD_SHARED_LIBS=YES ^
306+
-D CMAKE_BUILD_TYPE=Release ^
307+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
308+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
309+
-D dispatch_DIR=S:\b\2\cmake\modules ^
310+
-D Foundation_DIR=S:\b\3\cmake\modules ^
311+
-D XCTest_DIR=S:\b\4\cmake\modules ^
312+
-G Ninja ^
313+
-S S:\swift-llbuild
314+
315+
ninja -C S:\b\7
316+
```
317+
318+
## Build swift-driver
319+
320+
```cmd
321+
cmake -B S:\b\8 ^
322+
-D BUILD_SHARED_LIBS=YES ^
323+
-D CMAKE_BUILD_TYPE=Release ^
324+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
325+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
326+
-D dispatch_DIR=S:\b\2\cmake\modules ^
327+
-D Foundation_DIR=S:\b\3\cmake\modules ^
328+
-D TSC_DIR=S:\b\5\cmake\modules ^
329+
-D LLBuild_DIR=S:\b\6\cmake\modules ^
330+
-D Yams_DIR=S:\b\7\cmake\modules ^
331+
-G Ninja ^
332+
-S S:\swift-driver
333+
334+
ninja -C S:\b\8
335+
```
336+
337+
## Build swift-argument-parser
338+
339+
```cmd
340+
cmake -B S:\b\9 ^
341+
-D BUILD_SHARED_LIBS=YES ^
342+
-D CMAKE_BUILD_TYPE=Release ^
343+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
344+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
345+
-D dispatch_DIR=S:\b\2\cmake\modules ^
346+
-D Foundation_DIR=S:\b\3\cmake\modules ^
347+
-D XCTest_DIR=S:\b\4\cmake\modules ^
348+
-G Ninja ^
349+
-S S:\swift-argument-parser
350+
351+
ninja -C S:\b\9
218352
```
219353

220354
## Build swift-package-manager
221355

222356
```cmd
223-
cmake -B S:\b\spm -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_CXX_COMPILER=S:/b/toolchain/bin/clang-cl.exe -D CMAKE_Swift_COMPILER=S:/b/toolchain/bin/swiftc.exe -D USE_VENDORED_TSC=YES -D Foundation_DIR=S:/b/foundation/cmake/modules -D dispatch_DIR=S:/b/libdispatch/cmake/modules -D LLBuild_DIR=S:/b/llbuild/cmake/modules -G Ninja -S S:\swiftpm
224-
ninja -C S:\b\spm
357+
cmake -B S:\b\10 ^
358+
-D BUILD_SHARED_LIBS=YES ^
359+
-D CMAKE_BUILD_TYPE=Release ^
360+
-D CMAKE_C_COMPILER=S:/b/1/bin/clang-cl.exe ^
361+
-D CMAKE_Swift_COMPILER=S:/b/1/bin/swiftc.exe ^
362+
-D CMAKE_INSTALL_PREFIX=C:\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr ^
363+
-D dispatch_DIR=S:\b\2\cmake\modules ^
364+
-D Foundation_DIR=S:\b\3\cmake\modules ^
365+
-D TSC_DIR=S:\b\5\cmake\modules ^
366+
-D LLBuild_DIR=S:\b\6\cmake\modules ^
367+
-D Yams_DIR=S:\b\7\cmake\modules ^
368+
-D SwiftDriver_DIR=S:\b\8\cmake\modules ^
369+
-D ArgumentParser_DIR=S:\b\9\cmake\modules ^
370+
-G Ninja ^
371+
-S S:\swift-package-manager
372+
373+
ninja -C S:\b\10
225374
```
226375

227376
## Install the Swift toolchain on Windows

0 commit comments

Comments
 (0)