@@ -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 " ,
@@ -150,9 +150,16 @@ let package = Package(
150
150
] ,
151
151
products: products,
152
152
dependencies: dependencies,
153
- targets: targets
154
153
)
155
154
155
+ func swiftSyntaxDependencies( _ names: [ String ] ) -> [ Target . Dependency ] {
156
+ if buildDynamicSwiftSyntaxLibrary {
157
+ return [ . product( name: " _SwiftSyntaxDynamic " , package : " swift-syntax " ) ]
158
+ } else {
159
+ return names. map { . product( name: $0, package : " swift-syntax " ) }
160
+ }
161
+ }
162
+
156
163
// MARK: - Parse build arguments
157
164
158
165
func hasEnvironmentVariable( _ name: String ) -> Bool {
@@ -174,6 +181,15 @@ var useLocalDependencies: Bool { hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS"
174
181
/// the `swift test` invocation so that all pre-built modules can be found.
175
182
var buildOnlyTests : Bool { hasEnvironmentVariable ( " SWIFTFORMAT_BUILD_ONLY_TESTS " ) }
176
183
184
+ /// Whether swift-syntax is being built as a single dynamic library instead of as a separate library per module.
185
+ ///
186
+ /// This means that the swift-syntax symbols don't need to be statically linked, which alles us to stay below the
187
+ /// maximum number of exported symbols on Windows, in turn allowing us to build sourcekit-lsp using SwiftPM on Windows
188
+ /// and run its tests.
189
+ var buildDynamicSwiftSyntaxLibrary : Bool {
190
+ hasEnvironmentVariable ( " SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY " )
191
+ }
192
+
177
193
// MARK: - Dependencies
178
194
179
195
var dependencies : [ Package . Dependency ] {
0 commit comments