@@ -15,6 +15,7 @@ import Basics
15
15
@_spi ( SwiftPMInternal)
16
16
import Build
17
17
18
+ import struct PackageGraph. ModulesGraph
18
19
import struct PackageGraph. ResolvedModule
19
20
import struct PackageGraph. ResolvedProduct
20
21
import PackageModel
@@ -75,6 +76,7 @@ public let defaultTargetTriple: String = hostTriple.tripleString
75
76
#endif
76
77
77
78
public func mockBuildParameters(
79
+ destination: BuildParameters . Destination ,
78
80
buildPath: AbsolutePath ? = nil ,
79
81
config: BuildConfiguration = . debug,
80
82
toolchain: PackageModel . Toolchain = MockToolchain ( ) ,
@@ -90,6 +92,7 @@ public func mockBuildParameters(
90
92
omitFramePointers: Bool ? = nil
91
93
) -> BuildParameters {
92
94
try ! BuildParameters (
95
+ destination: destination,
93
96
dataPath: buildPath ?? AbsolutePath ( " /path/to/build " ) . appending ( triple. tripleString) ,
94
97
configuration: config,
95
98
toolchain: toolchain,
@@ -116,7 +119,10 @@ public func mockBuildParameters(
116
119
)
117
120
}
118
121
119
- public func mockBuildParameters( environment: BuildEnvironment ) -> BuildParameters {
122
+ public func mockBuildParameters(
123
+ destination: BuildParameters . Destination ,
124
+ environment: BuildEnvironment
125
+ ) -> BuildParameters {
120
126
let triple : Basics . Triple
121
127
switch environment. platform {
122
128
case . macOS:
@@ -131,9 +137,121 @@ public func mockBuildParameters(environment: BuildEnvironment) -> BuildParameter
131
137
fatalError ( " unsupported platform in tests " )
132
138
}
133
139
134
- return mockBuildParameters ( config: environment. configuration ?? . debug, triple: triple)
140
+ return mockBuildParameters (
141
+ destination: destination,
142
+ config: environment. configuration ?? . debug,
143
+ triple: triple
144
+ )
135
145
}
136
146
147
+ public func mockBuildPlan(
148
+ buildPath: AbsolutePath ? = nil ,
149
+ environment: BuildEnvironment ,
150
+ toolchain: PackageModel . Toolchain = MockToolchain ( ) ,
151
+ graph: ModulesGraph ,
152
+ commonFlags: PackageModel . BuildFlags = . init( ) ,
153
+ indexStoreMode: BuildParameters . IndexStoreMode = . off,
154
+ omitFramePointers: Bool ? = nil ,
155
+ driverParameters: BuildParameters . Driver = . init( ) ,
156
+ linkingParameters: BuildParameters . Linking = . init( ) ,
157
+ targetSanitizers: EnabledSanitizers = . init( ) ,
158
+ fileSystem fs: any FileSystem ,
159
+ observabilityScope: ObservabilityScope
160
+ ) throws -> Build . BuildPlan {
161
+ try mockBuildPlan (
162
+ buildPath: buildPath,
163
+ config: environment. configuration ?? . debug,
164
+ platform: environment. platform,
165
+ toolchain: toolchain,
166
+ graph: graph,
167
+ commonFlags: commonFlags,
168
+ indexStoreMode: indexStoreMode,
169
+ omitFramePointers: omitFramePointers,
170
+ driverParameters: driverParameters,
171
+ linkingParameters: linkingParameters,
172
+ targetSanitizers: targetSanitizers,
173
+ fileSystem: fs,
174
+ observabilityScope: observabilityScope
175
+ )
176
+ }
177
+
178
+ public func mockBuildPlan(
179
+ buildPath: AbsolutePath ? = nil ,
180
+ config: BuildConfiguration = . debug,
181
+ triple: Basics . Triple ? = nil ,
182
+ platform: PackageModel . Platform ? = nil ,
183
+ toolchain: PackageModel . Toolchain = MockToolchain ( ) ,
184
+ graph: ModulesGraph ,
185
+ commonFlags: PackageModel . BuildFlags = . init( ) ,
186
+ indexStoreMode: BuildParameters . IndexStoreMode = . off,
187
+ omitFramePointers: Bool ? = nil ,
188
+ driverParameters: BuildParameters . Driver = . init( ) ,
189
+ linkingParameters: BuildParameters . Linking = . init( ) ,
190
+ targetSanitizers: EnabledSanitizers = . init( ) ,
191
+ fileSystem fs: any FileSystem ,
192
+ observabilityScope: ObservabilityScope
193
+ ) throws -> Build . BuildPlan {
194
+ let inferredTriple : Basics . Triple
195
+ if let platform {
196
+ precondition ( triple == nil )
197
+
198
+ inferredTriple = switch platform {
199
+ case . macOS:
200
+ Triple . x86_64MacOS
201
+ case . linux:
202
+ Triple . arm64Linux
203
+ case . android:
204
+ Triple . arm64Android
205
+ case . windows:
206
+ Triple . windows
207
+ default :
208
+ fatalError ( " unsupported platform in tests " )
209
+ }
210
+ } else {
211
+ inferredTriple = triple ?? hostTriple
212
+ }
213
+
214
+ let commonDebuggingParameters = BuildParameters . Debugging (
215
+ triple: inferredTriple,
216
+ shouldEnableDebuggingEntitlement: config == . debug,
217
+ omitFramePointers: omitFramePointers
218
+ )
219
+
220
+ var destinationParameters = mockBuildParameters (
221
+ destination: . target,
222
+ buildPath: buildPath,
223
+ config: config,
224
+ toolchain: toolchain,
225
+ flags: commonFlags,
226
+ triple: inferredTriple,
227
+ indexStoreMode: indexStoreMode
228
+ )
229
+ destinationParameters. debuggingParameters = commonDebuggingParameters
230
+ destinationParameters. driverParameters = driverParameters
231
+ destinationParameters. linkingParameters = linkingParameters
232
+ destinationParameters. sanitizers = targetSanitizers
233
+
234
+ var hostParameters = mockBuildParameters (
235
+ destination: . host,
236
+ buildPath: buildPath,
237
+ config: config,
238
+ toolchain: toolchain,
239
+ flags: commonFlags,
240
+ triple: inferredTriple,
241
+ indexStoreMode: indexStoreMode
242
+ )
243
+ hostParameters. debuggingParameters = commonDebuggingParameters
244
+ hostParameters. driverParameters = driverParameters
245
+ hostParameters. linkingParameters = linkingParameters
246
+
247
+ return try BuildPlan (
248
+ destinationBuildParameters: destinationParameters,
249
+ toolsBuildParameters: hostParameters,
250
+ graph: graph,
251
+ fileSystem: fs,
252
+ observabilityScope: observabilityScope
253
+ )
254
+ }
137
255
enum BuildError : Swift . Error {
138
256
case error( String )
139
257
}
0 commit comments