2026-07-10 14:44:26 -04:00
|
|
|
// swift-tools-version:6.0
|
|
|
|
|
import PackageDescription
|
|
|
|
|
|
|
|
|
|
let package = Package(
|
|
|
|
|
name: "forge",
|
|
|
|
|
platforms: [.macOS(.v14)],
|
|
|
|
|
dependencies: [
|
|
|
|
|
.package(url: "https://github.com/apple/swift-nio.git", from: "2.65.0"),
|
|
|
|
|
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.3.0"),
|
|
|
|
|
],
|
|
|
|
|
targets: [
|
|
|
|
|
// Pure color math
|
|
|
|
|
.target(name: "ForgeColor"),
|
|
|
|
|
// Node stack, flattening, serialization
|
|
|
|
|
.target(name: "ForgeGrade", dependencies: ["ForgeColor"]),
|
|
|
|
|
// Camera seam
|
|
|
|
|
.target(name: "ForgeCamera", dependencies: ["ForgeGrade"]),
|
|
|
|
|
// Simulated cameras
|
|
|
|
|
.target(name: "ForgeSim", dependencies: [
|
|
|
|
|
"ForgeCamera",
|
2026-07-11 10:02:56 -04:00
|
|
|
"ForgeCameraARRI", // CAP frame codec shared by ARRI sim
|
|
|
|
|
"ForgeOffload", // MD5 for CAP challenge verification
|
2026-07-10 14:44:26 -04:00
|
|
|
.product(name: "NIO", package: "swift-nio"),
|
|
|
|
|
.product(name: "NIOHTTP1", package: "swift-nio"),
|
2026-07-11 00:33:26 -04:00
|
|
|
.product(name: "NIOWebSocket", package: "swift-nio"),
|
2026-07-10 14:44:26 -04:00
|
|
|
]),
|
|
|
|
|
// Vendor drivers
|
|
|
|
|
.target(name: "ForgeCameraARRI", dependencies: [
|
|
|
|
|
"ForgeCamera",
|
2026-07-11 10:02:56 -04:00
|
|
|
"ForgeOffload", // MD5 for CAP password challenge
|
2026-07-10 14:44:26 -04:00
|
|
|
.product(name: "NIO", package: "swift-nio"),
|
|
|
|
|
]),
|
|
|
|
|
.target(name: "ForgeCameraRED", dependencies: [
|
|
|
|
|
"ForgeCamera",
|
|
|
|
|
.product(name: "NIO", package: "swift-nio"),
|
2026-07-11 00:33:26 -04:00
|
|
|
.product(name: "NIOHTTP1", package: "swift-nio"),
|
|
|
|
|
.product(name: "NIOWebSocket", package: "swift-nio"),
|
2026-07-10 14:44:26 -04:00
|
|
|
]),
|
|
|
|
|
.target(name: "ForgeCameraSony", dependencies: [
|
|
|
|
|
"ForgeCamera",
|
|
|
|
|
.product(name: "NIO", package: "swift-nio"),
|
|
|
|
|
]),
|
|
|
|
|
// Shot logging + storage + exports
|
|
|
|
|
.target(name: "ForgeLibrary", dependencies: ["ForgeGrade", "CSQLite"]),
|
|
|
|
|
.systemLibrary(name: "CSQLite", path: "Sources/CSQLite"),
|
2026-07-11 15:46:41 -04:00
|
|
|
// Vendored xxHash v0.8.2 (BSD-2) for XXH3-64/128
|
|
|
|
|
.target(name: "CXXHash"),
|
2026-07-10 14:44:26 -04:00
|
|
|
.target(name: "ForgeLogger", dependencies: ["ForgeCamera", "ForgeLibrary"]),
|
|
|
|
|
.target(name: "ForgeExport", dependencies: ["ForgeLibrary", "ForgeGrade"]),
|
2026-07-10 14:52:53 -04:00
|
|
|
// Offload + proxy
|
2026-07-11 15:46:41 -04:00
|
|
|
.target(name: "ForgeOffload", dependencies: ["ForgeLibrary", "CXXHash"]),
|
2026-07-10 14:52:53 -04:00
|
|
|
.target(name: "ForgeProxy", dependencies: ["ForgeLibrary", "ForgeGrade", "ForgeColor"]),
|
2026-07-10 14:44:26 -04:00
|
|
|
// Panel + video seams
|
|
|
|
|
.target(name: "ForgePanel", dependencies: [
|
|
|
|
|
"ForgeGrade",
|
|
|
|
|
.product(name: "NIO", package: "swift-nio"),
|
|
|
|
|
]),
|
|
|
|
|
.target(name: "ForgeVideo", dependencies: ["ForgeGrade"]),
|
|
|
|
|
// CLI
|
|
|
|
|
.executableTarget(name: "forge-cli", dependencies: [
|
|
|
|
|
"ForgeCamera", "ForgeCameraARRI", "ForgeCameraRED", "ForgeCameraSony",
|
|
|
|
|
"ForgeSim", "ForgeLogger", "ForgeExport", "ForgePanel", "ForgeVideo",
|
2026-07-10 14:52:53 -04:00
|
|
|
"ForgeOffload", "ForgeProxy",
|
2026-07-10 14:44:26 -04:00
|
|
|
.product(name: "ArgumentParser", package: "swift-argument-parser"),
|
|
|
|
|
]),
|
|
|
|
|
// Tests
|
|
|
|
|
.testTarget(name: "ForgeColorTests", dependencies: ["ForgeColor"]),
|
|
|
|
|
.testTarget(name: "ForgeGradeTests", dependencies: ["ForgeGrade"]),
|
|
|
|
|
.testTarget(name: "ForgeCameraTests", dependencies: ["ForgeCamera", "ForgeSim"]),
|
|
|
|
|
.testTarget(name: "ForgeCameraARRITests", dependencies: ["ForgeCameraARRI", "ForgeSim"]),
|
|
|
|
|
.testTarget(name: "ForgeCameraREDTests", dependencies: ["ForgeCameraRED", "ForgeSim"]),
|
|
|
|
|
.testTarget(name: "ForgeCameraSonyTests", dependencies: ["ForgeCameraSony", "ForgeSim"]),
|
|
|
|
|
.testTarget(name: "ForgeLibraryTests", dependencies: ["ForgeLibrary"]),
|
|
|
|
|
.testTarget(name: "ForgeLoggerTests", dependencies: ["ForgeLogger", "ForgeSim"]),
|
|
|
|
|
.testTarget(name: "ForgeExportTests", dependencies: ["ForgeExport"]),
|
2026-07-10 14:52:53 -04:00
|
|
|
.testTarget(name: "ForgeOffloadTests", dependencies: ["ForgeOffload"]),
|
|
|
|
|
.testTarget(name: "ForgeProxyTests", dependencies: ["ForgeProxy"]),
|
2026-07-10 14:44:26 -04:00
|
|
|
.testTarget(name: "ForgePanelTests", dependencies: ["ForgePanel"]),
|
|
|
|
|
.testTarget(name: "ForgeVideoTests", dependencies: ["ForgeVideo"]),
|
|
|
|
|
]
|
|
|
|
|
)
|