@@ -58,12 +58,7 @@ argument to `x86` and run
58
58
VsDevCmd -arch=x86
59
59
```
60
60
61
- - Then adapt the following command and run it. Make sure to use forward slashes
62
- (` / ` ) instead of backslashes (` \ ` ) as the path separators. ` clang ` breaks
63
- with backslashed paths.
64
- ``` cmd
65
- set swift_source_dir=path-to-directory-containing-all-cloned-repositories
66
- ```
61
+ - We will use the assumption that the sources are on the ` S ` drive. Replace it with the path to the checkout. Make sure to use forward slashes (` / ` ) instead of backslashes (` \ ` ) as the path separators. ` clang ` breaks with backslashed paths.
67
62
68
63
- Decide whether you want to build a release or debug version of Swift on Windows and
69
64
replace the ` CMAKE_BUILD_TYPE ` parameter in the build steps below with the correct value
@@ -76,23 +71,22 @@ set swift_source_dir=path-to-directory-containing-all-cloned-repositories
76
71
77
72
``` cmd
78
73
cd %UniversalCRTSdkDir%\Include\%UCRTVersion%\ucrt
79
- mklink module.modulemap %swift_source_dir% \swift\stdlib\public\Platform\ucrt.modulemap
74
+ mklink module.modulemap S: \swift\stdlib\public\Platform\ucrt.modulemap
80
75
cd %VCToolsInstallDir%\include
81
- mklink module.modulemap %swift_source_dir% \swift\stdlib\public\Platform\visualc.modulemap
82
- mklink visualc.apinotes %swift_source_dir% \swift\stdlib\public\Platform\visualc.apinotes
76
+ mklink module.modulemap S: \swift\stdlib\public\Platform\visualc.modulemap
77
+ mklink visualc.apinotes S: \swift\stdlib\public\Platform\visualc.apinotes
83
78
cd %UniversalCRTSdkDir\Include\%UCRTVersion%\um
84
- mklink module.modulemap %swift_source_dir% \swift\stdlib\public\Platform\winsdk.modulemap
79
+ mklink module.modulemap S: \swift\stdlib\public\Platform\winsdk.modulemap
85
80
```
86
81
87
82
### 5. Build CMark
88
83
- This must be done from within a developer command prompt. CMark is a fairly
89
84
small project and should only take a few minutes to build.
90
85
``` cmd
91
- mkdir "%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64"
92
- pushd "%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64"
93
- cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug "%swift_source_dir%/cmark"
86
+ mkdir S:/build/Ninja-DebugAssert/cmark-windows-amd64"
87
+ pushd S:/build/Ninja-DebugAssert/cmark-windows-amd64" "S:/%swift_source_dir%/cmark"
94
88
popd
95
- cmake --build "%swift_source_dir% /build/Ninja-DebugAssert/cmark-windows-amd64/"
89
+ cmake --build "S: /build/Ninja-DebugAssert/cmark-windows-amd64/"
96
90
```
97
91
98
92
### 6. Build LLVM/Clang
@@ -101,24 +95,17 @@ cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64/"
101
95
type (e.g. ` Debug ` , ` Release ` , ` RelWithDebInfoAssert ` ) for LLVM/Clang matches the
102
96
build type for Swift.
103
97
``` cmd
104
- mkdir "%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"
105
- pushd "%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"
98
+ mkdir "S: /build/Ninja-DebugAssert/llvm-windows-amd64"
99
+ pushd "S: /build/Ninja-DebugAssert/llvm-windows-amd64"
106
100
cmake -G "Ninja"^
107
101
-DLLVM_ENABLE_ASSERTIONS=TRUE^
108
102
-DCMAKE_BUILD_TYPE=Debug^
109
103
-DLLVM_ENABLE_PROJECTS=clang^
110
104
-DLLVM_TARGETS_TO_BUILD=X86^
111
105
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-windows-msvc^
112
- "%swift_source_dir% /llvm"
106
+ "S: /llvm"
113
107
popd
114
- cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"
115
- ```
116
- - Store the LLVM ` bin ` directory in an environment variable so it can be used
117
- to build Swift. Assuming you followed the instructions exactly, the path
118
- below is correct, but it may be different based on your build variant and
119
- platform, so double check.
120
- ``` cmd
121
- set llvm_bin_dir="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64/bin"
108
+ cmake --build "S:/build/Ninja-DebugAssert/llvm-windows-amd64"
122
109
```
123
110
124
111
### 7. Build Swift
@@ -127,31 +114,31 @@ set llvm_bin_dir="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64/
127
114
- You may need to adjust the ` SWIFT_WINDOWS_LIB_DIRECTORY ` parameter depending on
128
115
your target platform or Windows SDK version.
129
116
``` cmd
130
- mkdir "%swift_source_dir% /build/Ninja-DebugAssert/swift-windows-amd64"
131
- pushd "%swift_source_dir% /build/Ninja-DebugAssert/swift-windows-amd64"
117
+ mkdir "S: /build/Ninja-DebugAssert/swift-windows-amd64"
118
+ pushd "S: /build/Ninja-DebugAssert/swift-windows-amd64"
132
119
cmake -G "Ninja"^
133
120
-DCMAKE_BUILD_TYPE=Debug^
134
- -DCMAKE_C_COMPILER="%llvm_bin_dir% /clang-cl.exe"^
135
- -DCMAKE_CXX_COMPILER="%llvm_bin_dir% /clang-cl.exe"^
136
- -DSWIFT_PATH_TO_CMARK_SOURCE="%swift_source_dir% /cmark"^
121
+ -DCMAKE_C_COMPILER="S:/build/Ninja-DebugAssert/llvm-windows-amd64 /clang-cl.exe"^
122
+ -DCMAKE_CXX_COMPILER="S:/build/Ninja-DebugAssert/llvm-windows-amd64 /clang-cl.exe"^
123
+ -DSWIFT_PATH_TO_CMARK_SOURCE="S: /cmark"^
137
124
-DCMAKE_CXX_FLAGS="-Wno-c++98-compat -Wno-c++98-compat-pedantic"^
138
125
-DCMAKE_EXE_LINKER_FLAGS:STRING="/INCREMENTAL:NO"^
139
126
-DCMAKE_SHARED_LINKER_FLAGS="/INCREMENTAL:NO"^
140
127
-DSWIFT_INCLUDE_DOCS=NO^
141
- -DSWIFT_PATH_TO_LLVM_SOURCE="%swift_source_dir% /llvm"^
142
- -DSWIFT_PATH_TO_CLANG_SOURCE="%swift_source_dir% /clang"^
143
- -DSWIFT_PATH_TO_LIBDISPATCH_SOURCE="%swift_source_dir% /swift-corelibs-libdispatch"^
144
- -DSWIFT_PATH_TO_LLVM_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"^
145
- -DSWIFT_PATH_TO_CLANG_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"^
146
- -DSWIFT_PATH_TO_CMARK_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/cmark-windows-amd64"^
147
- -DSWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE="%swift_source_dir% /icu/include"^
148
- -DSWIFT_WINDOWS_x86_64_ICU_UC="%swift_source_dir% /icu/lib64/icuuc.lib"^
149
- -DSWIFT_WINDOWS_x86_64_ICU_I18N_INCLUDE="%swift_source_dir% /icu/include"^
150
- -DSWIFT_WINDOWS_x86_64_ICU_I18N="%swift_source_dir% /icu/lib64/icuin.lib"^
128
+ -DSWIFT_PATH_TO_LLVM_SOURCE="S: /llvm"^
129
+ -DSWIFT_PATH_TO_CLANG_SOURCE="S: /clang"^
130
+ -DSWIFT_PATH_TO_LIBDISPATCH_SOURCE="S: /swift-corelibs-libdispatch"^
131
+ -DSWIFT_PATH_TO_LLVM_BUILD="S: /build/Ninja-DebugAssert/llvm-windows-amd64"^
132
+ -DSWIFT_PATH_TO_CLANG_BUILD="S: /build/Ninja-DebugAssert/llvm-windows-amd64"^
133
+ -DSWIFT_PATH_TO_CMARK_BUILD="S: /build/Ninja-DebugAssert/cmark-windows-amd64"^
134
+ -DSWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE="S: /icu/include"^
135
+ -DSWIFT_WINDOWS_x86_64_ICU_UC="S: /icu/lib64/icuuc.lib"^
136
+ -DSWIFT_WINDOWS_x86_64_ICU_I18N_INCLUDE="S: /icu/include"^
137
+ -DSWIFT_WINDOWS_x86_64_ICU_I18N="S: /icu/lib64/icuin.lib"^
151
138
-DCMAKE_INSTALL_PREFIX="C:/Program Files (x86)/Swift"^
152
- "%swift_source_dir% /swift"
139
+ "S: /swift"
153
140
popd
154
- cmake --build "%swift_source_dir% /build/Ninja-DebugAssert/swift-windows-amd64"
141
+ cmake --build "S: /build/Ninja-DebugAssert/swift-windows-amd64"
155
142
```
156
143
157
144
- To create a Visual Studio project, you'll need to change the generator and,
@@ -171,21 +158,21 @@ cmake -G "Visual Studio 2017" "%swift_source_dir%/swift"^
171
158
- This must be done from within a developer command prompt and could take hours
172
159
depending on your system.
173
160
``` cmd
174
- mkdir "%swift_source_dir% /build/Ninja-DebugAssert/lldb-windows-amd64"
175
- pushd "%swift_source_dir% /build/Ninja-DebugAssert/lldb-windows-amd64"
176
- cmake -G "Ninja" "%swift_source_dir% /lldb"^
161
+ mkdir "S: /build/Ninja-DebugAssert/lldb-windows-amd64"
162
+ pushd "S: /build/Ninja-DebugAssert/lldb-windows-amd64"
163
+ cmake -G "Ninja" "S: /lldb"^
177
164
-DCMAKE_BUILD_TYPE=Debug^
178
- -DLLDB_PATH_TO_CMARK_SOURCE="%swift_source_dir% /cmark"^
179
- -DLLDB_PATH_TO_LLVM_SOURCE="%swift_source_dir% /llvm"^
180
- -DLLDB_PATH_TO_CLANG_SOURCE="%swift_source_dir% /clang"^
181
- -DLLDB_PATH_TO_SWIFT_SOURCE="%swift_source_dir% /swift"^
182
- -DLLDB_PATH_TO_CMARK_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/cmark-windows-amd64"^
183
- -DLLDB_PATH_TO_CLANG_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"^
184
- -DLLDB_PATH_TO_LLVM_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/llvm-windows-amd64"^
185
- -DLLDB_PATH_TO_SWIFT_BUILD="%swift_source_dir% /build/Ninja-DebugAssert/swift-windows-amd64"^
165
+ -DLLDB_PATH_TO_CMARK_SOURCE="S: /cmark"^
166
+ -DLLDB_PATH_TO_LLVM_SOURCE="S: /llvm"^
167
+ -DLLDB_PATH_TO_CLANG_SOURCE="S: /clang"^
168
+ -DLLDB_PATH_TO_SWIFT_SOURCE="S: /swift"^
169
+ -DLLDB_PATH_TO_CMARK_BUILD="S: /build/Ninja-DebugAssert/cmark-windows-amd64"^
170
+ -DLLDB_PATH_TO_CLANG_BUILD="S: /build/Ninja-DebugAssert/llvm-windows-amd64"^
171
+ -DLLDB_PATH_TO_LLVM_BUILD="S: /build/Ninja-DebugAssert/llvm-windows-amd64"^
172
+ -DLLDB_PATH_TO_SWIFT_BUILD="S: /build/Ninja-DebugAssert/swift-windows-amd64"^
186
173
-DLLVM_ENABLE_ASSERTIONS=YES
187
174
popd
188
- cmake --build "%swift_source_dir% /build/Ninja-RelWithDebInfoAssert/lldb-windows-amd64"
175
+ cmake --build "S: /build/Ninja-RelWithDebInfoAssert/lldb-windows-amd64"
189
176
```
190
177
191
178
### 9. Running tests on Windows
@@ -196,14 +183,33 @@ Running the testsuite on Windows has additional external dependencies. You must
196
183
2 . diffutils
197
184
3 . grep
198
185
4 . sed
186
+
187
+ ``` cmd
188
+ ninja -C "S:/build/Ninja-DebugAssert/swift-windows-amd64" check-swift
189
+ ```
199
190
200
- ### 10. Install Swift on Windows
191
+ ### 10. Build swift-corelibs-foundation
192
+
193
+ ``` cmd
194
+ mkdir "S:/build/Ninja-DebugAssert/swift-corelibs-foundation-windows-amd64"
195
+ pushd "S:/build/Ninja-DebugAssert/swift-corelibs-foundation-windows-amd64"
196
+ cmake -G "Ninja"^
197
+ -DCMAKE_BUILD_TYPE=Debug^
198
+ -DCMAKE_C_COMPILER="S:/build/Ninja-DebugAssert/llvm-windows-amd64/bin/clang-cl.exe"^
199
+ -DCURL_LIBRARY="S:/curl/builds/libcurl-VS15-x64-release-static-ipv6-sspi-winssl/lib/libcurl_a.lib"^
200
+ -DCURL_INCLUDE_DIR="S:/curl/builds/libcurl-VS15-x64-release-static-ipv6-sspi-winssl/include"^
201
+ -DICU_ROOT="S:/thirdparty/icu4c-63_1-Win64-MSVC2017"^
202
+ -DLIBXML2_LIBRARY="S:/libxml2/win32/bin.msvc/libxml2_a.lib"^
203
+ -DLIBXML2_INCLUDE_DIR="S:/libxml2/include"^
204
+ -DFOUNDATION_PATH_TO_LIBDISPATCH_SOURCE="S:/swift-corelibs-libdispatch"^
205
+ "S:/swift-corelibs-foundation"
206
+ ```
207
+
208
+ ### 11. Install Swift on Windows
201
209
202
210
- Run ninja install:
203
211
``` cmd
204
- pushd "%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"
205
- ninja install
206
- popd
212
+ ninja -C "S:/build/Ninja-DebugAssert/swift-windows-amd64" install
207
213
```
208
214
- Add the Swift on Windows binaries path (` C:\Program Files (x86)\Swift\bin ` ) to the
209
215
` Path ` environment variable.
@@ -212,29 +218,4 @@ popd
212
218
213
219
## MSVC
214
220
215
- Follow instructions 1-6 for ` clang-cl ` , but run the following instead to build Swift
216
-
217
- ``` cmd
218
- mkdir "%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"
219
- pushd "%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"
220
- cmake -G "Ninja"^
221
- -DCMAKE_BUILD_TYPE=Debug^
222
- -DSWIFT_PATH_TO_CMARK_SOURCE="%swift_source_dir%/cmark"^
223
- -DSWIFT_PATH_TO_CMARK_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64"^
224
- -DSWIFT_CMARK_LIBRARY_DIR="%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64/src"^
225
- -DSWIFT_PATH_TO_LLVM_SOURCE="%swift_source_dir%/llvm"^
226
- -DSWIFT_PATH_TO_LLVM_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
227
- -DSWIFT_PATH_TO_CLANG_SOURCE="%swift_source_dir%/llvm/tools/clang"^
228
- -DSWIFT_PATH_TO_CLANG_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
229
- -DICU_WINDOWS_x86_64_UC_INCLUDE="%swift_source_dir%/icu/include"^
230
- -DICU_WINDOWS_x86_64_UC_LIBRARY="%swift_source_dir%/icu/lib64/icuuc.lib"^
231
- -DICU_WINDOWS_x86_64_I18N_INCLUDE="%swift_source_dir%/icu/include"^
232
- -DICU_WINDOWS_x86_64_I18N_LIBRARY="%swift_source_dir%/icu/lib64/icuin.lib"^
233
- -DSWIFT_INCLUDE_DOCS=FALSE^
234
- -DSWIFT_INCLUDE_TESTS=FALSE^
235
- -DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=FALSE^
236
- -DSWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER=FALSE^
237
- "%swift_source_dir%/swift"
238
- popd
239
- cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"
240
- ```
221
+ To use ` cl ` instead, just remove the ` -DCMAKE_C_COMPILER ` and ` -DCMAKE_CXX_COMPILER ` parameters to the ` cmake ` invocations.
0 commit comments