@@ -22,7 +22,27 @@ import PackageDescription
2222let debug_suffix = " _debug "
2323let dependencies_suffix = " _with_dependencies "
2424
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 ( [
2646 " backend_coreml " : [
2747 " frameworks " : [
2848 " Accelerate " ,
@@ -60,48 +80,51 @@ let products = [
6080 ] ,
6181 " kernels_portable " : [ : ] ,
6282 " 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+ ) )
66100}
67101
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+ }
71119
72120let package = Package (
73121 name: " executorch " ,
74122 platforms: [
75123 . iOS( . v17) ,
76124 . macOS( . v10_15) ,
77125 ] ,
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 + [
105128 . testTarget(
106129 name: " tests " ,
107130 dependencies: [
0 commit comments