Skip to content

Commit 81f0f8b

Browse files
committed
command plugins: Build command plugin dependencies for the host, not the target
Since #7164, dependencies of command plugins are once again being built for the _target_ rather than the host. This causes problem when cross compiling because the host needs to be able to run the plugin dependencies, but finds target binaries instead. This problem was fixed before in #6791 by forcing command plugin dependencies to be built for the host by overriding the default build parameters in swiftTool.createBuildSystem(). The same solution still works in this commit, but a better long-term option would be to rework BuildOperation.plan() to handle command plugin dependencies specially, as it already does for build plugin dependencies. At present, BuildOperation.plan calls graph.invokeBuildToolPlugins to process sources. invokeBuildToolPlugins finds all build tool dependecies and builds them separately, using a specially-created BuildOperation instance: https://github.com/apple/swift-package-manager/blob/34efc0bfe9d40d9a019644ac8fcd0b852c491dfe/Sources/SPMBuildCore/Plugins/PluginInvocation.swift#L409 There is no equivalent step for command plugin dependencies, so they are built for the host architecture. Ideally we should rework BuildOperation.plan to build command and build plugin dependencies in the same way.
1 parent f313486 commit 81f0f8b

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

Sources/Commands/PackageTools/PluginCommand.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ struct PluginCommand: SwiftCommand {
319319
// Build or bring up-to-date any executable host-side tools on which this plugin depends. Add them and any binary dependencies to the tool-names-to-path map.
320320
let buildSystem = try swiftTool.createBuildSystem(
321321
explicitBuildSystem: .native,
322-
cacheBuildManifest: false
322+
cacheBuildManifest: false,
323+
productsBuildParameters: buildParameters // createBuildSystem treats build tool plugin dependencies specially, but not command tool plugins. Specifically BuildOperation.plan treats build tool plugin dependencies specially
323324
)
324325
let accessibleTools = try plugin.processAccessibleTools(
325326
packageGraph: packageGraph,

0 commit comments

Comments
 (0)