@@ -42,21 +42,21 @@ var targets: [Target] = [
42
42
. target(
43
43
name: " SwiftFormat " ,
44
44
dependencies: [
45
- . product( name: " Markdown " , package : " swift-markdown " ) ,
46
- . product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
47
- . product( name: " SwiftSyntaxBuilder " , package : " swift-syntax " ) ,
48
- . product( name: " SwiftOperators " , package : " swift-syntax " ) ,
49
- . product( name: " SwiftParser " , package : " swift-syntax " ) ,
50
- . product( name: " SwiftParserDiagnostics " , package : " swift-syntax " ) ,
51
- ] ,
45
+ . product( name: " Markdown " , package : " swift-markdown " )
46
+ ]
47
+ + swiftSyntaxDependencies( [
48
+ " SwiftOperators " , " SwiftParser " , " SwiftParserDiagnostics " , " SwiftSyntax " , " SwiftSyntaxBuilder " ,
49
+ ] ) ,
52
50
exclude: [ " CMakeLists.txt " ]
53
51
) ,
54
52
. target(
55
53
name: " _SwiftFormatTestSupport " ,
56
54
dependencies: [
57
- " SwiftFormat " ,
58
- . product( name: " SwiftOperators " , package : " swift-syntax " ) ,
55
+ " SwiftFormat "
59
56
]
57
+ + swiftSyntaxDependencies( [
58
+ " SwiftOperators " , " SwiftParser " , " SwiftParserDiagnostics " , " SwiftSyntax " , " SwiftSyntaxBuilder " ,
59
+ ] )
60
60
) ,
61
61
. plugin(
62
62
name: " Format Source Code " ,
@@ -98,7 +98,7 @@ var targets: [Target] = [
98
98
. product( name: " ArgumentParser " , package : " swift-argument-parser " ) ,
99
99
. product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
100
100
. product( name: " SwiftParser " , package : " swift-syntax " ) ,
101
- ] ,
101
+ ] + swiftSyntaxDependencies ( [ " SwiftParser " , " SwiftSyntax " ] ) ,
102
102
exclude: [ " CMakeLists.txt " ] ,
103
103
linkerSettings: swiftformatLinkSettings
104
104
) ,
@@ -110,7 +110,7 @@ var targets: [Target] = [
110
110
" _SwiftFormatTestSupport " ,
111
111
. product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
112
112
. product( name: " SwiftParser " , package : " swift-syntax " ) ,
113
- ]
113
+ ] + swiftSyntaxDependencies ( [ " SwiftParser " , " SwiftSyntax " ] )
114
114
) ,
115
115
. testTarget(
116
116
name: " SwiftFormatTests " ,
@@ -153,6 +153,14 @@ let package = Package(
153
153
targets: targets
154
154
)
155
155
156
+ func swiftSyntaxDependencies( _ names: [ String ] ) -> [ Target . Dependency ] {
157
+ if buildDynamicSwiftSyntaxLibrary {
158
+ return [ . product( name: " _SwiftSyntaxDynamic " , package : " swift-syntax " ) ]
159
+ } else {
160
+ return names. map { . product( name: $0, package : " swift-syntax " ) }
161
+ }
162
+ }
163
+
156
164
// MARK: - Parse build arguments
157
165
158
166
func hasEnvironmentVariable( _ name: String ) -> Bool {
@@ -174,6 +182,15 @@ var useLocalDependencies: Bool { hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS"
174
182
/// the `swift test` invocation so that all pre-built modules can be found.
175
183
var buildOnlyTests : Bool { hasEnvironmentVariable ( " SWIFTFORMAT_BUILD_ONLY_TESTS " ) }
176
184
185
+ /// Whether swift-syntax is being built as a single dynamic library instead of as a separate library per module.
186
+ ///
187
+ /// This means that the swift-syntax symbols don't need to be statically linked, which alles us to stay below the
188
+ /// maximum number of exported symbols on Windows, in turn allowing us to build sourcekit-lsp using SwiftPM on Windows
189
+ /// and run its tests.
190
+ var buildDynamicSwiftSyntaxLibrary : Bool {
191
+ hasEnvironmentVariable ( " SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY " )
192
+ }
193
+
177
194
// MARK: - Dependencies
178
195
179
196
var dependencies : [ Package . Dependency ] {
0 commit comments