That isn’t quite what I mean.
There’s a system-level library, in say /usr/local/lib/libfoo.dylib (or libfoo.so on Linux), with a header in /usr/local/include/foo.h.
foo.h has complex macros that cannot be imported into Swift, so they need a C wrapper/bridge.
This is, say, foo_bridge.c and foo_bridge.h, where the source code defines global variables and functions, as necessary, to replace the macros and the header file has extern variables and function declarations. This must be compiled into a library that itself links with libfoo.
To use libfoo from Swift, it must be linked with foo_bridge so that it can use the macro replacements.
Currently, I can create a package called CFoo and one called CFooBridge that depends on CFoo, and have Swift code (e.g. a Swift wrapper called Foo) depend on CFooBridge. However, this is not ideal. I would prefer that the bridging code is within the CFoo package, as using CFoo without the bridging code is impossible from Swift. It is this that I have not figured out how to do, or if it is possible.
On Jul 24, 2016, at 09:12, Andrey Fidrya <email@example.com> wrote:
It's possible to declare multiple submodules in Package.swift. For example:
let package = Package(
Sources/CSQLite/ contains sqlite3.c, module.map etc
Source/SQLite/ - contains Swift code.
On 15 Jul 2016, at 20:56, Omri Mor via swift-users <firstname.lastname@example.org <mailto:email@example.com>> wrote:
I’m trying to link some Swift code a C library. I have generated a Swift package for the library, but the library cannot be directly used from Swift – it relies on some complex macros that cannot be imported.
I’ve created C code and header files that replace these macros with variables and functions (where applicable). I’d like to be able to have this code within the package for the library and have the C code be compiled so that Swift code is linked with both it and the library.
I think I can have the C code be in a different package and have the library package depend on it, but I’d prefer to avoid that – using the library from Swift is impossible without the C bridge, so it should be part of the same package.
Is this possible?
swift-users mailing list