diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 7fc2993d5..2051bd3cf 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: config: ["debug", "release"] - options: ["", "SWIFT_BUILD_DYNAMIC_LIBRARY=1"] + options: ["", "SWIFT_BUILD_DYNAMIC_LIBRARY=1", "SWIFT_JAVA=1"] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/Package.swift b/Package.swift index ac0e25c9c..35b0eec61 100644 --- a/Package.swift +++ b/Package.swift @@ -10,6 +10,7 @@ let buildMetadata = environment["SWIFTPM_BLUETOOTH_METADATA"] != "0" let generateCode = environment["SWIFTPM_ENABLE_PLUGINS"] != "0" let enableMacros = environment["SWIFTPM_ENABLE_MACROS"] != "0" let buildDocs = environment["BUILDING_FOR_DOCUMENTATION_GENERATION"] == "1" +let swiftJava = environment["SWIFT_JAVA"] == "1" // force building as dynamic library let libraryType: PackageDescription.Product.Library.LibraryType? = dynamicLibrary ? .dynamic : nil @@ -51,7 +52,10 @@ var package = Package( ], targets: [ .target( - name: "Bluetooth" + name: "Bluetooth", + exclude: [ + "swift-java.config" + ] ), .target( name: "BluetoothMetadata", @@ -190,3 +194,24 @@ if enableMacros { "BluetoothMacros" ] } + +if swiftJava { + package.platforms = [ + .macOS(.v15), + .iOS(.v13), + .watchOS(.v6), + .tvOS(.v13) + ] + package.dependencies += [ + .package( + url: "https://github.com/swiftlang/swift-java.git", + branch: "main" + ) + ] + package.targets[0].plugins = (package.targets[0].plugins ?? []) + [ + .plugin( + name: "JExtractSwiftPlugin", + package: "swift-java" + ) + ] +} diff --git a/Sources/Bluetooth/Data.swift b/Sources/Bluetooth/DataContainer.swift similarity index 100% rename from Sources/Bluetooth/Data.swift rename to Sources/Bluetooth/DataContainer.swift diff --git a/Sources/Bluetooth/swift-java.config b/Sources/Bluetooth/swift-java.config new file mode 100644 index 000000000..ab8c4ff4d --- /dev/null +++ b/Sources/Bluetooth/swift-java.config @@ -0,0 +1,4 @@ +{ + "javaPackage": "org.pureswift.bluetooth", + "mode": "jni" +} \ No newline at end of file