diff --git a/backends/apple/coreml/CMakeLists.txt b/backends/apple/coreml/CMakeLists.txt index 01fe9d0f59a..42e561e083d 100644 --- a/backends/apple/coreml/CMakeLists.txt +++ b/backends/apple/coreml/CMakeLists.txt @@ -1,4 +1,9 @@ # Copyright © 2023 Apple Inc. All rights reserved. +# 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. cmake_minimum_required(VERSION 3.19) @@ -111,12 +116,35 @@ set(PROTOBUF_SOURCES runtime/sdk/format/WordTagger.pb.cc ) +find_library(FOUNDATION_FRAMEWORK Foundation) + +# CoreML util +add_library(coreml_util ${UTIL_SOURCES}) +target_include_directories(coreml_util PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/runtime/util) +target_link_libraries(coreml_util PRIVATE ${FOUNDATION_FRAMEWORK}) + +install( + TARGETS coreml_util + DESTINATION lib + INCLUDES + DESTINATION ${_common_include_directories} +) + +# CoreML inmemoryfs +add_library(coreml_inmemoryfs ${INMEMORYFS_SOURCES}) +target_include_directories(coreml_inmemoryfs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs) +target_link_libraries(coreml_inmemoryfs PRIVATE coreml_util ${FOUNDATION_FRAMEWORK}) + +install( + TARGETS coreml_inmemoryfs + DESTINATION lib + INCLUDES + DESTINATION ${_common_include_directories} +) + # Define the delegate library add_library(coremldelegate) -target_sources( - coremldelegate PRIVATE ${INMEMORYFS_SOURCES} ${KVSTORE_SOURCES} - ${DELEGATE_SOURCES} ${UTIL_SOURCES} -) +target_sources(coremldelegate PRIVATE ${KVSTORE_SOURCES} ${DELEGATE_SOURCES}) target_include_directories( coremldelegate PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/runtime/include @@ -124,19 +152,12 @@ target_include_directories( target_include_directories( coremldelegate PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/runtime/kvstore ) -target_include_directories( - coremldelegate PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/runtime/inmemoryfs -) target_include_directories( coremldelegate PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/runtime/delegate ) -target_include_directories( - coremldelegate PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/runtime/util -) target_include_directories(coremldelegate PRIVATE ${EXECUTORCH_ROOT}/..) target_include_directories(coremldelegate PRIVATE ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10) target_compile_definitions(coremldelegate PRIVATE C10_USING_CUSTOM_GENERATED_MACROS) -target_link_libraries(coremldelegate PRIVATE executorch_core) if(EXECUTORCH_BUILD_DEVTOOLS) target_sources(coremldelegate PRIVATE ${SDK_SOURCES} ${PROTOBUF_SOURCES}) @@ -156,13 +177,17 @@ endif() find_library(ACCELERATE_FRAMEWORK Accelerate) find_library(COREML_FRAMEWORK CoreML) -find_library(FOUNDATION_FRAMEWORK Foundation) find_library(SQLITE_LIBRARY sqlite3) target_link_libraries( coremldelegate - PRIVATE executorch_core ${ACCELERATE_FRAMEWORK} ${COREML_FRAMEWORK} - ${FOUNDATION_FRAMEWORK} ${SQLITE_LIBRARY} + PUBLIC coreml_util + coreml_inmemoryfs + PRIVATE executorch_core + ${ACCELERATE_FRAMEWORK} + ${COREML_FRAMEWORK} + ${FOUNDATION_FRAMEWORK} + ${SQLITE_LIBRARY} ) target_link_options_shared_lib(coremldelegate) diff --git a/examples/apple/coreml/executor_runner/coreml_executor_runner.xcodeproj/project.pbxproj b/examples/apple/coreml/executor_runner/coreml_executor_runner.xcodeproj/project.pbxproj index a4d22670f68..5e6ff53a580 100644 --- a/examples/apple/coreml/executor_runner/coreml_executor_runner.xcodeproj/project.pbxproj +++ b/examples/apple/coreml/executor_runner/coreml_executor_runner.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 38626BB42B225A560059413D /* libflatccrt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 38626BB32B225A560059413D /* libflatccrt.a */; }; 38626BB52B225A890059413D /* libetdump.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 38626BAF2B21C98F0059413D /* libetdump.a */; }; + 879121DA2D91DDBA001E6C66 /* libcoreml_inmemoryfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 879121D82D91DDBA001E6C66 /* libcoreml_inmemoryfs.a */; }; + 879121DB2D91DDBA001E6C66 /* libcoreml_util.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 879121D92D91DDBA001E6C66 /* libcoreml_util.a */; }; C94D51592ACF4BFC00AF47FD /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = C94D51582ACF4BFC00AF47FD /* main.mm */; }; C94D515E2ACFCBA000AF47FD /* libexecutorch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C94D515C2ACFCBA000AF47FD /* libexecutorch.a */; }; C94D51622ACFCBBA00AF47FD /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C94D51612ACFCBBA00AF47FD /* libsqlite3.tbd */; }; @@ -36,6 +38,8 @@ /* Begin PBXFileReference section */ 38626BAF2B21C98F0059413D /* libetdump.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libetdump.a; path = libraries/libetdump.a; sourceTree = ""; }; 38626BB32B225A560059413D /* libflatccrt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libflatccrt.a; path = "../../../../third-party/flatcc/lib/libflatccrt.a"; sourceTree = ""; }; + 879121D82D91DDBA001E6C66 /* libcoreml_inmemoryfs.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcoreml_inmemoryfs.a; path = "libraries/libcoreml_inmemoryfs.a"; sourceTree = ""; }; + 879121D92D91DDBA001E6C66 /* libcoreml_util.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcoreml_util.a; path = "libraries/libcoreml_util.a"; sourceTree = ""; }; C94D514E2ACF4B9300AF47FD /* coreml_executor_runner */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = coreml_executor_runner; sourceTree = BUILT_PRODUCTS_DIR; }; C94D51582ACF4BFC00AF47FD /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; C94D515C2ACFCBA000AF47FD /* libexecutorch.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexecutorch.a; path = libraries/libexecutorch.a; sourceTree = ""; }; @@ -54,6 +58,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 879121DA2D91DDBA001E6C66 /* libcoreml_inmemoryfs.a in Frameworks */, + 879121DB2D91DDBA001E6C66 /* libcoreml_util.a in Frameworks */, 38626BB52B225A890059413D /* libetdump.a in Frameworks */, F24817E72BC65B2000E80D98 /* libexecutorch_core.a in Frameworks */, 38626BB42B225A560059413D /* libflatccrt.a in Frameworks */, @@ -91,6 +97,8 @@ C94D51602ACFCBBA00AF47FD /* Frameworks */ = { isa = PBXGroup; children = ( + 879121D82D91DDBA001E6C66 /* libcoreml_inmemoryfs.a */, + 879121D92D91DDBA001E6C66 /* libcoreml_util.a */, C988D69C2B998CD700979CF6 /* libprotobuf-lite.a */, 38626BB32B225A560059413D /* libflatccrt.a */, 38626BAF2B21C98F0059413D /* libetdump.a */, @@ -214,7 +222,7 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", - "C10_USING_CUSTOM_GENERATED_MACROS", + C10_USING_CUSTOM_GENERATED_MACROS, "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -273,7 +281,7 @@ GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( - "C10_USING_CUSTOM_GENERATED_MACROS", + C10_USING_CUSTOM_GENERATED_MACROS, "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -297,9 +305,9 @@ DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/include", - "$(SRCROOT)/include/executorch/runtime/core/portable_type/c10", - ); + "$(SRCROOT)/include", + "$(SRCROOT)/include/executorch/runtime/core/portable_type/c10", + ); IPHONEOS_DEPLOYMENT_TARGET = 16.0; LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/libraries", @@ -319,9 +327,9 @@ DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; HEADER_SEARCH_PATHS = ( - "$(SRCROOT)/include", - "$(SRCROOT)/include/executorch/runtime/core/portable_type/c10", - ); + "$(SRCROOT)/include", + "$(SRCROOT)/include/executorch/runtime/core/portable_type/c10", + ); IPHONEOS_DEPLOYMENT_TARGET = 16.0; LIBRARY_SEARCH_PATHS = ( "$(SRCROOT)/libraries", diff --git a/examples/apple/coreml/scripts/build_executor_runner.sh b/examples/apple/coreml/scripts/build_executor_runner.sh index 8ee9608a5ec..bc3f2872291 100755 --- a/examples/apple/coreml/scripts/build_executor_runner.sh +++ b/examples/apple/coreml/scripts/build_executor_runner.sh @@ -66,6 +66,8 @@ find "$CMAKE_BUILD_DIR_PATH/" -name 'libexecutorch_core.a' -exec cp -f "{}" "$LI find "$CMAKE_BUILD_DIR_PATH/" -name 'libprotobuf-lite.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libprotobuf-lite.a" \; find "$CMAKE_BUILD_DIR_PATH/" -name 'libprotobuf-lited.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libprotobuf-lite.a" \; find "$CMAKE_BUILD_DIR_PATH/" -name 'libetdump.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libetdump.a" \; +find "$CMAKE_BUILD_DIR_PATH/" -name 'libcoreml_util.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libcoreml_util.a" \; +find "$CMAKE_BUILD_DIR_PATH/" -name 'libcoreml_inmemoryfs.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libcoreml_inmemoryfs.a" \; find "$CMAKE_BUILD_DIR_PATH/" -name 'libcoremldelegate.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libcoremldelegate.a" \; find "$CMAKE_BUILD_DIR_PATH/" -name 'libportable_ops_lib.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libportable_ops_lib.a" \; find "$CMAKE_BUILD_DIR_PATH/" -name 'libportable_kernels.a' -exec cp -f "{}" "$LIBRARIES_DIR_PATH/libportable_kernels.a" \; diff --git a/scripts/build_apple_frameworks.sh b/scripts/build_apple_frameworks.sh index c473d13cf50..716575fd45a 100755 --- a/scripts/build_apple_frameworks.sh +++ b/scripts/build_apple_frameworks.sh @@ -35,6 +35,8 @@ libextension_tensor.a,\ :$HEADERS_PATH" FRAMEWORK_BACKEND_COREML="backend_coreml:\ +libcoreml_util.a,\ +libcoreml_inmemoryfs.a,\ libcoremldelegate.a,\ :" diff --git a/tools/cmake/executorch-config.cmake b/tools/cmake/executorch-config.cmake index 13ec0b876ad..49aa6cf08af 100644 --- a/tools/cmake/executorch-config.cmake +++ b/tools/cmake/executorch-config.cmake @@ -67,6 +67,8 @@ set(lib_list bundled_program extension_data_loader ${FLATCCRT_LIB} + coreml_util + coreml_inmemoryfs coremldelegate mpsdelegate neuron_backend @@ -143,6 +145,14 @@ if(TARGET optimized_kernels) "executorch_core;cpublas;extension_threadpool" ) endif() + +if(TARGET coremldelegate) + set_target_properties( + coremldelegate PROPERTIES INTERFACE_LINK_LIBRARIES + "coreml_inmemoryfs;coreml_util" + ) +endif() + if(TARGET optimized_native_cpu_ops_lib) if(TARGET optimized_portable_kernels) set(_maybe_optimized_portable_kernels_lib optimized_portable_kernels)