Skip to content

Commit f28e440

Browse files
authored
Merge pull request #21415 from apple/compnerd-patch-1
2 parents c3f899e + 6a991bc commit f28e440

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)