@@ -36,14 +36,6 @@ benefit of all Swift developers.
36
36
- [ Bisecting on SIL optimizer pass counts to identify optimizer bugs] ( #bisecting-on-sil-optimizer-pass-counts-to-identify-optimizer-bugs )
37
37
- [ Using git-bisect in the presence of branch forwarding/feature branches] ( #using-git-bisect-in-the-presence-of-branch-forwardingfeature-branches )
38
38
- [ Reducing SIL test cases using bug_reducer] ( #reducing-sil-test-cases-using-bug_reducer )
39
- - [ Debugging the Compiler Build] ( #debugging-the-compiler-build )
40
- - [ Build Dry Run] ( #build-dry-run )
41
- - [ Debugging the Compiler Driver] ( #debugging-the-compiler-driver-build )
42
- - [ Swift Compiler Driver F.A.Q] ( #swift-compiler-driver-f.a.q. )
43
- - [ Building the compiler without using the standalone driver] ( #building-the-compiler-without-the-standalone-driver )
44
- - [ Invoking the compiler without forwarding to the standalone driver] ( #invoking-the-compiler-without-forwarding-to-the-standalone-driver )
45
- - [ Reproducing the Compiler Driver build steps] ( #reproducing-the-compiler-driver-build-steps )
46
- - [ Installing the Compiler Driver] ( #installing-the-compiler-driver )
47
39
- [ Debugging Swift Executables] ( #debugging-swift-executables )
48
40
- [ Determining the mangled name of a function in LLDB] ( #determining-the-mangled-name-of-a-function-in-lldb )
49
41
- [ Manually symbolication using LLDB] ( #manually-symbolication-using-lldb )
@@ -815,131 +807,6 @@ reducing SIL test cases by:
815
807
For more information and a high level example, see:
816
808
./swift/utils/bug_reducer/README.md.
817
809
818
- # Debugging the Compiler Build
819
-
820
- ## Build Dry Run
821
-
822
- A "dry-run" invocation of the ` build-script ` (using the ` --dry-run ` flag) will
823
- print the commands that would be executed in a given build, without executing
824
- them. A dry-run script invocation output can be used to inspect the build stages
825
- of a given ` build-script ` configuration, or create script corresponding to one
826
- such configuration.
827
-
828
- # Debugging the Compiler Driver
829
-
830
- The Swift compiler uses a standalone compiler-driver application written in
831
- Swift: [ swift-driver] ( https://github.com/apple/swift-driver ) . When building the
832
- compiler using ` build-script ` , by default, the standalone driver will be built
833
- first, using the host toolchain, if the host toolchain contains a Swift
834
- compiler. If the host toolchain does not contain Swift, a warning is emitted and
835
- the legacy compiler-driver (integrated in the C++ code-base) will be used. In
836
- the future, a host toolchain containing a Swift compiler may become mandatory.
837
- Once the compiler is built, the compiler build directory (` swift-<OS>-<ARCH> ` )
838
- is updated with a symlink to the standalone driver, ensuring calls to the build
839
- directory's ` swift ` and ` swiftc ` always forward to the standalone driver.
840
-
841
- For more information about the driver, see:
842
- [ github.com/apple/swift-driver/blob/main/README.md] ( https://github.com/apple/swift-driver/blob/main/README.md )
843
-
844
- ## Swift Compiler Driver F.A.Q.
845
- > What's the difference between invoking 'swiftc' vs. 'swift-driver' at the top
846
- level?
847
-
848
- Today, ` swift ` and ` swiftc ` are symbolic links to the compiler binary
849
- (` swift-frontend ` ). Invoking ` swiftc ` causes the executable to detects that it
850
- is a compiler-driver invocation, and not a direct compiler-frontend invocation,
851
- by examining the invoked program's name. The compiler frontend can be invoked
852
- directly by invoking the ` swift-frontend ` executable, or passing in the
853
- ` -frontend ` option to ` swiftc ` .
854
-
855
- The standalone [ Compiler Driver] ( https://github.com/apple/swift-driver ) is
856
- installed as a separate ` swift-driver ` executable in the Swift toolchain's ` bin `
857
- directory. When a user launches the compiler by invoking ` swiftc ` , the C++ based
858
- compiler executable forwards the invocation to the ` swift-driver ` executable if
859
- one is found alongside it. This forwarding mechanism is in-place temporarily, to
860
- allow for an easy fallback to the legacy driver via one of the two escape
861
- hatches:
862
-
863
- - ` -disallow-use-new-driver ` command line flag
864
- - ` SWIFT_USE_OLD_DRIVER ` environment variable
865
-
866
- If the user is to directly invoke the ` swift-driver ` executable, the behaviour
867
- should be the same as invoking the ` swiftc ` executable, but without the option
868
- for a legacy driver fallback.
869
-
870
- Once the legacy driver is deprecated, ` swift ` and ` swiftc ` executables will
871
- become symbolic links to the ` swift-driver ` executable directly.
872
-
873
-
874
- > Will 'swiftc ... -###' always print the same set of commands for the old/new
875
- driver? Do they call 'swift-frontend' the same way?
876
-
877
- The standalone [ Compiler Driver] ( https://github.com/apple/swift-driver ) is meant
878
- to be a direct drop-in replacement for the C++-based legacy driver. It has the
879
- exact same command-line interface. The expectation is that its behaviour closely
880
- matches the legacy driver; however, during, and after the transition to the new
881
- driver being the default its behaviour may start to diverge from the legacy
882
- driver as par for the course of its evolution and gaining new features, etc.
883
- Today, broadly-speaking, sets of ` swift-frontend ` invocations generated by the
884
- two drivers are expected to be very similar.
885
-
886
- ## Building the compiler without the standalone driver
887
- One can build the compiler that does not rely on the standalone driver and
888
- instead uses the legacy, built-in driver using the ` build-script ` option:
889
- ` --skip-early-swift-driver ` .
890
-
891
- ## Invoking the compiler without forwarding to the standalone driver
892
- The Swift compiler can currently be invoked in an execution mode that will use
893
- the legacy C++-based compiler driver using one of the following two options:
894
- - Passing ` -disallow-use-new-driver ` argument to the ` swiftc ` invocation
895
- - Setting the ` SWIFT_USE_OLD_DRIVER ` environment variable
896
-
897
- ## Reproducing the Compiler Driver build steps
898
- A "[ dry-run] ( #build-dry-run ) " invocation of the ` build-script ` can be used to
899
- examine the SwiftDriver build stage and commands, without executing it. For
900
- example:
901
- ```
902
- $ utils/build-script --release-debuginfo --dry-run
903
- + mkdir -p /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert
904
- --- Building earlyswiftdriver ---
905
- + /SwiftWorkspace/swift-driver/Utilities/build-script-helper.py build --package-path /SwiftWorkspace/swift-driver --build-path /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/earlyswiftdriver-macosx-x86_64 --configuration release --toolchain /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr --ninja-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/ninja --cmake-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/cmake --local_compiler_build
906
- Building the standard library for: swift-test-stdlib-macosx-x86_64
907
- ...
908
- ```
909
- One of the first steps is an invocation of the driver's
910
- ` build-script-helper.py ` script which specifies that the driver us to be built
911
- (` build ` ) using the host toolchain (` --toolchain ` ) to a specified location
912
- (` --build-path ` ).
913
-
914
- ## Installing the Compiler Driver
915
- In order to create a Swift compiler installation (` --install-swift ` ), the
916
- standalone driver must be built as a separate build product using the
917
- * just-built* Swift compiler and toolchain (the ones built in the same
918
- ` build-script ` invocation, preceeding the SwiftDriver build product). The
919
- additional build product is added to the build by specifying the
920
- ` --swift-driver ` option of the ` build-script ` . The driver product is istalled
921
- into the resulting toolchain installation by specifying the
922
- ` --install-swift-driver ` option of the ` build-script ` .
923
-
924
- Note, a "dry-run" ` build-script ` invocation when installing the standalone
925
- driver will demonstrate the commands required to build and install the driver as
926
- a standalone build product:
927
- ```
928
- $ utils/build-script --release-debuginfo --dry-run --swift-driver --install-swift-driver
929
- ...
930
- --- Cleaning swiftdriver ---
931
- + /SwiftWorkspace/swift-driver/Utilities/build-script-helper.py clean --package-path /SwiftWorkspace/swift-driver --build-path /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/swiftdriver-macosx-x86_64 --configuration release --toolchain /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/toolchain-macosx-x86_64/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr --ninja-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/ninja --cmake-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/cmake
932
- --- Building swiftdriver ---
933
- + /SwiftWorkspace/swift-driver/Utilities/build-script-helper.py build --package-path /SwiftWorkspace/swift-driver --build-path /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/swiftdriver-macosx-x86_64 --configuration release --toolchain /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/toolchain-macosx-x86_64/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr --ninja-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/ninja --cmake-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/cmake
934
- --- Installing swiftdriver ---
935
- + /SwiftWorkspace/swift-driver/Utilities/build-script-helper.py install --package-path /SwiftWorkspace/swift-driver --build-path /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/swiftdriver-macosx-x
936
- 86_64 --configuration release --toolchain /SwiftWorkspace/build/Ninja-RelWithDebInfoAssert/toolchain-macosx-x86_64/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr --ninja-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/ninja --cmake-bin /Applications/Xcode.app/Contents/Developer/usr/local/bin/cmake
937
- ```
938
- These invocations of the driver's ` build-script-helper.py ` script specify the
939
- individual build actions (` clean ` , ` build ` , ` install ` ), the product build path
940
- (` --build-path ` ), and the * just-built* toolchain which should be used
941
- (` --toolchain ` ).
942
-
943
810
# Debugging Swift Executables
944
811
945
812
One can use the previous tips for debugging the Swift compiler with Swift
0 commit comments