// swift-tools-version:5.3 // The swift-tools-version declares the minimum version of Swift required to // build this package. import PackageDescription let package = Package( name: "Tokamak", platforms: [ .macOS(.v11), .iOS(.v13), ], products: [ // Products define the executables and libraries produced by a package, // and make them visible to other packages. .executable( name: "TokamakDemo", targets: ["TokamakDemo"] ), .library( name: "TokamakDOM", targets: ["TokamakDOM"] ), .library( name: "TokamakStaticHTML", targets: ["TokamakStaticHTML"] ), .executable( name: "TokamakStaticDemo", targets: ["TokamakStaticDemo"] ), .library( name: "TokamakGTK", targets: ["TokamakGTK"] ), .executable( name: "TokamakGTKDemo", targets: ["TokamakGTKDemo"] ), .library( name: "TokamakShim", targets: ["TokamakShim"] ), ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), .package( url: "https://github.com/swiftwasm/JavaScriptKit.git", .upToNextMinor(from: "0.9.0") ), .package(url: "https://github.com/MaxDesiatov/Runtime.git", from: "2.1.2"), .package(url: "https://github.com/TokamakUI/OpenCombine.git", from: "0.12.0-alpha3"), .package(url: "https://github.com/swiftwasm/OpenCombineJS.git", .upToNextMinor(from: "0.0.2")), ], targets: [ // Targets are the basic building blocks of a package. A target can define // a module or a test suite. // Targets can depend on other targets in this package, and on products // in packages which this package depends on. .target( name: "CombineShim", dependencies: [.product( name: "OpenCombine", package: "OpenCombine", condition: .when(platforms: [.wasi, .linux]) )] ), .target( name: "TokamakCore", dependencies: ["CombineShim", "Runtime"] ), .target( name: "TokamakShim", dependencies: [ .target(name: "TokamakDOM", condition: .when(platforms: [.wasi])), .target(name: "TokamakGTK", condition: .when(platforms: [.linux])), ] ), .systemLibrary( name: "CGTK", pkgConfig: "gtk+-3.0", providers: [ .apt(["libgtk+-3.0", "gtk+-3.0"]), // .yum(["gtk3-devel"]), .brew(["gtk+3"]), ] ), .systemLibrary( name: "CGDK", pkgConfig: "gdk-3.0", providers: [ .apt(["libgtk+-3.0", "gtk+-3.0"]), // .yum(["gtk3-devel"]), .brew(["gtk+3"]), ] ), .target( name: "TokamakGTKCHelpers", dependencies: ["CGTK"] ), .target( name: "TokamakGTK", dependencies: ["TokamakCore", "CGTK", "CGDK", "TokamakGTKCHelpers", "CombineShim"] ), .target( name: "TokamakGTKDemo", dependencies: ["TokamakGTK"], resources: [.copy("logo-header.png")] ), .target( name: "TokamakStaticHTML", dependencies: [ "TokamakCore", ] ), .target( name: "TokamakDOM", dependencies: [ "CombineShim", "OpenCombineJS", "TokamakCore", "TokamakStaticHTML", .product( name: "JavaScriptKit", package: "JavaScriptKit", condition: .when(platforms: [.wasi]) ), ] ), .target( name: "TokamakDemo", dependencies: [ "TokamakShim", .product( name: "JavaScriptKit", package: "JavaScriptKit", condition: .when(platforms: [.wasi]) ), ], resources: [.copy("logo-header.png")] ), .target( name: "TokamakStaticDemo", dependencies: [ "TokamakStaticHTML", ] ), .target( name: "TokamakTestRenderer", dependencies: ["TokamakCore"] ), .testTarget( name: "TokamakTests", dependencies: ["TokamakTestRenderer"] ), // FIXME: re-enable when `ViewDeferredToRenderer` conformance conflicts issue is resolved // Currently, when multiple modules that have conflicting `ViewDeferredToRenderer` // implementations are linked in the same binary, only a single one is used with no defined // behavior for that. We need to replace `ViewDeferredToRenderer` with a different solution // that isn't prone to these hard to debug errors. // .testTarget( // name: "TokamakStaticHTMLTests", // dependencies: ["TokamakStaticHTML"] // ), ] )