diff --git a/extension/apple/Benchmark/App/App.entitlements b/extension/apple/Benchmark/App/App.entitlements new file mode 100644 index 00000000000..e461e7f22f6 --- /dev/null +++ b/extension/apple/Benchmark/App/App.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + com.apple.developer.kernel.increased-memory-limit + + + diff --git a/extension/apple/Benchmark/App/App.swift b/extension/apple/Benchmark/App/App.swift new file mode 100644 index 00000000000..30fbd221dc0 --- /dev/null +++ b/extension/apple/Benchmark/App/App.swift @@ -0,0 +1,16 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +import SwiftUI + +@main +struct BenchmarkApp: App { + var body: some Scene { + WindowGroup {} + } +} diff --git a/extension/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj b/extension/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..4dcffaffbf6 --- /dev/null +++ b/extension/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj @@ -0,0 +1,535 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 03B2D3682C8A515A0046936E /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03B2D3672C8A515A0046936E /* App.swift */; }; + 03B2D37A2C8A515C0046936E /* Tests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03B2D3792C8A515C0046936E /* Tests.mm */; }; + 03C7FA382C8AA3EC00E6E9AE /* Models in Resources */ = {isa = PBXBuildFile; fileRef = 03C7FA322C8AA24200E6E9AE /* Models */; }; + 03ED6CFF2C8AAFB300F2D6EE /* backend_coreml.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6CFE2C8AAFB300F2D6EE /* backend_coreml.xcframework */; }; + 03ED6D012C8AAFB300F2D6EE /* backend_mps.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D002C8AAFB300F2D6EE /* backend_mps.xcframework */; }; + 03ED6D032C8AAFB300F2D6EE /* backend_xnnpack.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D022C8AAFB300F2D6EE /* backend_xnnpack.xcframework */; }; + 03ED6D052C8AAFB300F2D6EE /* executorch.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D042C8AAFB300F2D6EE /* executorch.xcframework */; }; + 03ED6D072C8AAFB300F2D6EE /* kernels_custom.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D062C8AAFB300F2D6EE /* kernels_custom.xcframework */; }; + 03ED6D092C8AAFB300F2D6EE /* kernels_optimized.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D082C8AAFB300F2D6EE /* kernels_optimized.xcframework */; }; + 03ED6D0B2C8AAFB300F2D6EE /* kernels_portable.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D0A2C8AAFB300F2D6EE /* kernels_portable.xcframework */; }; + 03ED6D0D2C8AAFB300F2D6EE /* kernels_quantized.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D0C2C8AAFB300F2D6EE /* kernels_quantized.xcframework */; }; + 03ED6D0F2C8AAFE900F2D6EE /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D0E2C8AAFE900F2D6EE /* libsqlite3.0.tbd */; }; + 03ED6D112C8AAFF200F2D6EE /* MetalPerformanceShadersGraph.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D102C8AAFF200F2D6EE /* MetalPerformanceShadersGraph.framework */; }; + 03ED6D132C8AAFF700F2D6EE /* MetalPerformanceShaders.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D122C8AAFF700F2D6EE /* MetalPerformanceShaders.framework */; }; + 03ED6D152C8AAFFF00F2D6EE /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D142C8AAFFF00F2D6EE /* Metal.framework */; }; + 03ED6D172C8AB00500F2D6EE /* CoreML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D162C8AB00500F2D6EE /* CoreML.framework */; }; + 03ED6D192C8AB00A00F2D6EE /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03ED6D182C8AB00A00F2D6EE /* Accelerate.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 03B2D3762C8A515C0046936E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 03B2D35C2C8A515A0046936E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 03B2D3632C8A515A0046936E; + remoteInfo = Benchmark; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 037C96A02C8A570B00B3DF38 /* Tests.xctestplan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Tests.xctestplan; sourceTree = ""; }; + 03B019502C8A80D30044D558 /* Tests.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Tests.xcconfig; sourceTree = ""; }; + 03B2D3642C8A515A0046936E /* Benchmark.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Benchmark.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 03B2D3672C8A515A0046936E /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = ""; }; + 03B2D36D2C8A515B0046936E /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; }; + 03B2D3752C8A515C0046936E /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 03B2D3792C8A515C0046936E /* Tests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Tests.mm; sourceTree = ""; }; + 03C7FA322C8AA24200E6E9AE /* Models */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Models; sourceTree = SOURCE_ROOT; }; + 03ED6CFE2C8AAFB300F2D6EE /* backend_coreml.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = backend_coreml.xcframework; path = Frameworks/backend_coreml.xcframework; sourceTree = ""; }; + 03ED6D002C8AAFB300F2D6EE /* backend_mps.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = backend_mps.xcframework; path = Frameworks/backend_mps.xcframework; sourceTree = ""; }; + 03ED6D022C8AAFB300F2D6EE /* backend_xnnpack.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = backend_xnnpack.xcframework; path = Frameworks/backend_xnnpack.xcframework; sourceTree = ""; }; + 03ED6D042C8AAFB300F2D6EE /* executorch.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = executorch.xcframework; path = Frameworks/executorch.xcframework; sourceTree = ""; }; + 03ED6D062C8AAFB300F2D6EE /* kernels_custom.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = kernels_custom.xcframework; path = Frameworks/kernels_custom.xcframework; sourceTree = ""; }; + 03ED6D082C8AAFB300F2D6EE /* kernels_optimized.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = kernels_optimized.xcframework; path = Frameworks/kernels_optimized.xcframework; sourceTree = ""; }; + 03ED6D0A2C8AAFB300F2D6EE /* kernels_portable.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = kernels_portable.xcframework; path = Frameworks/kernels_portable.xcframework; sourceTree = ""; }; + 03ED6D0C2C8AAFB300F2D6EE /* kernels_quantized.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = kernels_quantized.xcframework; path = Frameworks/kernels_quantized.xcframework; sourceTree = ""; }; + 03ED6D0E2C8AAFE900F2D6EE /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/usr/lib/libsqlite3.0.tbd; sourceTree = DEVELOPER_DIR; }; + 03ED6D102C8AAFF200F2D6EE /* MetalPerformanceShadersGraph.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalPerformanceShadersGraph.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/System/Library/Frameworks/MetalPerformanceShadersGraph.framework; sourceTree = DEVELOPER_DIR; }; + 03ED6D122C8AAFF700F2D6EE /* MetalPerformanceShaders.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalPerformanceShaders.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework; sourceTree = DEVELOPER_DIR; }; + 03ED6D142C8AAFFF00F2D6EE /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/System/Library/Frameworks/Metal.framework; sourceTree = DEVELOPER_DIR; }; + 03ED6D162C8AB00500F2D6EE /* CoreML.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreML.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/System/Library/Frameworks/CoreML.framework; sourceTree = DEVELOPER_DIR; }; + 03ED6D182C8AB00A00F2D6EE /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 03B2D3612C8A515A0046936E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03B2D3722C8A515C0046936E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 03ED6D192C8AB00A00F2D6EE /* Accelerate.framework in Frameworks */, + 03ED6D172C8AB00500F2D6EE /* CoreML.framework in Frameworks */, + 03ED6D152C8AAFFF00F2D6EE /* Metal.framework in Frameworks */, + 03ED6D132C8AAFF700F2D6EE /* MetalPerformanceShaders.framework in Frameworks */, + 03ED6D112C8AAFF200F2D6EE /* MetalPerformanceShadersGraph.framework in Frameworks */, + 03ED6D0F2C8AAFE900F2D6EE /* libsqlite3.0.tbd in Frameworks */, + 03ED6CFF2C8AAFB300F2D6EE /* backend_coreml.xcframework in Frameworks */, + 03ED6D032C8AAFB300F2D6EE /* backend_xnnpack.xcframework in Frameworks */, + 03ED6D092C8AAFB300F2D6EE /* kernels_optimized.xcframework in Frameworks */, + 03ED6D012C8AAFB300F2D6EE /* backend_mps.xcframework in Frameworks */, + 03ED6D0D2C8AAFB300F2D6EE /* kernels_quantized.xcframework in Frameworks */, + 03ED6D0B2C8AAFB300F2D6EE /* kernels_portable.xcframework in Frameworks */, + 03ED6D052C8AAFB300F2D6EE /* executorch.xcframework in Frameworks */, + 03ED6D072C8AAFB300F2D6EE /* kernels_custom.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 03B2D35B2C8A515A0046936E = { + isa = PBXGroup; + children = ( + 03B2D3662C8A515A0046936E /* App */, + 03ED6CEB2C8AAF5300F2D6EE /* Frameworks */, + 03C7FA322C8AA24200E6E9AE /* Models */, + 03B2D3782C8A515C0046936E /* Tests */, + 03B2D3652C8A515A0046936E /* Products */, + ); + sourceTree = ""; + }; + 03B2D3652C8A515A0046936E /* Products */ = { + isa = PBXGroup; + children = ( + 03B2D3642C8A515A0046936E /* Benchmark.app */, + 03B2D3752C8A515C0046936E /* Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 03B2D3662C8A515A0046936E /* App */ = { + isa = PBXGroup; + children = ( + 03B2D3672C8A515A0046936E /* App.swift */, + 03B2D36D2C8A515B0046936E /* App.entitlements */, + ); + path = App; + sourceTree = SOURCE_ROOT; + }; + 03B2D3782C8A515C0046936E /* Tests */ = { + isa = PBXGroup; + children = ( + 03B2D3792C8A515C0046936E /* Tests.mm */, + 03B019502C8A80D30044D558 /* Tests.xcconfig */, + 037C96A02C8A570B00B3DF38 /* Tests.xctestplan */, + ); + path = Tests; + sourceTree = SOURCE_ROOT; + }; + 03ED6CEB2C8AAF5300F2D6EE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 03ED6D182C8AB00A00F2D6EE /* Accelerate.framework */, + 03ED6D162C8AB00500F2D6EE /* CoreML.framework */, + 03ED6D142C8AAFFF00F2D6EE /* Metal.framework */, + 03ED6D122C8AAFF700F2D6EE /* MetalPerformanceShaders.framework */, + 03ED6D102C8AAFF200F2D6EE /* MetalPerformanceShadersGraph.framework */, + 03ED6D0E2C8AAFE900F2D6EE /* libsqlite3.0.tbd */, + 03ED6CFE2C8AAFB300F2D6EE /* backend_coreml.xcframework */, + 03ED6D002C8AAFB300F2D6EE /* backend_mps.xcframework */, + 03ED6D022C8AAFB300F2D6EE /* backend_xnnpack.xcframework */, + 03ED6D042C8AAFB300F2D6EE /* executorch.xcframework */, + 03ED6D062C8AAFB300F2D6EE /* kernels_custom.xcframework */, + 03ED6D082C8AAFB300F2D6EE /* kernels_optimized.xcframework */, + 03ED6D0A2C8AAFB300F2D6EE /* kernels_portable.xcframework */, + 03ED6D0C2C8AAFB300F2D6EE /* kernels_quantized.xcframework */, + ); + name = Frameworks; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 03B2D3632C8A515A0046936E /* App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 03B2D3892C8A515C0046936E /* Build configuration list for PBXNativeTarget "App" */; + buildPhases = ( + 03B2D3602C8A515A0046936E /* Sources */, + 03B2D3612C8A515A0046936E /* Frameworks */, + 03B2D3622C8A515A0046936E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = App; + productName = Benchmark; + productReference = 03B2D3642C8A515A0046936E /* Benchmark.app */; + productType = "com.apple.product-type.application"; + }; + 03B2D3742C8A515C0046936E /* Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 03B2D38C2C8A515C0046936E /* Build configuration list for PBXNativeTarget "Tests" */; + buildPhases = ( + 03B2D3712C8A515C0046936E /* Sources */, + 03B2D3722C8A515C0046936E /* Frameworks */, + 03B2D3732C8A515C0046936E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 03B2D3772C8A515C0046936E /* PBXTargetDependency */, + ); + name = Tests; + productName = BenchmarkTests; + productReference = 03B2D3752C8A515C0046936E /* Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 03B2D35C2C8A515A0046936E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1540; + LastUpgradeCheck = 1540; + TargetAttributes = { + 03B2D3632C8A515A0046936E = { + CreatedOnToolsVersion = 15.4; + }; + 03B2D3742C8A515C0046936E = { + CreatedOnToolsVersion = 15.4; + TestTargetID = 03B2D3632C8A515A0046936E; + }; + }; + }; + buildConfigurationList = 03B2D35F2C8A515A0046936E /* Build configuration list for PBXProject "Benchmark" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 03B2D35B2C8A515A0046936E; + productRefGroup = 03B2D3652C8A515A0046936E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 03B2D3632C8A515A0046936E /* App */, + 03B2D3742C8A515C0046936E /* Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 03B2D3622C8A515A0046936E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03B2D3732C8A515C0046936E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03C7FA382C8AA3EC00E6E9AE /* Models in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 03B2D3602C8A515A0046936E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03B2D3682C8A515A0046936E /* App.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 03B2D3712C8A515C0046936E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03B2D37A2C8A515C0046936E /* Tests.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 03B2D3772C8A515C0046936E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 03B2D3632C8A515A0046936E /* App */; + targetProxy = 03B2D3762C8A515C0046936E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 03B2D3872C8A515C0046936E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 03B2D3882C8A515C0046936E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + }; + name = Release; + }; + 03B2D38A2C8A515C0046936E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = App/App.entitlements; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.pytorch.executorch.Benchmark; + PRODUCT_NAME = Benchmark; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 03B2D38B2C8A515C0046936E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = App/App.entitlements; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.pytorch.executorch.Benchmark; + PRODUCT_NAME = Benchmark; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 03B2D38D2C8A515C0046936E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 03B019502C8A80D30044D558 /* Tests.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.pytorch.executorch.BenchmarkTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Benchmark.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Benchmark"; + }; + name = Debug; + }; + 03B2D38E2C8A515C0046936E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 03B019502C8A80D30044D558 /* Tests.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.pytorch.executorch.BenchmarkTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Benchmark.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Benchmark"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 03B2D35F2C8A515A0046936E /* Build configuration list for PBXProject "Benchmark" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03B2D3872C8A515C0046936E /* Debug */, + 03B2D3882C8A515C0046936E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 03B2D3892C8A515C0046936E /* Build configuration list for PBXNativeTarget "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03B2D38A2C8A515C0046936E /* Debug */, + 03B2D38B2C8A515C0046936E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 03B2D38C2C8A515C0046936E /* Build configuration list for PBXNativeTarget "Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03B2D38D2C8A515C0046936E /* Debug */, + 03B2D38E2C8A515C0046936E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 03B2D35C2C8A515A0046936E /* Project object */; +} diff --git a/extension/apple/Benchmark/Benchmark.xcodeproj/xcshareddata/xcschemes/Benchmark.xcscheme b/extension/apple/Benchmark/Benchmark.xcodeproj/xcshareddata/xcschemes/Benchmark.xcscheme new file mode 100644 index 00000000000..ebfe1e5fd35 --- /dev/null +++ b/extension/apple/Benchmark/Benchmark.xcodeproj/xcshareddata/xcschemes/Benchmark.xcscheme @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extension/apple/Benchmark/Tests/Tests.mm b/extension/apple/Benchmark/Tests/Tests.mm new file mode 100644 index 00000000000..5cf958765d3 --- /dev/null +++ b/extension/apple/Benchmark/Tests/Tests.mm @@ -0,0 +1,105 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +#import + +#import +#import + +using namespace ::executorch::extension; +using namespace ::executorch::runtime; + +@interface Tests : XCTestCase +@end + +@implementation Tests + ++ (void)initialize { + if (self == [Tests class]) { + NSString *modelsDir = [[NSBundle bundleForClass:[self class]].resourcePath + stringByAppendingPathComponent:@"Models"]; + NSArray *models = + [NSFileManager.defaultManager contentsOfDirectoryAtPath:modelsDir + error:nil]; + for (NSString *model in models) { + NSString *modelName = model.stringByDeletingPathExtension; + NSString *modelPath = [modelsDir stringByAppendingPathComponent:model]; + XCTAssertGreaterThan(modelPath.length, 0); + + SEL testLoadSelector = NSSelectorFromString( + [NSString stringWithFormat:@"test_load_%@", modelName]); + IMP testLoadImplementation = imp_implementationWithBlock(^(id _self) { + auto __block module = std::make_unique(modelPath.UTF8String); + [_self + measureWithMetrics:@[ [XCTClockMetric new], [XCTMemoryMetric new] ] + options:XCTMeasureOptions.defaultOptions + block:^{ + XCTAssertEqual(module->load_method("forward"), + Error::Ok); + }]; + }); + class_addMethod( + [self class], testLoadSelector, testLoadImplementation, "v@:"); + + SEL testForwardSelector = NSSelectorFromString( + [NSString stringWithFormat:@"test_forward_%@", modelName]); + IMP testForwardImplementation = imp_implementationWithBlock(^(id _self) { + auto __block module = std::make_unique(modelPath.UTF8String); + XCTAssertEqual(module->load_method("forward"), Error::Ok); + + const auto method_meta = module->method_meta("forward"); + XCTAssertEqual(method_meta.error(), Error::Ok); + + const auto num_inputs = method_meta->num_inputs(); + XCTAssertGreaterThan(num_inputs, 0); + + std::vector> buffers; + buffers.reserve(num_inputs); + std::vector tensors; + tensors.reserve(num_inputs); + std::vector __block inputs; + inputs.reserve(num_inputs); + + for (auto index = 0; index < num_inputs; ++index) { + auto input_tag = method_meta->input_tag(index); + XCTAssertEqual(input_tag.error(), Error::Ok); + + switch (*input_tag) { + case Tag::Tensor: { + const auto tensor_meta = method_meta->input_tensor_meta(index); + XCTAssertEqual(tensor_meta.error(), Error::Ok); + + const auto sizes = tensor_meta->sizes(); + buffers.emplace_back(tensor_meta->nbytes(), + 0b01010101); // Set all bytes to be non-zero. + tensors.emplace_back(from_blob(buffers.rbegin()->data(), + {sizes.begin(), sizes.end()}, + tensor_meta->scalar_type())); + inputs.emplace_back(tensors.back()); + } break; + default: + XCTFail("Unsupported tag %i at input %d", *input_tag, index); + } + } + [_self + measureWithMetrics:@[ [XCTClockMetric new], [XCTMemoryMetric new] ] + options:XCTMeasureOptions.defaultOptions + block:^{ + XCTAssertEqual(module->forward(inputs).error(), + Error::Ok); + }]; + }); + class_addMethod( + [self class], testForwardSelector, testForwardImplementation, "v@:"); + } + } +} + +@end diff --git a/extension/apple/Benchmark/Tests/Tests.xcconfig b/extension/apple/Benchmark/Tests/Tests.xcconfig new file mode 100644 index 00000000000..e8168046c3d --- /dev/null +++ b/extension/apple/Benchmark/Tests/Tests.xcconfig @@ -0,0 +1,26 @@ +OTHER_LDFLAGS[sdk=iphonesimulator*] = $(inherited) \ +-force_load $(BUILT_PRODUCTS_DIR)/libexecutorch-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_portable-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_custom-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_quantized-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_coreml-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_mps-simulator-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_xnnpack-simulator-release.a + +OTHER_LDFLAGS[sdk=iphoneos*] = $(inherited) \ +-force_load $(BUILT_PRODUCTS_DIR)/libexecutorch-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_portable-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_custom-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_quantized-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_coreml-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_mps-ios-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_xnnpack-ios-release.a + +OTHER_LDFLAGS[sdk=macos*] = $(inherited) \ +-force_load $(BUILT_PRODUCTS_DIR)/libexecutorch-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_portable-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_custom-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libkernels_quantized-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_coreml-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_mps-macos-release.a \ +-force_load $(BUILT_PRODUCTS_DIR)/libbackend_xnnpack-macos-release.a diff --git a/extension/apple/Benchmark/Tests/Tests.xctestplan b/extension/apple/Benchmark/Tests/Tests.xctestplan new file mode 100644 index 00000000000..025f50f1942 --- /dev/null +++ b/extension/apple/Benchmark/Tests/Tests.xctestplan @@ -0,0 +1,28 @@ +{ + "configurations" : [ + { + "id" : "0430A5ED-FD8D-444E-9933-740E01CCD53C", + "name" : "Test Scheme Action", + "options" : { + + } + } + ], + "defaultOptions" : { + "targetForVariableExpansion" : { + "containerPath" : "container:Benchmark.xcodeproj", + "identifier" : "03B2D3632C8A515A0046936E", + "name" : "App" + } + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:Benchmark.xcodeproj", + "identifier" : "03B2D3742C8A515C0046936E", + "name" : "Tests" + } + } + ], + "version" : 1 +}