You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Although it's possible to build the swift compiler entirely with Xcode (`--xcode`), often it's better to build with _ninja_ and use Xcode for editing and debugging.
106
-
This is very convenient because you get the benefits of the ninja build system and all the benefits of the Xcode IDE, like code completion, refactoring, debugging, etc.
107
-
108
-
To setup this environment a few steps are necessary:
109
-
* Create a new workspace.
110
-
* Create Xcode projects for LLVM and Swift with `utils/build-script --skip-build --xcode --skip-early-swift-driver`. Beside configuring, this needs to build a few LLVM files which are needed to configure the swift project.
111
-
* Add the generated LLVM and Swift projects to your workspace. They can be found in the build directories `build/Xcode-DebugAssert/llvm-macosx-x86_64/LLVM.xcodeproj` and `build/Xcode-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj`.
112
-
* Add the `swift/SwiftCompilerSources` package to the workspace.
113
-
* Create a new empty project `build-targets` (or however you want to name it) in the workspace, using the "External Build System" template.
114
-
* For each compiler tool you want to build (`swift-frontend`, `sil-opt`, etc.), add an "External Build System" target to the `build-targets` project.
115
-
* In the "Info" section of the target configuration, set:
116
-
* the _Build Tool_ to the full path of the `ninja` command
117
-
* the _Argument_ to the tool name (e.g. `swift-frontend`)
118
-
* the _Directory_ to the ninja swift build directory, e.g. `/absolute/path/to/build/Ninja-DebugAssert/swift-macosx-x86_64`. For debugging to work, this has to be a debug build of course.
119
-
* For each target, create a new scheme:
120
-
* In the _Build_ section add the corresponding build target that you created before.
121
-
* In the _Run/Info_ section select the built _Executable_ in the build directory (e.g. `/absolute/path/to/build/Ninja-DebugAssert/swift-macosx-x86_64/bin/swift-frontend`).
122
-
* In the _Run/Arguments_ section you can set the command line arguments with which you want to run the compiler tool.
123
-
* In the _Run/Options_ section you can set the working directory for debugging.
124
-
125
-
Now you are all set. You can build and debug like with a native Xcode project.
126
-
127
-
If the project structure changes, e.g. new source files are added or deleted, you just have to re-create the LLVM and Swift projects with `utils/build-script --skip-build --xcode --skip-early-swift-driver`.
Copy file name to clipboardExpand all lines: docs/HowToGuides/GettingStarted.md
+77-18Lines changed: 77 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,7 @@ toolchain as a one-off, there are a couple of differences:
25
25
-[Editing code](#editing-code)
26
26
-[Setting up your fork](#setting-up-your-fork)
27
27
-[First time Xcode setup](#first-time-xcode-setup)
28
+
-[Using Ninja with Xcode](#using-ninja-with-xcode)
28
29
-[Other IDEs setup](#other-ides-setup)
29
30
-[Editing](#editing)
30
31
-[Incremental builds with Ninja](#incremental-builds-with-ninja)
@@ -274,24 +275,6 @@ In the following sections, for simplicity, we will assume that you are using a
274
275
unless explicitly mentioned otherwise. You will need to slightly tweak the paths
275
276
for other build configurations.
276
277
277
-
### Using both Ninja and Xcode
278
-
279
-
Some contributors find it more convenient to use both Ninja and Xcode.
280
-
Typically this configuration consists of:
281
-
282
-
1. A Ninja build created with `--release-debuginfo`.
283
-
2. An Xcode build created with `--release-debuginfo --debug-swift`.
284
-
285
-
The Ninja build can be used for fast incremental compilation and running tests
286
-
quickly. The Xcode build can be used for debugging with high fidelity.
287
-
288
-
The additional flexibility comes with two issues: (1) consuming much more disk
289
-
space and (2) you need to maintain the two builds in sync, which needs extra
290
-
care when moving across branches.
291
-
292
-
### Integrate a Ninja build with Xcode
293
-
It is possible to integrate the Ninja build into Xcode. For details on how to set this up see [Using Ninja with Xcode in DevelopmentTips.md](/docs/DevelopmentTips.md#using-ninja-with-xcode).
294
-
295
278
### Troubleshooting build issues
296
279
297
280
- Double-check that all projects are checked out at the right branches.
@@ -372,6 +355,82 @@ select the following schemes:
372
355
run.
373
356
<!-- TODO: Insert SourceKit/stdlib specific instructions? -->
374
357
358
+
### Using Ninja with Xcode
359
+
360
+
Although it's possible to build the toolchain entirely with Xcode via `--xcode`,
361
+
a more efficient and robust option is to integrate a Ninja build with Xcode.
362
+
This is also convenient in that you can navigate, build, run, edit, and debug in
363
+
Xcode while retaining the option of using Ninja on the command line.
364
+
365
+
Assuming that you have already [built the toolchain via Ninja](#the-actual-build),
366
+
several more steps are necessary to set up this environment:
367
+
* Generate Xcode projects with `utils/build-script --skip-build --xcode --skip-early-swift-driver`.
368
+
This will first build a few LLVM files that are needed to configure the
369
+
projects.
370
+
* Create a new Xcode workspace.
371
+
* Add the generated Xcode projects or Swift packages that are relevant to your
372
+
tasks to your workspace. All the Xcode projects can be found among the
373
+
build artifacts in`build/Xcode-DebugAssert`. For example:
374
+
* If you are aiming for the compiler, add `build/Xcode-DebugAssert/swift-macosx-*/Swift.xcodeproj`.
375
+
This project also includes the standard library and runtime sources. If you
376
+
need the parts of the compiler that are implemented in Swift itself, add the
377
+
`swift/SwiftCompilerSources/Package.swift` package as well.
378
+
* If you are aiming for just the standard library or runtime, add
0 commit comments