-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate xcframework packaging from xcodebuild to SwiftPM #7035
Comments
I'd love to help with this, but I imagine the bulk of the work is on the xcodebuild side which isn't open source. |
The more I've thought about this, I realize that we probably can't move this function out of xcodebuild due to being able to package objective-c based frameworks and libraries. Maybe the larger question should be how to provide a better cross platform format that SPM would be happy with for these binary artifacts? Additionally, does an xcframework allow for the inclusion of other executable resources like apps that be loaded as part of the framework itself, or not really? |
Can you elaborate on what "loaded" means here? How would you expect executable binaries to be loaded? At run time or build time? |
If cross platform support is the main concern here, we already have the artifact bundle format for non-Apple platforms. I believe @MaxDesiatov was also working on adding support for that to library targets (today it is only available for executables). |
Oh! Is there documentation for this format? Cross platform artifact sharing
is the main problem I’m trying to mitigate without needing to use something
like nuget which is available across all platforms we’re targeting.
…On Mon, Oct 30, 2023 at 11:45 AM Boris Bügling ***@***.***> wrote:
If cross platform support is the main concern here, we already have the
artifact bundle format for non-Apple platforms. I believe @MaxDesiatov
<https://github.com/MaxDesiatov> was also working on adding support for
that to library targets (today it is only available for executables).
—
Reply to this email directly, view it on GitHub
<#7035 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAAPTL2QZVCSS5YGBBGA2MLYB7DQNAVCNFSM6AAAAAA6OTSSCCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOBVGUYDANBSGY>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Yes, the format is specified in SE-0305. Per the proposal it only supports executables. SE-0387 reuses this format for Swift SDKs. I have a PoC for libraries in #6967, but that will require an implementation update, and an addition of a checking mechanism for libc/libc++ flavors and versions. And when all of that is ready in a PoC implementation, we'll have to pitch it on the forums before it goes anywhere. |
Ah cool, so this is, unfortunately, not imminent, but seems like it's actively being worked on. I'm just trying to figure out how much time to invest in a different solution vs doing what I can to help this along. Any thoughts @MaxDesiatov ? |
Also let me know however I can help, I'm (selfishly) very interested in this! |
The main roadblock with this work is that it has to be a solution that works for all platforms that Swift supports, but only Darwin platforms support ABI stability, and only Darwin platforms can have deployment targets cleanly specified. Just looking at Linux, we have multiple edge cases to consider:
When we have clearly specified answers to these questions and mechanisms to implement them (help with that is appreciated), then PoC work can proceed. |
Wow, lots of edge cases! Apologies if any of the below is uninformed and there are already really good reasons to not do things that way, I'm just exploring this space myself :) For questions, 1 through 3, would we consider implementing something like a For number 4 I'm not quite sure what the what this scenario is so I don't have any ideas sadly! For number 5, would we not want to ask the user what package management system they use, and shell out to that to find things like installed version, system paths, etc? Apologies if this is a bit naïve, but I figured I'd ask to better orient myself around the goals y'all have with SPM. |
@MaxDesiatov We need this feature for the Godot swift bindings for Windows (and Linux). Building them takes about 13 minutes on my 16 core machine. MSVC binaries are generally compatible within the Visual Studio 2015 and later versions:
https://learn.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-170 |
I tried to migrate #6967 to the current main branch and created an example project that works across macOS, Linux, and Windows. You can find the code and build instructions here for those interested. In my case, I need to use Skia in a Swift project. Building Skia requires specialized tools such as Additionally, since most of Skia’s dependencies are statically linked, perhaps the mechanism for ensuring the compatibility of dynamic libraries isn’t as critical in such cases. |
Description
Binary targets are a vital part of the SwiftPM ecosystem and currently any discussions about extending the format or expanding usage of this format (or xcframeworks) in general are limited due to the packaging tool being included as part of xcodebuild. Interestingly, computing the checksum for a binary target is included as part of the
swift package
suite of tools, but not the creation of said package.I believe migrating this functionality from xcodebuild to SwiftPM would be advantageous as it could open up discussions to make SwiftPM even more useful on non-Darwin platforms that want to use Swift.
Expected behavior
I'd like to write something like the following:
swift package create-xcframework -framework <path> [-framework <path>...] -output <path>
or
swift package -create-xcframework -library <path> [-headers <path>] [-library <path> [-headers <path>]...] -output <path>
Which would create the framework similarly as it does when running the command from
xcodebuild
Actual behavior
This command doesn't exist today and you're forced to run
xcodebuild -create-xcframework
on macOS.Steps to reproduce
xcodebuild -create-xcframework ...
orswift package create-xcframework ...
and see that it doesn't workSwift Package Manager version/commit hash
Swift Package Manager - Swift 5.9.0
Swift & OS version (output of
swift --version && uname -a
)swift-driver version: 1.87.1 Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1)
Target: arm64-apple-macosx14.0
Darwin zerocool.localdomain 23.0.0 Darwin Kernel Version 23.0.0: Fri Sep 15 14:41:43 PDT 2023; root:xnu-10002.1.13~1/RELEASE_ARM64_T6000 arm64
The text was updated successfully, but these errors were encountered: