Skip to content

Commit 7798d2b

Browse files
committed
[docs] Move the instructions for using Ninja with Xcode to GettingStarted.md
1 parent e8afe15 commit 7798d2b

File tree

2 files changed

+76
-79
lines changed

2 files changed

+76
-79
lines changed

docs/DevelopmentTips.md

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -99,79 +99,3 @@ For example, to have `build-script` spawn only one link job at a time, we can in
9999
```
100100
build-script --llvm-cmake-options=-DLLVM_PARALLEL_LINK_JOBS=1 --swift-cmake-options=-DSWIFT_PARALLEL_LINK_JOBS=1
101101
```
102-
103-
## Using Ninja with Xcode
104-
105-
Although it's possible to build the toolchain entirely with Xcode via `--xcode`,
106-
a more efficient and robust option is to integrate a Ninja build with Xcode.
107-
This is also convenient in that you can navigate, build, run, edit and debug in
108-
Xcode while retaining the option of using Ninja on the command line.
109-
110-
Assuming that you have already [built the toolchain via Ninja](#the-actual-build),
111-
several more steps are necessary to set up this environment:
112-
* Generate Xcode projects with `utils/build-script --skip-build --xcode --skip-early-swift-driver`.
113-
This will first build a few LLVM files that are needed to configure the
114-
projects.
115-
* Create a new Xcode workspace.
116-
* Add the generated Xcode projects or Swift packages that are relevant to your
117-
tasks to your workspace. All the Xcode projects can be found among the
118-
build artifacts in `build/Xcode-DebugAssert`. For example:
119-
* If you are aiming for the compiler, add `build/Xcode-DebugAssert/swift-macosx-*/Swift.xcodeproj`.
120-
This project also includes the standard library and runtime sources. If you
121-
need the parts of the compiler that are implemented in Swift itself, add the
122-
`swift/SwiftCompilerSources/Package.swift` package as well.
123-
* If you are aiming for just the standard library or runtime, add
124-
`build/Xcode-DebugAssert/swift-macosx-*/stdlib/Swift-stdlib.xcodeproj`.
125-
<!-- FIXME: Without this "hard" line break, the note doesn’t get properly spaced from the bullet -->
126-
<br />
127-
128-
> **Warning**
129-
> Adding both `Swift.xcodeproj` and `LLVM.xcodeproj` *might* slow down the IDE
130-
and is not recommended unless you know what you're doing.
131-
132-
In general, we encourage you to add only what you need. Keep in mind that none
133-
of the generated Xcode projects are required to build or run with this setup
134-
because we are using Ninja—an *external* build system; rather, they should be
135-
viewed as a means of leveraging the navigation, editing and debugging features
136-
of the IDE in relation to the source code they wrap.
137-
138-
* Create an empty Xcode project in the workspace, using the
139-
_External Build System_ template.
140-
* For a Ninja target that you want to build (e.g. `swift-frontend`), add a
141-
target to the empty project, using the _External Build System_ template.
142-
* In the _Info_ pane of the target settings, set
143-
* _Build Tool_ to the path of the `ninja` executable (the output of
144-
`which ninja` on the command line)
145-
* _Arguments_ to the Ninja target name (e.g. `swift-frontend`)
146-
* _Directory_ to the path of the build directory associated with the Ninja
147-
target. For Swift targets, including the standard library and runtime, you
148-
want `path/to/swift-project/build/Ninja-*/swift-macosx-*`
149-
* Add a scheme for the target. Be sure not to select a target from one the
150-
generated Xcode projects.
151-
* > **Note**
152-
> Ignore this step if the target associates to a non-executable Ninja target
153-
like `swift-stdlib`.
154-
155-
Adjust the _Run_ action settings of the scheme:
156-
* In the _Info_ pane, select the _Executable_ built by the Ninja target from
157-
the appropriate `bin` directory (e.g. `build/Ninja-*/swift-macosx-*/bin/swift-frontend`).
158-
* In the _Arguments_ pane, add the command line arguments that you want to
159-
pass to the executable on launch (e.g. `path/to/file.swift -typecheck` for
160-
`swift-frontend`).
161-
* You can optionally set the working directory for debugging in the
162-
_Options_ pane.
163-
* Configure as many more target-scheme pairs as you need.
164-
165-
Now you are all set! You can build, run and debug as with a native Xcode
166-
project. If an `update-checkout` routine or a structural change—such as when
167-
source files are added or deleted—happens to impact your editing experience,
168-
simply regenerate the Xcode projects.
169-
170-
> **Note**
171-
> * For debugging to *fully* work for a given component—say, the compiler—the
172-
`build-script` invocation for the Ninja build must be arranged to
173-
[build a debug variant of that component](#debugging-issues).
174-
> * Xcode's indexing can occasionally start slipping after switching to and back
175-
from a distant branch, resulting in a noticeable slowdown. To sort things
176-
out, close the workspace and delete the _Index_ directory from the
177-
workspace's derived data before reopening.

docs/HowToGuides/GettingStarted.md

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,6 @@ The additional flexibility comes with two issues: (1) consuming much more disk
285285
space and (2) you need to maintain the two builds in sync, which needs extra
286286
care when moving across branches.
287287

288-
### Integrate a Ninja build with Xcode
289-
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).
290-
291288
### Troubleshooting build issues
292289

293290
- Double-check that all projects are checked out at the right branches.
@@ -368,6 +365,82 @@ select the following schemes:
368365
run.
369366
<!-- TODO: Insert SourceKit/stdlib specific instructions? -->
370367
368+
### Using Ninja with Xcode
369+
370+
Although it's possible to build the toolchain entirely with Xcode via `--xcode`,
371+
a more efficient and robust option is to integrate a Ninja build with Xcode.
372+
This is also convenient in that you can navigate, build, run, edit and debug in
373+
Xcode while retaining the option of using Ninja on the command line.
374+
375+
Assuming that you have already [built the toolchain via Ninja](#the-actual-build),
376+
several more steps are necessary to set up this environment:
377+
* Generate Xcode projects with `utils/build-script --skip-build --xcode --skip-early-swift-driver`.
378+
This will first build a few LLVM files that are needed to configure the
379+
projects.
380+
* Create a new Xcode workspace.
381+
* Add the generated Xcode projects or Swift packages that are relevant to your
382+
tasks to your workspace. All the Xcode projects can be found among the
383+
build artifacts in `build/Xcode-DebugAssert`. For example:
384+
* If you are aiming for the compiler, add `build/Xcode-DebugAssert/swift-macosx-*/Swift.xcodeproj`.
385+
This project also includes the standard library and runtime sources. If you
386+
need the parts of the compiler that are implemented in Swift itself, add the
387+
`swift/SwiftCompilerSources/Package.swift` package as well.
388+
* If you are aiming for just the standard library or runtime, add
389+
`build/Xcode-DebugAssert/swift-macosx-*/stdlib/Swift-stdlib.xcodeproj`.
390+
<!-- FIXME: Without this "hard" line break, the note doesn’t get properly spaced from the bullet -->
391+
<br />
392+
393+
> **Warning**
394+
> Adding both `Swift.xcodeproj` and `LLVM.xcodeproj` *might* slow down the IDE
395+
and is not recommended unless you know what you're doing.
396+
397+
In general, we encourage you to add only what you need. Keep in mind that none
398+
of the generated Xcode projects are required to build or run with this setup
399+
because we are using Ninja—an *external* build system; rather, they should be
400+
viewed as a means of leveraging the navigation, editing and debugging features
401+
of the IDE in relation to the source code they wrap.
402+
403+
* Create an empty Xcode project in the workspace, using the
404+
_External Build System_ template.
405+
* For a Ninja target that you want to build (e.g. `swift-frontend`), add a
406+
target to the empty project, using the _External Build System_ template.
407+
* In the _Info_ pane of the target settings, set
408+
* _Build Tool_ to the path of the `ninja` executable (the output of
409+
`which ninja` on the command line)
410+
* _Arguments_ to the Ninja target name (e.g. `swift-frontend`)
411+
* _Directory_ to the path of the build directory associated with the Ninja
412+
target. For Swift targets, including the standard library and runtime, you
413+
want `path/to/swift-project/build/Ninja-*/swift-macosx-*`
414+
* Add a scheme for the target. Be sure not to select a target from one the
415+
generated Xcode projects.
416+
* > **Note**
417+
> Ignore this step if the target associates to a non-executable Ninja target
418+
like `swift-stdlib`.
419+
420+
Adjust the _Run_ action settings of the scheme:
421+
* In the _Info_ pane, select the _Executable_ built by the Ninja target from
422+
the appropriate `bin` directory (e.g. `build/Ninja-*/swift-macosx-*/bin/swift-frontend`).
423+
* In the _Arguments_ pane, add the command line arguments that you want to
424+
pass to the executable on launch (e.g. `path/to/file.swift -typecheck` for
425+
`swift-frontend`).
426+
* You can optionally set the working directory for debugging in the
427+
_Options_ pane.
428+
* Configure as many more target-scheme pairs as you need.
429+
430+
Now you are all set! You can build, run and debug as with a native Xcode
431+
project. If an `update-checkout` routine or a structural change—such as when
432+
source files are added or deleted—happens to impact your editing experience,
433+
simply regenerate the Xcode projects.
434+
435+
> **Note**
436+
> * For debugging to *fully* work for a given component—say, the compiler—the
437+
`build-script` invocation for the Ninja build must be arranged to
438+
[build a debug variant of that component](#debugging-issues).
439+
> * Xcode's indexing can occasionally start slipping after switching to and back
440+
from a distant branch, resulting in a noticeable slowdown. To sort things
441+
out, close the workspace and delete the _Index_ directory from the
442+
workspace's derived data before reopening.
443+
371444
### Other IDEs setup
372445
373446
You can also use other editors and IDEs to work on Swift.

0 commit comments

Comments
 (0)