Skip to content

Commit 6a991bc

Browse files
authored
Update WindowsBuild.md
Update the documentation to cover how to start building swift-corelibs-foundation now that the port of it is sufficiently far along that others can start helping soon. Take the opportunity to reduce some of the clutter in the parameters to make it easier to see the parameters at a glance.
1 parent c4bf8fd commit 6a991bc

File tree

1 file changed

+65
-84
lines changed

1 file changed

+65
-84
lines changed

docs/WindowsBuild.md

Lines changed: 65 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,7 @@ argument to `x86` and run
5858
VsDevCmd -arch=x86
5959
```
6060

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.
6762

6863
- Decide whether you want to build a release or debug version of Swift on Windows and
6964
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
7671

7772
```cmd
7873
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
8075
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
8378
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
8580
```
8681

8782
### 5. Build CMark
8883
- This must be done from within a developer command prompt. CMark is a fairly
8984
small project and should only take a few minutes to build.
9085
```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"
9488
popd
95-
cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64/"
89+
cmake --build "S:/build/Ninja-DebugAssert/cmark-windows-amd64/"
9690
```
9791

9892
### 6. Build LLVM/Clang
@@ -101,24 +95,17 @@ cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64/"
10195
type (e.g. `Debug`, `Release`, `RelWithDebInfoAssert`) for LLVM/Clang matches the
10296
build type for Swift.
10397
```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"
106100
cmake -G "Ninja"^
107101
-DLLVM_ENABLE_ASSERTIONS=TRUE^
108102
-DCMAKE_BUILD_TYPE=Debug^
109103
-DLLVM_ENABLE_PROJECTS=clang^
110104
-DLLVM_TARGETS_TO_BUILD=X86^
111105
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-windows-msvc^
112-
"%swift_source_dir%/llvm"
106+
"S:/llvm"
113107
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"
122109
```
123110

124111
### 7. Build Swift
@@ -127,31 +114,31 @@ set llvm_bin_dir="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64/
127114
- You may need to adjust the `SWIFT_WINDOWS_LIB_DIRECTORY` parameter depending on
128115
your target platform or Windows SDK version.
129116
```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"
132119
cmake -G "Ninja"^
133120
-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"^
137124
-DCMAKE_CXX_FLAGS="-Wno-c++98-compat -Wno-c++98-compat-pedantic"^
138125
-DCMAKE_EXE_LINKER_FLAGS:STRING="/INCREMENTAL:NO"^
139126
-DCMAKE_SHARED_LINKER_FLAGS="/INCREMENTAL:NO"^
140127
-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"^
151138
-DCMAKE_INSTALL_PREFIX="C:/Program Files (x86)/Swift"^
152-
"%swift_source_dir%/swift"
139+
"S:/swift"
153140
popd
154-
cmake --build "%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"
141+
cmake --build "S:/build/Ninja-DebugAssert/swift-windows-amd64"
155142
```
156143

157144
- 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"^
171158
- This must be done from within a developer command prompt and could take hours
172159
depending on your system.
173160
```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"^
177164
-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"^
186173
-DLLVM_ENABLE_ASSERTIONS=YES
187174
popd
188-
cmake --build "%swift_source_dir%/build/Ninja-RelWithDebInfoAssert/lldb-windows-amd64"
175+
cmake --build "S:/build/Ninja-RelWithDebInfoAssert/lldb-windows-amd64"
189176
```
190177

191178
### 9. Running tests on Windows
@@ -196,14 +183,33 @@ Running the testsuite on Windows has additional external dependencies. You must
196183
2. diffutils
197184
3. grep
198185
4. sed
186+
187+
```cmd
188+
ninja -C "S:/build/Ninja-DebugAssert/swift-windows-amd64" check-swift
189+
```
199190

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
201209

202210
- Run ninja install:
203211
```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
207213
```
208214
- Add the Swift on Windows binaries path (`C:\Program Files (x86)\Swift\bin`) to the
209215
`Path` environment variable.
@@ -212,29 +218,4 @@ popd
212218

213219
## MSVC
214220

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

Comments
 (0)