-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathPackage.swift
More file actions
124 lines (113 loc) · 3.58 KB
/
Package.swift
File metadata and controls
124 lines (113 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
/// A module in the package.
protocol Module {
var targetName: String { get }
var dependencies: [String] { get }
var path: String { get }
}
struct BasicModule: Module {
let targetName: String
let dependencies: [String]
let path: String
init(targetName: String, path: String? = nil, dependencies: [String]) {
self.targetName = targetName
self.dependencies = dependencies
self.path = path ?? "Sources/\(targetName)"
}
}
struct MachSubModule: Module {
let targetName: String
let dependencies: [String]
let path: String
internal init(subModuleName: String, folderName: String? = nil, dependencies: [String]) {
let prefixedTargetName = "Mach\(subModuleName)"
self.targetName = prefixedTargetName
self.path = "Sources/Mach/\(folderName ?? subModuleName)"
self.dependencies = ["MachCore"] + dependencies
}
}
struct BSDSubModule: Module {
let targetName: String
let dependencies: [String]
let path: String
internal init(subModuleName: String, folderName: String? = nil, dependencies: [String]) {
let prefixedTargetName = "BSD\(subModuleName)"
self.targetName = prefixedTargetName
self.path = "Sources/BSD/\(folderName ?? subModuleName)"
self.dependencies = ["BSDCore"] + dependencies
}
}
/// The modules that are part of the package, in build order.
let modules: [Module] = [
BasicModule.init(targetName: "KassHelpers", dependencies: []),
BasicModule.init(targetName: "Linking", dependencies: []),
BasicModule.init(
targetName: "MachCore", path: "Sources/Mach/Core",
dependencies: ["KassHelpers", "KassC", "Linking"]
),
MachSubModule.init(subModuleName: "Object", dependencies: []),
BasicModule.init(
targetName: "BSDCore", path: "Sources/BSD/Core",
dependencies: ["KassHelpers", "KassC", "Linking", "MachCore"]
),
BasicModule.init(
targetName: "OSCore", path: "Sources/OS/Core",
dependencies: ["KassHelpers", "KassC", "BSDCore", "MachCore"]
),
BasicModule.init(
targetName: "Shellcode", dependencies: ["KassHelpers", "MachCore"]
),
BasicModule.init(targetName: "Kass", dependencies: ["KassHelpers", "BSDCore", "MachCore"]),
]
/// The name of the package.
let name = "Kass"
/// The targets for the modules.
let moduleTargets =
[
.target(
name: "KassC",
path: "Sources/KassC",
)
]
+ modules.map {
Target.target(
name: $0.targetName,
dependencies: $0.dependencies.map { Target.Dependency.target(name: $0) },
path: $0.path
)
}
/// The products for the modules.
let moduleProducts =
[
Product.library(
name: "Kass",
targets: [
"Kass",
"Linking",
"BSDCore",
"MachCore",
"OSCore",
"Shellcode",
]
)
]
+ modules.filter({ $0.targetName != "Kass" }).map { module in
return Product.library(
name: module.targetName,
targets: [module.targetName] + module.dependencies
)
}
let package = Package(
name: name,
platforms: [
.macOS(.v10_13),
.iOS(.v12),
],
products: moduleProducts,
dependencies: [
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.3")
],
targets: moduleTargets
)