// swift-tools-version: 6.0 import PackageDescription let package = Package( name: "MusubiKit", defaultLocalization: "de", platforms: [.macOS(.v14)], products: [ .library(name: "MusubiCore", targets: ["MusubiCore"]), .library(name: "NDIKit", targets: ["NDIKit"]), .library(name: "VideoOutput", targets: ["VideoOutput"]), .library(name: "AudioMatrix", targets: ["AudioMatrix"]), .library(name: "DesignSystem", targets: ["DesignSystem"]), .library(name: "Remote", targets: ["Remote"]), ], targets: [ // Pure logic: models, scenes, settings. .target(name: "MusubiCore"), // NDI SDK (C) via module map. Headers and libndi live in Vendor/NDI/ (not checked in). .systemLibrary(name: "CNDI"), .target(name: "NDIKit", dependencies: ["CNDI", "MusubiCore"]), .target(name: "VideoOutput", dependencies: ["MusubiCore"]), .target(name: "AudioMatrix", dependencies: ["MusubiCore", "CAudioRing"]), // Lock-free SPSC ring buffer for the audio render thread (C11 atomics; Swift's Atomic needs macOS 15). .target(name: "CAudioRing"), // Theme.swift is a symlink to design/Theme.swift (single source of truth). .target(name: "DesignSystem"), // Control ↔ node over Bonjour/TCP on the technical interface (M3). .target(name: "Remote", dependencies: ["MusubiCore"]), .testTarget(name: "MusubiCoreTests", dependencies: ["MusubiCore"]), .testTarget(name: "AudioMatrixTests", dependencies: ["AudioMatrix", "CAudioRing"]), .testTarget(name: "RemoteTests", dependencies: ["Remote", "MusubiCore"]), ] )