Skip to content

Prebuilts for all host targets#9905

Open
dschaefer2 wants to merge 16 commits into
swiftlang:mainfrom
dschaefer2:prebuiltsHost
Open

Prebuilts for all host targets#9905
dschaefer2 wants to merge 16 commits into
swiftlang:mainfrom
dschaefer2:prebuiltsHost

Conversation

@dschaefer2
Copy link
Copy Markdown
Member

@dschaefer2 dschaefer2 commented Apr 8, 2026

Add support for prebuilts for all targets that build for host. Remove the previous attempt that used platform constraints on the modules.

Creates a new BinaryModule kind for Prebuilts so they can be explicit in the module graph instead of adding flags to all dependents of the prebuilts. We also remove those PREBUILT_ flags since they are no longer needed.

A hook is added to the PlatformsCondition to model whether it is satisfied by a platform that supports the prebuilts. Dependents of the prebuilts module mark the dependency as true (i.e. for host) while leaving the dependencies on the source modules as false (i.e. for non-host). This allows the module to depend on both and the build system to decide which one to use to match the prebuilts platform.

For native, this translates into the host destination builds, i.e. host tools, using the prebuilts and the target destination (even if it's the same as the host) to use the corresponding modules from source.

For SwiftBuild, this uses a new extension to the PlatformFilter to exclude the named platform/environment. The prebuilt dependencies have a platform filter of host and the corresponding source module to exclude the host.

Also cleaned up how the prebuilts are passed into the resolution code. The product name to library isn't really required since there is only one prebuilt library for the foreseeable future.

I had attempted in 6.3 to support using swift-syntax prebuilts
for all host target builds. This would allow packages that have
code generators invoked from plugins to take advantage of the
build performance gain as well. SwiftBuild didn't have full
support for cross building from all host platforms so I had to
back that out. But for 6.4 it seems to be ready.

This brings back the previous attempt but only for the Native
build system currently. I'll need more work in SwiftBuild itself
to ensure I have the full power of platform filters for the
target dependencies and build settings for host to make this work.

For now this is just a WIP. Once I have the SwiftBuild piece,
I'll add it here and we can push it forward.
@dschaefer2 dschaefer2 changed the title [WIP] Prebuilts for host - native build edition [WIP] Prebuilts for host Apr 16, 2026
@dschaefer2 dschaefer2 changed the title [WIP] Prebuilts for host [WIP] Prebuilts for all host targets Apr 16, 2026
@dschaefer2 dschaefer2 changed the title [WIP] Prebuilts for all host targets Prebuilts for all host targets May 8, 2026
@dschaefer2
Copy link
Copy Markdown
Member Author

@swift-ci please test

unsafeAllowedPackages: Set<PackageReference> = [],
binaryArtifacts: [PackageIdentity: [String: BinaryArtifact]],
prebuilts: [PackageIdentity: [String: PrebuiltLibrary]], // Product name to library mapping
prebuilts: [PackageIdentity: [PrebuiltLibrary]], // Product name to library mapping
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That comment should be fixed for the change. I'll fix if we need a respin. This isn't worth losing another day over.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant