@@ -47,22 +47,22 @@ let package = Package(
47
47
48
48
. target(
49
49
name: " SwiftFormat " ,
50
- dependencies: omittingExternalDependenciesIfNecessary ( [
51
- . product( name: " Markdown " , package : " swift-markdown " ) ,
52
- . product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
53
- . product( name: " SwiftSyntaxBuilder " , package : " swift-syntax " ) ,
54
- . product( name: " SwiftOperators " , package : " swift-syntax " ) ,
55
- . product( name: " SwiftParser " , package : " swift-syntax " ) ,
56
- . product( name: " SwiftParserDiagnostics " , package : " swift-syntax " ) ,
57
- ] ) ,
50
+ dependencies: [
51
+ . product( name: " Markdown " , package : " swift-markdown " )
52
+ ]
53
+ + swiftSyntaxDependencies( [
54
+ " SwiftOperators " , " SwiftParser " , " SwiftParserDiagnostics " , " SwiftSyntax " , " SwiftSyntaxBuilder " ,
55
+ ] ) ,
58
56
exclude: [ " CMakeLists.txt " ]
59
57
) ,
60
58
. target(
61
59
name: " _SwiftFormatTestSupport " ,
62
- dependencies: omittingExternalDependenciesIfNecessary ( [
63
- " SwiftFormat " ,
64
- . product( name: " SwiftOperators " , package : " swift-syntax " ) ,
65
- ] )
60
+ dependencies: [
61
+ " SwiftFormat "
62
+ ]
63
+ + swiftSyntaxDependencies( [
64
+ " SwiftOperators " , " SwiftParser " , " SwiftParserDiagnostics " , " SwiftSyntax " , " SwiftSyntaxBuilder " ,
65
+ ] ) ,
66
66
) ,
67
67
. plugin(
68
68
name: " Format Source Code " ,
@@ -98,41 +98,44 @@ let package = Package(
98
98
) ,
99
99
. executableTarget(
100
100
name: " swift-format " ,
101
- dependencies: omittingExternalDependenciesIfNecessary ( [
101
+ dependencies: [
102
102
" _SwiftFormatInstructionCounter " ,
103
103
" SwiftFormat " ,
104
104
. product( name: " ArgumentParser " , package : " swift-argument-parser " ) ,
105
- . product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
106
- . product( name: " SwiftParser " , package : " swift-syntax " ) ,
107
- ] ) ,
105
+ ] + swiftSyntaxDependencies( [ " SwiftParser " , " SwiftSyntax " ] ) ,
108
106
exclude: [ " CMakeLists.txt " ] ,
109
107
linkerSettings: swiftformatLinkSettings
110
108
) ,
111
109
112
110
. testTarget(
113
111
name: " SwiftFormatPerformanceTests " ,
114
- dependencies: omittingExternalDependenciesIfNecessary ( [
112
+ dependencies: [
115
113
" SwiftFormat " ,
116
114
" _SwiftFormatTestSupport " ,
117
- . product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
118
- . product( name: " SwiftParser " , package : " swift-syntax " ) ,
119
- ] )
115
+ ] + swiftSyntaxDependencies( [ " SwiftParser " , " SwiftSyntax " ] ) ,
120
116
) ,
121
117
. testTarget(
122
118
name: " SwiftFormatTests " ,
123
- dependencies: omittingExternalDependenciesIfNecessary ( [
119
+ dependencies: [
124
120
" SwiftFormat " ,
125
121
" _SwiftFormatTestSupport " ,
126
122
. product( name: " Markdown " , package : " swift-markdown " ) ,
127
- . product( name: " SwiftOperators " , package : " swift-syntax " ) ,
128
- . product( name: " SwiftParser " , package : " swift-syntax " ) ,
129
- . product( name: " SwiftSyntax " , package : " swift-syntax " ) ,
130
- . product( name: " SwiftSyntaxBuilder " , package : " swift-syntax " ) ,
131
- ] )
123
+ ]
124
+ + swiftSyntaxDependencies( [
125
+ " SwiftOperators " , " SwiftParser " , " SwiftSyntax " , " SwiftSyntaxBuilder " ,
126
+ ] ) ,
132
127
) ,
133
128
]
134
129
)
135
130
131
+ func swiftSyntaxDependencies( _ names: [ String ] ) -> [ Target . Dependency ] {
132
+ if buildDynamicSwiftSyntaxLibrary {
133
+ return [ . product( name: " _SwiftSyntaxDynamic " , package : " swift-syntax " ) ]
134
+ } else {
135
+ return names. map { . product( name: $0, package : " swift-syntax " ) }
136
+ }
137
+ }
138
+
136
139
// MARK: - Parse build arguments
137
140
138
141
func hasEnvironmentVariable( _ name: String ) -> Bool {
@@ -147,28 +150,19 @@ var installAction: Bool { hasEnvironmentVariable("SWIFTFORMAT_CI_INSTALL") }
147
150
/// remote dependency.
148
151
var useLocalDependencies : Bool { hasEnvironmentVariable ( " SWIFTCI_USE_LOCAL_DEPS " ) }
149
152
150
- var omitExternalDependencies : Bool { hasEnvironmentVariable ( " SWIFTFORMAT_OMIT_EXTERNAL_DEPENDENCIES " ) }
151
-
152
- func omittingExternalDependenciesIfNecessary(
153
- _ dependencies: [ Target . Dependency ]
154
- ) -> [ Target . Dependency ] {
155
- guard omitExternalDependencies else {
156
- return dependencies
157
- }
158
- return dependencies. filter { dependency in
159
- if case . productItem( _, let package , _, _) = dependency {
160
- return package == nil
161
- }
162
- return true
163
- }
153
+ /// Whether swift-syntax is being built as a single dynamic library instead of as a separate library per module.
154
+ ///
155
+ /// This means that the swift-syntax symbols don't need to be statically linked, which alles us to stay below the
156
+ /// maximum number of exported symbols on Windows, in turn allowing us to build sourcekit-lsp using SwiftPM on Windows
157
+ /// and run its tests.
158
+ var buildDynamicSwiftSyntaxLibrary : Bool {
159
+ hasEnvironmentVariable ( " SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY " )
164
160
}
165
161
166
162
// MARK: - Dependencies
167
163
168
164
var dependencies : [ Package . Dependency ] {
169
- if omitExternalDependencies {
170
- return [ ]
171
- } else if useLocalDependencies {
165
+ if useLocalDependencies {
172
166
return [
173
167
. package ( path: " ../swift-argument-parser " ) ,
174
168
. package ( path: " ../swift-markdown " ) ,
0 commit comments