1919
2020import PackageDescription
2121
22- let debug = " _debug "
23- let deliverables = [
22+ let debug_suffix = " _debug "
23+ let dependencies_suffix = " _with_dependencies "
24+
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 ( [
2446 " backend_coreml " : [
2547 " frameworks " : [
2648 " Accelerate " ,
@@ -37,25 +59,62 @@ let deliverables = [
3759 " MetalPerformanceShadersGraph " ,
3860 ] ,
3961 ] ,
40- " backend_xnnpack " : [ : ] ,
41- " executorch " : [ : ] ,
62+ " backend_xnnpack " : [
63+ " targets " : [
64+ " threadpool " ,
65+ ] ,
66+ ] ,
67+ " executorch " : [
68+ " libraries " : [
69+ " c++ " ,
70+ ] ,
71+ ] ,
4272 " kernels_custom " : [ : ] ,
43- " kernels_optimized " : [ : ] ,
73+ " kernels_optimized " : [
74+ " frameworks " : [
75+ " Accelerate " ,
76+ ] ,
77+ " targets " : [
78+ " threadpool " ,
79+ ] ,
80+ ] ,
4481 " kernels_portable " : [ : ] ,
4582 " kernels_quantized " : [ : ] ,
46- ] . reduce ( into: [ String: [ String: Any] ] ( ) ) {
47- $0 [ $1. key] = $1. value
48- $0 [ $1. key + debug] = $1. value
49- } . reduce ( into: [ String: [ String: Any] ] ( ) ) {
50- var newValue = $1. value
51- if $1. key. hasSuffix ( debug) {
52- $1. value. forEach { key, value in
53- if key. hasSuffix ( debug) {
54- newValue [ String ( key. dropLast ( debug. count) ) ] = value
55- }
56- }
57- }
58- $0 [ $1. key] = newValue. filter { key, _ in !key. hasSuffix ( debug) }
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+ ) )
100+ }
101+
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)
59118}
60119
61120let package = Package (
@@ -64,42 +123,22 @@ let package = Package(
64123 . iOS( . v17) ,
65124 . macOS( . v10_15) ,
66125 ] ,
67- products: deliverables. keys. map { key in
68- . library( name: key, targets: [ " \( key) _dependencies " ] )
69- } . sorted { $0. name < $1. name } ,
70- targets: deliverables. flatMap { key, value -> [ Target ] in
71- [
72- . binaryTarget(
73- name: key,
74- path: " cmake-out/ \( key) .xcframework "
75- ) ,
76- . target(
77- name: " \( key) _dependencies " ,
78- dependencies: [ . target( name: key) ] ,
79- path: " .Package.swift/ \( key) " ,
80- linkerSettings: [
81- . linkedLibrary( " c++ " )
82- ] +
83- ( value [ " frameworks " ] as? [ String ] ?? [ ] ) . map { . linkedFramework( $0) } +
84- ( value [ " libraries " ] as? [ String ] ?? [ ] ) . map { . linkedLibrary( $0) }
85- ) ,
86- ]
87- } + [
126+ products: packageProducts,
127+ targets: packageTargets + [
88128 . testTarget(
89129 name: " tests " ,
90130 dependencies: [
91- . target( name: " executorch_debug " ) ,
92- . target( name: " kernels_portable " ) ,
131+ . target( name: " executorch \( debug_suffix ) " ) ,
132+ . target( name: " kernels_optimized \( dependencies_suffix ) " ) ,
93133 ] ,
94134 path: " extension/apple/ExecuTorch/__tests__ " ,
95135 resources: [
96- . copy( " resources/add.pte " )
136+ . copy( " resources/add.pte " ) ,
97137 ] ,
98138 linkerSettings: [
99- . linkedLibrary( " c++ " ) ,
100139 . unsafeFlags( [
101140 " -Xlinker " , " -force_load " ,
102- " -Xlinker " , " cmake-out/kernels_portable .xcframework/macos-arm64/libkernels_portable_macos .a " ,
141+ " -Xlinker " , " cmake-out/kernels_optimized .xcframework/macos-arm64/libkernels_optimized_macos .a " ,
103142 ] )
104143 ]
105144 )
0 commit comments