@@ -22,7 +22,27 @@ import PackageDescription
22
22
let debug_suffix = " _debug "
23
23
let dependencies_suffix = " _with_dependencies "
24
24
25
- let products = [
25
+ func deliverables( _ dict: [ String : [ String : Any ] ] ) -> [ String : [ String : Any ] ] {
26
+ dict
27
+ . reduce ( into: [ String: [ String: Any] ] ( ) ) { result, pair in
28
+ let ( key, value) = pair
29
+ result [ key] = value
30
+ result [ key + debug_suffix] = value
31
+ }
32
+ . reduce ( into: [ String: [ String: Any] ] ( ) ) { result, pair in
33
+ let ( key, value) = pair
34
+ var newValue = value
35
+ if key. hasSuffix ( debug_suffix) {
36
+ for (k, v) in value where k. hasSuffix ( debug_suffix) {
37
+ let trimmed = String ( k. dropLast ( debug_suffix. count) )
38
+ newValue [ trimmed] = v
39
+ }
40
+ }
41
+ result [ key] = newValue. filter { !$0. key. hasSuffix ( debug_suffix) }
42
+ }
43
+ }
44
+
45
+ let products = deliverables ( [
26
46
" backend_coreml " : [
27
47
" frameworks " : [
28
48
" Accelerate " ,
@@ -60,48 +80,51 @@ let products = [
60
80
] ,
61
81
" kernels_portable " : [ : ] ,
62
82
" kernels_quantized " : [ : ] ,
63
- ] . reduce ( into: [ String: [ String: Any] ] ( ) ) {
64
- $0 [ $1. key] = $1. value
65
- $0 [ $1. key + debug_suffix] = $1. value
83
+ ] )
84
+
85
+ let targets = deliverables ( [
86
+ " threadpool " : [ : ] ,
87
+ ] )
88
+
89
+ let packageProducts : [ Product ] = products. keys. map { key -> Product in
90
+ . library( name: key, targets: [ " \( key) \( dependencies_suffix) " ] )
91
+ } . sorted { $0. name < $1. name }
92
+
93
+ var packageTargets : [ Target ] = [ ]
94
+
95
+ for (key, value) in targets {
96
+ packageTargets. append ( . binaryTarget(
97
+ name: key,
98
+ path: " cmake-out/ \( key) .xcframework "
99
+ ) )
66
100
}
67
101
68
- let targets = [
69
- " threadpool " ,
70
- ] . flatMap { [ $0, $0 + debug_suffix] }
102
+ for (key, value) in products {
103
+ packageTargets. append ( . binaryTarget(
104
+ name: key,
105
+ path: " cmake-out/ \( key) .xcframework "
106
+ ) )
107
+ let target : Target = . target(
108
+ name: " \( key) \( dependencies_suffix) " ,
109
+ dependencies: ( [ key] + ( value [ " targets " ] as? [ String ] ?? [ ] ) . map {
110
+ key. hasSuffix ( debug_suffix) ? $0 + debug_suffix : $0
111
+ } ) . map { . target( name: $0) } ,
112
+ path: " .Package.swift/ \( key) " ,
113
+ linkerSettings:
114
+ ( value [ " frameworks " ] as? [ String ] ?? [ ] ) . map { . linkedFramework( $0) } +
115
+ ( value [ " libraries " ] as? [ String ] ?? [ ] ) . map { . linkedLibrary( $0) }
116
+ )
117
+ packageTargets. append ( target)
118
+ }
71
119
72
120
let package = Package (
73
121
name: " executorch " ,
74
122
platforms: [
75
123
. iOS( . v17) ,
76
124
. macOS( . v10_15) ,
77
125
] ,
78
- products: products. keys. map { key in
79
- . library( name: key, targets: [ " \( key) \( dependencies_suffix) " ] )
80
- } . sorted { $0. name < $1. name } ,
81
- targets: targets. map { key in
82
- . binaryTarget(
83
- name: key,
84
- path: " cmake-out/ \( key) .xcframework "
85
- )
86
- } + products. flatMap { key, value -> [ Target ] in
87
- [
88
- . binaryTarget(
89
- name: key,
90
- path: " cmake-out/ \( key) .xcframework "
91
- ) ,
92
- . target(
93
- name: " \( key) \( dependencies_suffix) " ,
94
- dependencies: ( [ key] +
95
- ( value [ " targets " ] as? [ String ] ?? [ ] ) . map {
96
- target in key. hasSuffix ( debug_suffix) ? target + debug_suffix : target
97
- } ) . map { . target( name: $0) } ,
98
- path: " .Package.swift/ \( key) " ,
99
- linkerSettings:
100
- ( value [ " frameworks " ] as? [ String ] ?? [ ] ) . map { . linkedFramework( $0) } +
101
- ( value [ " libraries " ] as? [ String ] ?? [ ] ) . map { . linkedLibrary( $0) }
102
- ) ,
103
- ]
104
- } + [
126
+ products: packageProducts,
127
+ targets: packageTargets + [
105
128
. testTarget(
106
129
name: " tests " ,
107
130
dependencies: [
0 commit comments