1818// https://pytorch.org/executorch/main/using-executorch-ios
1919
2020import PackageDescription
21+ import Foundation
2122
2223let debug_suffix = " _debug "
2324let dependencies_suffix = " _with_dependencies "
@@ -126,6 +127,48 @@ for (key, value) in products {
126127 packageTargets. append ( target)
127128}
128129
130+ // Test fixtures. add_coreml.pte and add_mul_coreml.pte are generated at CI
131+ // time by extension/apple/ExecuTorch/__tests__/resources/generate_coreml_test_models.py
132+ // (invoked by scripts/build_apple_frameworks.sh before `swift test`). They
133+ // are gitignored, so include them in test resources only when present so
134+ // that `swift test` runs on dev machines without CoreML python deps don't
135+ // fail at the SwiftPM resolve stage.
136+ let testResourcesDir = " extension/apple/ExecuTorch/__tests__/resources "
137+ var testResources : [ Resource ] = [ . copy( " resources/add.pte " ) ]
138+ if FileManager . default. fileExists ( atPath: " \( testResourcesDir) /add_coreml.pte " ) {
139+ testResources. append ( . copy( " resources/add_coreml.pte " ) )
140+ }
141+ if FileManager . default. fileExists ( atPath: " \( testResourcesDir) /add_mul_coreml.pte " ) {
142+ testResources. append ( . copy( " resources/add_mul_coreml.pte " ) )
143+ }
144+
145+ // SwiftPM resources must live under the target's path, so the ObjC test
146+ // target uses copies of the canonical resources directory's fixtures. The
147+ // copies themselves are gitignored and (re)created by scripts/build_apple_frameworks.sh.
148+ let objcTestsDir = " extension/apple/ExecuTorch/__tests__/ObjC "
149+ var objcTestResources : [ Resource ] = [ ]
150+ if FileManager . default. fileExists ( atPath: " \( objcTestsDir) /add.pte " ) {
151+ objcTestResources. append ( . copy( " add.pte " ) )
152+ }
153+ if FileManager . default. fileExists ( atPath: " \( objcTestsDir) /add_coreml.pte " ) {
154+ objcTestResources. append ( . copy( " add_coreml.pte " ) )
155+ }
156+ if FileManager . default. fileExists ( atPath: " \( objcTestsDir) /add_mul_coreml.pte " ) {
157+ objcTestResources. append ( . copy( " add_mul_coreml.pte " ) )
158+ }
159+
160+ let testLinkerSettings : [ LinkerSetting ] = [
161+ . unsafeFlags( [
162+ " -Xlinker " , " -force_load " ,
163+ " -Xlinker " , " cmake-out/kernels_optimized.xcframework/macos-arm64/libkernels_optimized_macos.a " ,
164+ // CoreML backend registers itself with the global delegate registry via a
165+ // static initializer; -force_load ensures that initializer is pulled in so
166+ // the CoreML-delegated test fixtures can actually instantiate the backend.
167+ " -Xlinker " , " -force_load " ,
168+ " -Xlinker " , " cmake-out/backend_coreml.xcframework/macos-arm64/libbackend_coreml_macos.a " ,
169+ ] )
170+ ]
171+
129172let package = Package (
130173 name: " executorch " ,
131174 platforms: [
@@ -139,17 +182,24 @@ let package = Package(
139182 dependencies: [
140183 . target( name: " executorch \( debug_suffix) " ) ,
141184 . target( name: " kernels_optimized \( dependencies_suffix) " ) ,
185+ . target( name: " backend_coreml \( dependencies_suffix) " ) ,
142186 ] ,
143187 path: " extension/apple/ExecuTorch/__tests__ " ,
144- resources: [
145- . copy( " resources/add.pte " ) ,
188+ exclude: [ " ObjC " , " resources/generate_coreml_test_models.py " , " resources/.gitignore " ] ,
189+ resources: testResources,
190+ linkerSettings: testLinkerSettings
191+ ) ,
192+ . testTarget(
193+ name: " objc_tests " ,
194+ dependencies: [
195+ . target( name: " executorch \( debug_suffix) " ) ,
196+ . target( name: " kernels_optimized \( dependencies_suffix) " ) ,
197+ . target( name: " backend_coreml \( dependencies_suffix) " ) ,
146198 ] ,
147- linkerSettings: [
148- . unsafeFlags( [
149- " -Xlinker " , " -force_load " ,
150- " -Xlinker " , " cmake-out/kernels_optimized.xcframework/macos-arm64/libkernels_optimized_macos.a " ,
151- ] )
152- ]
199+ path: " extension/apple/ExecuTorch/__tests__/ObjC " ,
200+ exclude: [ " .gitignore " ] ,
201+ resources: objcTestResources,
202+ linkerSettings: testLinkerSettings
153203 )
154204 ]
155205)
0 commit comments