diff --git a/Package.swift b/Package.swift index af289bc84a8..6ee8debc413 100644 --- a/Package.swift +++ b/Package.swift @@ -19,8 +19,10 @@ import PackageDescription -let debug = "_debug" -let deliverables = [ +let debug_suffix = "_debug" +let dependencies_suffix = "_with_dependencies" + +let products = [ "backend_coreml": [ "frameworks": [ "Accelerate", @@ -37,49 +39,64 @@ let deliverables = [ "MetalPerformanceShadersGraph", ], ], - "backend_xnnpack": [:], - "executorch": [:], + "backend_xnnpack": [ + "targets": [ + "threadpool", + ], + ], + "executorch": [ + "libraries": [ + "c++", + ], + ], "kernels_custom": [:], - "kernels_optimized": [:], + "kernels_optimized": [ + "frameworks": [ + "Accelerate", + ], + "targets": [ + "threadpool", + ], + ], "kernels_portable": [:], "kernels_quantized": [:], ].reduce(into: [String: [String: Any]]()) { $0[$1.key] = $1.value - $0[$1.key + debug] = $1.value -}.reduce(into: [String: [String: Any]]()) { - var newValue = $1.value - if $1.key.hasSuffix(debug) { - $1.value.forEach { key, value in - if key.hasSuffix(debug) { - newValue[String(key.dropLast(debug.count))] = value - } - } - } - $0[$1.key] = newValue.filter { key, _ in !key.hasSuffix(debug) } + $0[$1.key + debug_suffix] = $1.value } +let targets = [ + "threadpool", +].flatMap { [$0, $0 + debug_suffix] } + let package = Package( name: "executorch", platforms: [ .iOS(.v17), .macOS(.v10_15), ], - products: deliverables.keys.map { key in - .library(name: key, targets: ["\(key)_dependencies"]) + products: products.keys.map { key in + .library(name: key, targets: ["\(key)\(dependencies_suffix)"]) }.sorted { $0.name < $1.name }, - targets: deliverables.flatMap { key, value -> [Target] in + targets: targets.map { key in + .binaryTarget( + name: key, + path: "cmake-out/\(key).xcframework" + ) + } + products.flatMap { key, value -> [Target] in [ .binaryTarget( name: key, path: "cmake-out/\(key).xcframework" ), .target( - name: "\(key)_dependencies", - dependencies: [.target(name: key)], + name: "\(key)\(dependencies_suffix)", + dependencies:([key] + + (value["targets"] as? [String] ?? []).map { + target in key.hasSuffix(debug_suffix) ? target + debug_suffix : target + }).map { .target(name: $0) }, path: ".Package.swift/\(key)", - linkerSettings: [ - .linkedLibrary("c++") - ] + + linkerSettings: (value["frameworks"] as? [String] ?? []).map { .linkedFramework($0) } + (value["libraries"] as? [String] ?? []).map { .linkedLibrary($0) } ), @@ -88,18 +105,17 @@ let package = Package( .testTarget( name: "tests", dependencies: [ - .target(name: "executorch_debug"), - .target(name: "kernels_portable"), + .target(name: "executorch\(debug_suffix)"), + .target(name: "kernels_optimized\(dependencies_suffix)"), ], path: "extension/apple/ExecuTorch/__tests__", resources: [ - .copy("resources/add.pte") + .copy("resources/add.pte"), ], linkerSettings: [ - .linkedLibrary("c++"), .unsafeFlags([ "-Xlinker", "-force_load", - "-Xlinker", "cmake-out/kernels_portable.xcframework/macos-arm64/libkernels_portable_macos.a", + "-Xlinker", "cmake-out/kernels_optimized.xcframework/macos-arm64/libkernels_optimized_macos.a", ]) ] ) diff --git a/extension/benchmark/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj b/extension/benchmark/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj index 3502f86a1b4..355227eef63 100644 --- a/extension/benchmark/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj +++ b/extension/benchmark/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ 03F181542D7262FC0058BDF9 /* executorch in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181532D7262FC0058BDF9 /* executorch */; }; 03F181562D7262FC0058BDF9 /* kernels_custom in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181552D7262FC0058BDF9 /* kernels_custom */; }; 03F181582D7262FC0058BDF9 /* kernels_optimized in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181572D7262FC0058BDF9 /* kernels_optimized */; }; - 03F1815A2D7262FC0058BDF9 /* kernels_portable in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181592D7262FC0058BDF9 /* kernels_portable */; }; 03F1815C2D7262FC0058BDF9 /* kernels_quantized in Frameworks */ = {isa = PBXBuildFile; productRef = 03F1815B2D7262FC0058BDF9 /* kernels_quantized */; }; 30AA4B602DC0766800B1BE50 /* pcre2_regex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30AA4B5A2DC0766800B1BE50 /* pcre2_regex.cpp */; }; 30AA4B612DC0766800B1BE50 /* regex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30AA4B5D2DC0766800B1BE50 /* regex.cpp */; }; @@ -126,7 +125,6 @@ 03F1814E2D7262FC0058BDF9 /* backend_coreml in Frameworks */, 03F181522D7262FC0058BDF9 /* backend_xnnpack in Frameworks */, 03F181562D7262FC0058BDF9 /* kernels_custom in Frameworks */, - 03F1815A2D7262FC0058BDF9 /* kernels_portable in Frameworks */, 03F181582D7262FC0058BDF9 /* kernels_optimized in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -741,10 +739,6 @@ isa = XCSwiftPackageProductDependency; productName = kernels_optimized; }; - 03F181592D7262FC0058BDF9 /* kernels_portable */ = { - isa = XCSwiftPackageProductDependency; - productName = kernels_portable; - }; 03F1815B2D7262FC0058BDF9 /* kernels_quantized */ = { isa = XCSwiftPackageProductDependency; productName = kernels_quantized; diff --git a/scripts/build_apple_frameworks.sh b/scripts/build_apple_frameworks.sh index f4ed2b6d7f2..a43deed9ab7 100755 --- a/scripts/build_apple_frameworks.sh +++ b/scripts/build_apple_frameworks.sh @@ -32,6 +32,12 @@ libextension_module.a,\ libextension_tensor.a,\ :$HEADERS_RELATIVE_PATH:ExecuTorch" +FRAMEWORK_THREADPOOL="threadpool:\ +libcpuinfo.a,\ +libextension_threadpool.a,\ +libpthreadpool.a,\ +:" + FRAMEWORK_BACKEND_COREML="backend_coreml:\ libcoreml_util.a,\ libcoreml_inmemoryfs.a,\ @@ -44,9 +50,6 @@ libmpsdelegate.a,\ FRAMEWORK_BACKEND_XNNPACK="backend_xnnpack:\ libXNNPACK.a,\ -libcpuinfo.a,\ -libextension_threadpool.a,\ -libpthreadpool.a,\ libxnnpack_backend.a,\ libmicrokernels-prod.a,\ :" @@ -59,6 +62,7 @@ FRAMEWORK_KERNELS_OPTIMIZED="kernels_optimized:\ libcpublas.a,\ liboptimized_kernels.a,\ liboptimized_native_cpu_ops_lib.a,\ +libportable_kernels.a,\ :" FRAMEWORK_KERNELS_PORTABLE="kernels_portable:\ @@ -230,6 +234,7 @@ for mode in "${MODES[@]}"; do done append_framework_flag "" "$FRAMEWORK_EXECUTORCH" "$mode" + append_framework_flag "" "$FRAMEWORK_THREADPOOL" "$mode" append_framework_flag "EXECUTORCH_BUILD_COREML" "$FRAMEWORK_BACKEND_COREML" "$mode" append_framework_flag "EXECUTORCH_BUILD_MPS" "$FRAMEWORK_BACKEND_MPS" "$mode" append_framework_flag "EXECUTORCH_BUILD_XNNPACK" "$FRAMEWORK_BACKEND_XNNPACK" "$mode"