[swift-build-dev] importing a *local* native dependency
Drew Crawford
drew at sealedabstract.com
Fri Dec 25 10:22:31 CST 2015
Just to be clear...
If I PRed one or both of these, it would be rejected?
I'm going to cook up some solution in any case, it's a question of whether I should be gearing up to distribute and maintain a long term fork. It's undesirable since it complicates upstreaming further work I do in my tree.
But it will be unavoidable if I need a solution before you want to design it, which sounds like it may be the present situation.
Sent from my iPhone
> On Dec 25, 2015, at 9:36 AM, Max Howell <max.howell at apple.com> wrote:
>
> This fulls under our "mixed targets" future plan.
>
> For now I think you'll not be able to use swiftpm at all. Sorry :(
>
>> On Dec 25, 2015, at 3:19 AM, Drew Crawford via swift-build-dev <swift-build-dev at swift.org> wrote:
>>
>> I'm trying to package a Swift library. This Swift library is tightly coupled to a native library. By "tightly coupled" here I really mean that only half the library is written in Swift, and the other half, as an implementation detail, is in some other language.
>>
>> You *probably* do not have a build environment for this other language just lying around, so my plan (actually, my current practice) is to distribute binaries of the non-Swift part, just checked into source control, and then link against them with a module map. Yes, I realize this isn't portable, but neither is anything else in this project, so I'll save that particular surprise for another day.
>>
>> The trouble is, swiftpm wants there to be some "other" repo called `CFoo` containing only a modulemap with paths that point to... /usr/local I guess? But
>>
>> 1. There is no other repo
>> 2. You have not installed the non-Swift half of my library to /usr/local
>> 3. You do not want to link against "some" version of the binary blob you have lying around from times past. You want to link against exactly the one I give you, because the work is versioned as a whole.
>>
>> I see two solutions to this problem.
>>
>> # Non-URL dependencies
>>
>> Behind this door, I can write a Package.swift like this:
>>
>> let package = Package(
>> name: "Foo",
>> dependencies: [
>> .Package(path: "CFoo"),
>> ],
>> )
>>
>> The semantic of this is that Foo depends on a package CFoo that is merely a folder in the current repository (e.g., we do not need to clone it from somewhere else).
>>
>> In my case CFoo would contain a module.map and a binary blob, but in the general case it is any arbitrary kind of package.
>>
>> This solves my three problems since 1) There's only one repo, 2) The binary is located with repo-based paths, 3) You're linking against the particular CFoo distributed in the repository.
>>
>> # Custom include paths
>>
>> Another possibility goes like this:
>>
>> let package = Package(
>> name: "Foo",
>> extraIncludePaths: ["CFoo"]
>> )
>>
>> The semantic of this is that we pass `-I CFoo` to swiftc (e.g. that is emitted into `other-args` of llbuild.yaml)
>>
>> In my case CFoo contains a module.map and a binary blob, but in the general case it contains any kind of header path that a package may want to import.
>>
>> There are certainly other possibilities besides these two, I'm just suggesting them because they seem straightforward based on my poking around in the sourcecode today.
>>
>> I am happy to contrib either of these (or something else proposed) but would like to achieve consensus on a design instead of PRing by surprise.
>>
>> _______________________________________________
>> swift-build-dev mailing list
>> swift-build-dev at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-build-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-build-dev/attachments/20151225/c797d49c/attachment.html>
More information about the swift-build-dev
mailing list