microsoft/onnxruntime-extensions

Public

mirrored from https://github.com/microsoft/onnxruntime-extensionsAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
compb

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

cmake/ext_tests.cmake

241lines · modeblame

8b00b409Edward Chen2 years ago1if (OCOS_ENABLE_SELECTED_OPLIST)
2# currently the tests don't handle operator exclusion cleanly.
3message(FATAL_ERROR "Due to usage of OCOS_ENABLE_SELECTED_OPLIST excluding operators the tests are unable to be built and run")
4endif()
5
6enable_testing()
7
8# Enable CTest
9message(STATUS "Fetch CTest")
10include(CTest)
11
12set(TEST_SRC_DIR ${PROJECT_SOURCE_DIR}/test)
13message(STATUS "Fetch googletest")
14include(googletest)
15
16if(IOS)
17find_package(XCTest REQUIRED)
18
19enable_language(OBJCXX)
20
21# enable ARC on Objective-C++ source files
22set_property(
23SOURCE
24"${TEST_SRC_DIR}/ios/dummy_testee_main.mm"
25"${TEST_SRC_DIR}/ios/xcgtest.mm"
26APPEND
27PROPERTY COMPILE_OPTIONS "-fobjc-arc")
28endif()
29
30function(add_test_target)
31set(optional_args)
32set(single_value_args
33# test target name
34TARGET)
35set(multi_value_args
36# test source files
37TEST_SOURCES
38# libraries to link to test target
39LIBRARIES
40# test data directories to copy to target directory
41TEST_DATA_DIRECTORIES)
42cmake_parse_arguments(ARG "${optional_args}" "${single_value_args}" "${multi_value_args}" ${ARGN})
43
44if(NOT IOS)
45# add a test executable
46
47add_executable(${ARG_TARGET})
48standardize_output_folder(${ARG_TARGET})
49add_test(NAME ${ARG_TARGET}
50COMMAND ${ARG_TARGET})
51target_sources(${ARG_TARGET} PRIVATE
52${ARG_TEST_SOURCES}
53"${TEST_SRC_DIR}/unittest_main/test_main.cc")
54target_link_libraries(${ARG_TARGET} PRIVATE
55${ARG_LIBRARIES}
ca433cbeWenbing Li2 years ago56gtest)
8b00b409Edward Chen2 years ago57
905b5746Yi Zhang2 years ago58if(OCOS_USE_CUDA)
5d558bd3Wenbing Li2 years ago59target_link_directories(${ARG_TARGET} PRIVATE ${CUDAToolkit_LIBRARY_DIR})
905b5746Yi Zhang2 years ago60endif()
61
8b00b409Edward Chen2 years ago62set(test_data_destination_root_directory ${onnxruntime_extensions_BINARY_DIR})
63
64else()
65# add a test that can run on iOS (simulator)
66# it requires a dummy testee target
67
68# create a dummy app to use as the testee target in xctest_add_bundle()
69set(dummy_testee_target ${ARG_TARGET}_dummy_testee)
70add_executable(${dummy_testee_target} "${TEST_SRC_DIR}/ios/dummy_testee_main.mm")
71set(_dummy_testee_version 1)
72set_target_properties(${dummy_testee_target} PROPERTIES
73MACOSX_BUNDLE TRUE
74MACOSX_BUNDLE_BUNDLE_NAME dummy_testee
75MACOSX_BUNDLE_GUI_IDENTIFIER com.onnxruntime.unittest.dummy_testee
76MACOSX_BUNDLE_LONG_VERSION_STRING ${_dummy_testee_version}
77MACOSX_BUNDLE_BUNDLE_VERSION ${_dummy_testee_version}
78MACOSX_BUNDLE_SHORT_VERSION_STRING ${_dummy_testee_version}
79XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES "YES"
80XCODE_ATTRIBUTE_ENABLE_BITCODE "NO"
81XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
82target_link_libraries(${dummy_testee_target} PRIVATE "-framework UIKit")
83
84xctest_add_bundle(${ARG_TARGET} ${dummy_testee_target})
85
86xctest_add_test("${ARG_TARGET}_xctest" ${ARG_TARGET})
87
88target_sources(${ARG_TARGET} PRIVATE
89${ARG_TEST_SOURCES}
90"${TEST_SRC_DIR}/ios/xcgtest.mm")
91
92target_link_libraries(${ARG_TARGET} PRIVATE
93${ARG_LIBRARIES}
ca433cbeWenbing Li2 years ago94gtest)
8b00b409Edward Chen2 years ago95
96set(test_data_destination_root_directory $<TARGET_FILE_DIR:${dummy_testee_target}>)
97
98endif()
99
100# copy any test data directories to the target directory
101foreach(test_data_directory ${ARG_TEST_DATA_DIRECTORIES})
102cmake_path(GET test_data_directory FILENAME test_data_directory_filename)
103if(NOT test_data_directory_filename)
104# There's no filename if the path has a trailing directory separator.
105# In that case, try to get the filename of the parent path.
106cmake_path(GET test_data_directory PARENT_PATH test_data_directory_parent)
107cmake_path(GET test_data_directory_parent FILENAME test_data_directory_filename)
108endif()
109if(NOT test_data_directory_filename)
110message(FATAL_ERROR "Failed to get filename for test data directory: ${test_data_directory}")
111endif()
112
113set(destination_directory ${test_data_destination_root_directory}/${test_data_directory_filename})
114
115add_custom_command(
116TARGET ${ARG_TARGET} POST_BUILD
117COMMAND ${CMAKE_COMMAND} -E copy_directory
118${test_data_directory} ${destination_directory})
119endforeach()
120
121endfunction(add_test_target)
122
123# -- static test --
124file(GLOB static_TEST_SRC "${TEST_SRC_DIR}/static_test/*.cc")
125
126add_test_target(TARGET ocos_test
127TEST_SOURCES ${static_TEST_SRC}
128LIBRARIES ortcustomops ${ocos_libraries})
64646279Wenbing Li2 years ago129target_compile_definitions(ocos_test PRIVATE ${OCOS_COMPILE_DEFINITIONS})
8b00b409Edward Chen2 years ago130
be29e28dWenbing Li1 years ago131if (OCOS_ENABLE_C_API AND OCOS_BUILD_SHARED_LIB)
ca433cbeWenbing Li2 years ago132file(GLOB pp_api_TEST_SRC
133"${TEST_SRC_DIR}/pp_api_test/*.c"
134"${TEST_SRC_DIR}/pp_api_test/*.cc"
135"${TEST_SRC_DIR}/pp_api_test/*.h")
136
137add_test_target(TARGET pp_api_test
138TEST_SOURCES ${pp_api_TEST_SRC}
139LIBRARIES onnxruntime_extensions ${ocos_libraries}
140TEST_DATA_DIRECTORIES ${TEST_SRC_DIR}/data)
141
142target_compile_definitions(pp_api_test PRIVATE ${OCOS_COMPILE_DEFINITIONS})
143target_include_directories(pp_api_test PRIVATE
144${PROJECT_SOURCE_DIR}/
145"$<TARGET_PROPERTY:ortcustomops,INTERFACE_INCLUDE_DIRECTORIES>"
146"$<TARGET_PROPERTY:ocos_operators,INTERFACE_INCLUDE_DIRECTORIES>")
147
cbed8fd5Wenbing Li2 years ago148if (ORTX_DATA_PATH)
149file(TO_NATIVE_PATH "${ORTX_DATA_PATH}/tests/data2" _TEST_DATA2)
ca433cbeWenbing Li2 years ago150add_custom_command(TARGET pp_api_test POST_BUILD
151COMMAND ${CMAKE_COMMAND} -E create_symlink ${_TEST_DATA2} ${onnxruntime_extensions_BINARY_DIR}/data2)
152endif()
153endif()
154
155
8b00b409Edward Chen2 years ago156# -- shared test (needs onnxruntime) --
ca433cbeWenbing Li2 years ago157# avoid blindling searching for onnxruntime library
158# wbhich leads to a unpredictable result
159if (NOT ONNXRUNTIME_LIB_DIR)
160set(ONNXRUNTIME "ONNXRUNTIME-NOTFOUND")
161else()
162SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
163find_library(ONNXRUNTIME onnxruntime HINTS "${ONNXRUNTIME_LIB_DIR}")
164endif()
8b00b409Edward Chen2 years ago165
be29e28dWenbing Li1 years ago166if (OCOS_BUILD_SHARED_LIB)
167if("${ONNXRUNTIME}" STREQUAL "ONNXRUNTIME-NOTFOUND")
168message(WARNING "The prebuilt onnxruntime library was not found, extensions_test will be skipped.")
169else()
170block()
171if(NOT IOS)
172set(use_extensions_shared_library 1)
173endif()
174
175set(extensions_target $<IF:$<BOOL:${use_extensions_shared_library}>,extensions_shared,ortcustomops>)
176
177file(GLOB shared_TEST_SRC
178"${TEST_SRC_DIR}/shared_test/*.cc"
179"${TEST_SRC_DIR}/shared_test/*.hpp")
180
181set(extensions_test_libraries ${extensions_target} ${ONNXRUNTIME})
182
183if(use_extensions_shared_library)
184list(APPEND extensions_test_libraries ${ocos_libraries})
185endif()
186
187# needs to link with stdc++fs in Linux
188if(LINUX)
189list(APPEND extensions_test_libraries stdc++fs -pthread)
190endif()
191
1b807949Wenbing Li1 years ago192if (NOT MSVC)
193list(APPEND extensions_test_libraries ${CMAKE_DL_LIBS})
194endif()
195
be29e28dWenbing Li1 years ago196add_test_target(TARGET extensions_test
197TEST_SOURCES ${shared_TEST_SRC}
198LIBRARIES ${extensions_test_libraries}
199TEST_DATA_DIRECTORIES ${TEST_SRC_DIR}/data)
200
201target_include_directories(extensions_test PRIVATE ${spm_INCLUDE_DIRS})
202
203target_compile_definitions(extensions_test PUBLIC ${OCOS_COMPILE_DEFINITIONS})
204if(use_extensions_shared_library)
205target_compile_definitions(extensions_test PUBLIC ORT_EXTENSIONS_UNIT_TEST_USE_EXTENSIONS_SHARED_LIBRARY)
206endif()
207
208# FUTURE: This is required to use the ORT C++ API with delayed init which must be done conditionally using
209# ifdef OCOS_BUILD_SHARED in RegisterCustomOps and where onnxruntime_cxx_api.h is included .
210# ---
211# We have to remove the OCOS_BUILD_SHARED when building the test code. It is used to delay population of the
212# ORT api pointer until RegisterCustomOps is called, but the test code needs to create an ORT env which requires
213# the pointer to exist.
214# set(test_compile_definitions ${OCOS_COMPILE_DEFINITIONS})
215# remove(test_compile_definitions "OCOS_SHARED_LIBRARY")
216# target_compile_definitions(extensions_test PUBLIC ${test_compile_definitions})
217
218# Copy onnxruntime DLL files into the same directory as the test binary.
219if(WIN32)
220file(TO_CMAKE_PATH "${ONNXRUNTIME_LIB_DIR}/*" ONNXRUNTIME_LIB_FILEPATTERN)
221file(GLOB ONNXRUNTIME_LIB_FILES CONFIGURE_DEPENDS "${ONNXRUNTIME_LIB_FILEPATTERN}")
222add_custom_command(
223TARGET extensions_test POST_BUILD
224COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ONNXRUNTIME_LIB_FILES} $<TARGET_FILE_DIR:extensions_test>)
225endif()
226
227# Copy onnxruntime shared library to known location for easy access, e.g., for adb push to emulator or device.
228if(ANDROID)
229add_custom_command(
230TARGET extensions_test POST_BUILD
231COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ONNXRUNTIME} ${CMAKE_BINARY_DIR}/lib
232)
233endif()
234
235if (OCOS_ENABLE_C_API)
236# avoid copying the same data directory at the same time.
237add_dependencies(extensions_test pp_api_test)
238endif()
239endblock()
240endif()
4781a9d1Wenbing Li2 years ago241endif()