main
swift 71 lines 2.54 KB
Raw
1 // swift-tools-version:6.2
2 import Foundation
3 import PackageDescription
4
5 let packageRoot = URL(fileURLWithPath: #filePath).deletingLastPathComponent()
6 let localFrameworkPath = "DemucsFramework.xcframework"
7 let localFrameworkAbsolutePath = packageRoot.appendingPathComponent(localFrameworkPath).path
8
9 // Updated automatically by demucs-rs's release-sdk-swift workflow. Keep the
10 // layout: the workflow rewrites the quoted string on the line after each `let`.
11 let releaseFrameworkURL =
12 "https://github.com/SplitFireAI/demucs-rs/releases/download/swift-v0.1.0/DemucsFramework.xcframework.zip"
13 let releaseFrameworkChecksum =
14 "618b2d32ba79780310745fe4d452c8382bdd448f8efa09f06d2d518caaa6efac"
15
16 // `make macos` (or ios, tvos, visionos) drops a locally built framework next to
17 // this file; SwiftPM uses it when present and the release asset otherwise.
18 let demucsFrameworkTarget: Target
19 if FileManager.default.fileExists(atPath: localFrameworkAbsolutePath) {
20 demucsFrameworkTarget = .binaryTarget(
21 name: "DemucsFramework",
22 path: localFrameworkPath
23 )
24 } else {
25 demucsFrameworkTarget = .binaryTarget(
26 name: "DemucsFramework",
27 url: releaseFrameworkURL,
28 checksum: releaseFrameworkChecksum
29 )
30 }
31
32 let package = Package(
33 name: "Demucs",
34 platforms: [
35 .iOS(.v16),
36 .macOS(.v14),
37 .tvOS(.v16),
38 .visionOS(.v1),
39 ],
40 products: [
41 .library(name: "Demucs", targets: ["Demucs"]),
42 ],
43 targets: [
44 demucsFrameworkTarget,
45 .target(
46 name: "Demucs",
47 dependencies: [.target(name: "DemucsFramework")],
48 path: "Sources/Demucs",
49 linkerSettings: [
50 // wgpu's Metal backend.
51 .linkedFramework("Metal"),
52 .linkedFramework("QuartzCore"),
53 .linkedFramework("CoreGraphics"),
54 .linkedFramework("IOKit", .when(platforms: [.macOS])),
55 // native-tls (weight downloads) and the Rust standard library.
56 .linkedFramework("CoreFoundation"),
57 .linkedFramework("Foundation"),
58 .linkedFramework("Security"),
59 ]
60 ),
61 .testTarget(
62 name: "DemucsTests",
63 dependencies: ["Demucs"],
64 path: "Tests/DemucsTests"
65 ),
66 ],
67 // UniFFI 0.31's generated bindings predate Swift 6's region isolation
68 // checks. The hand-written Demucs API is concurrency-safe; the generated
69 // bridge compiles in Swift 5 language mode until UniFFI updates.
70 swiftLanguageModes: [.v5]
71 )