mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-26 22:35:43 +00:00
### Description <!-- Describe your changes. --> Add Swift Package Manager (SPM) support for ORT based on #14621 - uses the existing objective-c bindings - some re-organization of the directory structure was required but the contents of the files are unchanged, apart from adjustments due to file movements Add tool for updating ORT native pod used in the SPM package Update CIs to use ORT native pod from build, and build/test using SPM ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> iOS developers are using SPM as much as cocoapods, so adding SPM means both are catered for.
133 lines
3.9 KiB
CMake
133 lines
3.9 KiB
CMake
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
if(NOT APPLE)
|
|
message(FATAL_ERROR "The Objective-C API must be built on an Apple platform.")
|
|
endif()
|
|
|
|
if(NOT onnxruntime_BUILD_SHARED_LIB)
|
|
message(FATAL_ERROR "The Objective-C API requires onnxruntime_BUILD_SHARED_LIB to be enabled.")
|
|
endif()
|
|
|
|
check_language(OBJC)
|
|
if(CMAKE_OBJC_COMPILER)
|
|
enable_language(OBJC)
|
|
else()
|
|
message(FATAL_ERROR "Objective-C is not supported.")
|
|
endif()
|
|
|
|
check_language(OBJCXX)
|
|
if(CMAKE_OBJCXX_COMPILER)
|
|
enable_language(OBJCXX)
|
|
else()
|
|
message(FATAL_ERROR "Objective-C++ is not supported.")
|
|
endif()
|
|
|
|
add_compile_options(
|
|
"$<$<COMPILE_LANGUAGE:OBJC,OBJCXX>:-Wall>"
|
|
"$<$<COMPILE_LANGUAGE:OBJC,OBJCXX>:-Wextra>")
|
|
|
|
set(OBJC_ROOT "${REPO_ROOT}/objectivec")
|
|
|
|
# onnxruntime_objc target
|
|
|
|
# these headers are the public interface
|
|
file(GLOB onnxruntime_objc_headers CONFIGURE_DEPENDS
|
|
"${OBJC_ROOT}/include/*.h")
|
|
|
|
file(GLOB onnxruntime_objc_srcs CONFIGURE_DEPENDS
|
|
"${OBJC_ROOT}/*.h"
|
|
"${OBJC_ROOT}/*.m"
|
|
"${OBJC_ROOT}/*.mm")
|
|
|
|
source_group(TREE "${OBJC_ROOT}" FILES
|
|
${onnxruntime_objc_headers}
|
|
${onnxruntime_objc_srcs})
|
|
|
|
onnxruntime_add_shared_library(onnxruntime_objc
|
|
${onnxruntime_objc_headers}
|
|
${onnxruntime_objc_srcs})
|
|
|
|
target_include_directories(onnxruntime_objc
|
|
PUBLIC
|
|
"${OBJC_ROOT}/include"
|
|
PRIVATE
|
|
"${ONNXRUNTIME_INCLUDE_DIR}/core/session"
|
|
"${OBJC_ROOT}")
|
|
|
|
if(onnxruntime_USE_COREML)
|
|
target_include_directories(onnxruntime_objc
|
|
PRIVATE
|
|
"${ONNXRUNTIME_INCLUDE_DIR}/core/providers/coreml")
|
|
endif()
|
|
|
|
find_library(FOUNDATION_LIB Foundation REQUIRED)
|
|
|
|
target_link_libraries(onnxruntime_objc
|
|
PRIVATE
|
|
onnxruntime
|
|
${FOUNDATION_LIB})
|
|
|
|
set_target_properties(onnxruntime_objc PROPERTIES
|
|
FRAMEWORK TRUE
|
|
VERSION "1.0.0"
|
|
SOVERSION "1.0.0"
|
|
FRAMEWORK_VERSION "A"
|
|
PUBLIC_HEADER "${onnxruntime_objc_headers}"
|
|
FOLDER "ONNXRuntime"
|
|
)
|
|
|
|
set_property(TARGET onnxruntime_objc APPEND PROPERTY COMPILE_OPTIONS "-fvisibility=default")
|
|
|
|
target_link_options(onnxruntime_objc PRIVATE "-Wl,-headerpad_max_install_names")
|
|
|
|
add_custom_command(TARGET onnxruntime_objc POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc>/Libraries"
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"$<TARGET_FILE:onnxruntime>"
|
|
"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc>/Libraries"
|
|
COMMAND install_name_tool
|
|
-change "@rpath/$<TARGET_FILE_NAME:onnxruntime>"
|
|
"@rpath/$<TARGET_NAME:onnxruntime_objc>.framework/Libraries/$<TARGET_FILE_NAME:onnxruntime>"
|
|
"$<TARGET_FILE:onnxruntime_objc>")
|
|
|
|
install(TARGETS onnxruntime_objc
|
|
FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
if(onnxruntime_BUILD_UNIT_TESTS)
|
|
find_package(XCTest REQUIRED)
|
|
|
|
# onnxruntime_objc_test target
|
|
|
|
file(GLOB onnxruntime_objc_test_srcs CONFIGURE_DEPENDS
|
|
"${OBJC_ROOT}/test/*.h"
|
|
"${OBJC_ROOT}/test/*.m"
|
|
"${OBJC_ROOT}/test/*.mm")
|
|
|
|
source_group(TREE "${OBJC_ROOT}" FILES ${onnxruntime_objc_test_srcs})
|
|
|
|
xctest_add_bundle(onnxruntime_objc_test onnxruntime_objc
|
|
${onnxruntime_objc_headers}
|
|
${onnxruntime_objc_test_srcs})
|
|
|
|
onnxruntime_configure_target(onnxruntime_objc_test)
|
|
|
|
target_include_directories(onnxruntime_objc_test
|
|
PRIVATE
|
|
"${OBJC_ROOT}")
|
|
|
|
set_target_properties(onnxruntime_objc_test PROPERTIES
|
|
FOLDER "ONNXRuntimeTest"
|
|
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
|
|
|
|
add_custom_command(TARGET onnxruntime_objc_test POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OBJC_ROOT}/test/testdata"
|
|
"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc_test>/Resources")
|
|
|
|
xctest_add_test(XCTest.onnxruntime_objc_test onnxruntime_objc_test)
|
|
|
|
set_property(TEST XCTest.onnxruntime_objc_test APPEND PROPERTY
|
|
ENVIRONMENT "DYLD_LIBRARY_PATH=$<TARGET_FILE_DIR:onnxruntime>")
|
|
endif()
|