onnxruntime
162 строки · 4.9 Кб
1# Copyright (c) Microsoft Corporation. All rights reserved.
2# Licensed under the MIT License.
3
4if(NOT APPLE)
5message(FATAL_ERROR "The Objective-C API must be built on an Apple platform.")
6endif()
7
8if(NOT onnxruntime_BUILD_SHARED_LIB)
9message(FATAL_ERROR "The Objective-C API requires onnxruntime_BUILD_SHARED_LIB to be enabled.")
10endif()
11
12check_language(OBJC)
13if(CMAKE_OBJC_COMPILER)
14enable_language(OBJC)
15else()
16message(FATAL_ERROR "Objective-C is not supported.")
17endif()
18
19check_language(OBJCXX)
20if(CMAKE_OBJCXX_COMPILER)
21enable_language(OBJCXX)
22else()
23message(FATAL_ERROR "Objective-C++ is not supported.")
24endif()
25
26add_compile_options(
27"$<$<COMPILE_LANGUAGE:OBJC,OBJCXX>:-Wall>"
28"$<$<COMPILE_LANGUAGE:OBJC,OBJCXX>:-Wextra>")
29
30set(OBJC_ROOT "${REPO_ROOT}/objectivec")
31
32# onnxruntime_objc target
33
34# these headers are the public interface
35file(GLOB onnxruntime_objc_headers CONFIGURE_DEPENDS
36"${OBJC_ROOT}/include/*.h")
37
38file(GLOB onnxruntime_objc_srcs CONFIGURE_DEPENDS
39"${OBJC_ROOT}/*.h"
40"${OBJC_ROOT}/*.m"
41"${OBJC_ROOT}/*.mm")
42
43if(NOT onnxruntime_ENABLE_TRAINING_APIS)
44list(REMOVE_ITEM onnxruntime_objc_headers
45"${OBJC_ROOT}/include/ort_checkpoint.h"
46"${OBJC_ROOT}/include/ort_training_session.h")
47
48list(REMOVE_ITEM onnxruntime_objc_srcs
49"${OBJC_ROOT}/ort_checkpoint_internal.h"
50"${OBJC_ROOT}/ort_checkpoint.mm"
51"${OBJC_ROOT}/ort_training_session_internal.h"
52"${OBJC_ROOT}/ort_training_session.mm")
53endif()
54
55
56source_group(TREE "${OBJC_ROOT}" FILES
57${onnxruntime_objc_headers}
58${onnxruntime_objc_srcs})
59
60onnxruntime_add_shared_library(onnxruntime_objc
61${onnxruntime_objc_headers}
62${onnxruntime_objc_srcs})
63
64target_include_directories(onnxruntime_objc
65PUBLIC
66"${OBJC_ROOT}/include"
67PRIVATE
68"${ONNXRUNTIME_INCLUDE_DIR}/core/session"
69"${OBJC_ROOT}")
70
71if(onnxruntime_USE_COREML)
72target_include_directories(onnxruntime_objc
73PRIVATE
74"${ONNXRUNTIME_INCLUDE_DIR}/core/providers/coreml")
75endif()
76
77if (onnxruntime_ENABLE_TRAINING_APIS)
78target_include_directories(onnxruntime_objc
79PRIVATE
80"${ORTTRAINING_SOURCE_DIR}/training_api/include/")
81
82endif()
83
84find_library(FOUNDATION_LIB Foundation REQUIRED)
85
86target_link_libraries(onnxruntime_objc
87PRIVATE
88onnxruntime
89${FOUNDATION_LIB})
90
91set_target_properties(onnxruntime_objc PROPERTIES
92FRAMEWORK TRUE
93VERSION "1.0.0"
94SOVERSION "1.0.0"
95FRAMEWORK_VERSION "A"
96PUBLIC_HEADER "${onnxruntime_objc_headers}"
97FOLDER "ONNXRuntime"
98)
99
100set_property(TARGET onnxruntime_objc APPEND PROPERTY COMPILE_OPTIONS "-fvisibility=default")
101
102target_link_options(onnxruntime_objc PRIVATE "-Wl,-headerpad_max_install_names")
103
104add_custom_command(TARGET onnxruntime_objc POST_BUILD
105COMMAND ${CMAKE_COMMAND} -E make_directory
106"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc>/Libraries"
107COMMAND ${CMAKE_COMMAND} -E copy
108"$<TARGET_FILE:onnxruntime>"
109"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc>/Libraries"
110COMMAND install_name_tool
111-change "@rpath/$<TARGET_FILE_NAME:onnxruntime>"
112"@rpath/$<TARGET_NAME:onnxruntime_objc>.framework/Libraries/$<TARGET_FILE_NAME:onnxruntime>"
113"$<TARGET_FILE:onnxruntime_objc>")
114
115install(TARGETS onnxruntime_objc
116FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR})
117
118if(onnxruntime_BUILD_UNIT_TESTS)
119find_package(XCTest REQUIRED)
120
121# onnxruntime_objc_test target
122
123file(GLOB onnxruntime_objc_test_srcs CONFIGURE_DEPENDS
124"${OBJC_ROOT}/test/*.h"
125"${OBJC_ROOT}/test/*.m"
126"${OBJC_ROOT}/test/*.mm")
127
128if(NOT onnxruntime_ENABLE_TRAINING_APIS)
129list(REMOVE_ITEM onnxruntime_objc_test_srcs
130"${OBJC_ROOT}/test/ort_checkpoint_test.mm"
131"${OBJC_ROOT}/test/ort_training_session_test.mm"
132"${OBJC_ROOT}/test/ort_training_utils_test.mm")
133
134endif()
135
136source_group(TREE "${OBJC_ROOT}" FILES ${onnxruntime_objc_test_srcs})
137
138xctest_add_bundle(onnxruntime_objc_test onnxruntime_objc
139${onnxruntime_objc_headers}
140${onnxruntime_objc_test_srcs})
141
142onnxruntime_configure_target(onnxruntime_objc_test)
143
144target_include_directories(onnxruntime_objc_test
145PRIVATE
146"${OBJC_ROOT}")
147
148set_target_properties(onnxruntime_objc_test PROPERTIES
149FOLDER "ONNXRuntimeTest"
150XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
151
152add_custom_command(TARGET onnxruntime_objc_test POST_BUILD
153COMMAND ${CMAKE_COMMAND} -E copy_directory
154"${OBJC_ROOT}/test/testdata"
155"${ONNXRUNTIME_ROOT}/test/testdata/training_api"
156"$<TARGET_BUNDLE_CONTENT_DIR:onnxruntime_objc_test>/Resources")
157
158xctest_add_test(XCTest.onnxruntime_objc_test onnxruntime_objc_test)
159
160set_property(TEST XCTest.onnxruntime_objc_test APPEND PROPERTY
161ENVIRONMENT "DYLD_LIBRARY_PATH=$<TARGET_FILE_DIR:onnxruntime>")
162endif()
163