diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 15b5e42b1f2e2..477d077a804de 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -101,6 +101,7 @@ option(onnxruntime_BUILD_UNIT_TESTS "Build ONNXRuntime unit tests" ON) option(onnxruntime_BUILD_CSHARP "Build C# library" OFF) option(onnxruntime_BUILD_OBJC "Build Objective-C library" OFF) option(onnxruntime_USE_PREINSTALLED_EIGEN "Use pre-installed EIGEN. Need to provide eigen_SOURCE_PATH if turn this on." OFF) +option(onnxruntime_USE_EIGEN_PACKAGE "Use Eigen obtained via find_package. Note that onnxruntime is incompatible with the current major Eigen release. See the eigen commit in cmake/deps.txt." OFF) option(onnxruntime_BUILD_BENCHMARKS "Build ONNXRuntime micro-benchmarks" OFF) option(onnxruntime_USE_LLVM "Build TVM with LLVM" OFF) option(onnxruntime_USE_VSINPU "Build with VSINPU support" OFF) @@ -1708,12 +1709,10 @@ if (onnxruntime_USE_WINML) list(APPEND ONNXRUNTIME_CMAKE_FILES winml) endif() # if (onnxruntime_USE_WINML) -if (onnxruntime_BUILD_SHARED_LIB OR onnxruntime_BUILD_APPLE_FRAMEWORK) - if (onnxruntime_BUILD_APPLE_FRAMEWORK AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin|iOS|visionOS") - message(FATAL_ERROR "onnxruntime_BUILD_APPLE_FRAMEWORK can only be enabled for macOS or iOS or visionOS.") - endif() - list(APPEND ONNXRUNTIME_CMAKE_FILES onnxruntime) +if (onnxruntime_BUILD_APPLE_FRAMEWORK AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin|iOS|visionOS") + message(FATAL_ERROR "onnxruntime_BUILD_APPLE_FRAMEWORK can only be enabled for macOS or iOS or visionOS.") endif() +list(APPEND ONNXRUNTIME_CMAKE_FILES onnxruntime) if (onnxruntime_BUILD_JAVA) message(STATUS "Java Build is enabled") @@ -1828,33 +1827,56 @@ if (onnxruntime_ENABLE_EXTERNAL_CUSTOM_OP_SCHEMAS) ) endif() -if(TARGET onnxruntime) # Install - include(GNUInstallDirs) - include(CMakePackageConfigHelpers) - set(PROJECT_CONFIG_CONTENT "@PACKAGE_INIT@\n") - string(APPEND PROJECT_CONFIG_CONTENT - "include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")") - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/PROJECT_CONFIG_FILE" ${PROJECT_CONFIG_CONTENT}) - install(EXPORT ${PROJECT_NAME}Targets - NAMESPACE ${PROJECT_NAME}:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) -# Create config for find_package() - configure_package_config_file( - "${CMAKE_CURRENT_BINARY_DIR}/PROJECT_CONFIG_FILE" ${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") - - write_basic_package_version_file( - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - VERSION ${ORT_VERSION} - COMPATIBILITY SameMajorVersion) +include(CMakePackageConfigHelpers) + +set(PROJECT_CONFIG_CONTENT "@PACKAGE_INIT@\n") + +if (NOT onnxruntime_BUILD_SHARED_LIB) +string(APPEND PROJECT_CONFIG_CONTENT + "include(CMakeFindDependencyMacro)\n\ + find_dependency(absl)\n\ + find_dependency(date)\n\ + find_dependency(Eigen3)\n\ + find_dependency(nlohmann_json)\n\ + find_dependency(ONNX)\n\ + find_dependency(re2)\n\ + find_dependency(flatbuffers)\n\ + find_dependency(cpuinfo)\n\ + find_dependency(protobuf)\n\ + find_dependency(Boost COMPONENTS mp11)\n\ + find_dependency(Microsoft.GSL 4.0)\n\ + find_dependency(Iconv)\n\ + find_path(safeint_SOURCE_DIR NAMES \"SafeInt.hpp\" REQUIRED)\n\ + add_library(safeint_interface IMPORTED INTERFACE)\n\ + target_include_directories(safeint_interface INTERFACE ${safeint_SOURCE_DIR})\n\ + ") +endif() + +string(APPEND PROJECT_CONFIG_CONTENT + "include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")\n") + + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/PROJECT_CONFIG_FILE" ${PROJECT_CONFIG_CONTENT}) +install(EXPORT ${PROJECT_NAME}Targets + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) - install( - FILES - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") -endif() +# Create config for find_package() +configure_package_config_file( + "${CMAKE_CURRENT_BINARY_DIR}/PROJECT_CONFIG_FILE" ${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${ORT_VERSION} + COMPATIBILITY SameMajorVersion) + +install( + FILES + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") if(DEFINED BUILD_AS_ARM64X) set(ARM64X_TARGETS onnxruntime) diff --git a/cmake/external/abseil-cpp.cmake b/cmake/external/abseil-cpp.cmake index 7b6e2141eeb1b..93a5e5e0d2da0 100644 --- a/cmake/external/abseil-cpp.cmake +++ b/cmake/external/abseil-cpp.cmake @@ -9,15 +9,21 @@ set(BUILD_TESTING 0) set(ABSL_BUILD_TESTING OFF) set(ABSL_BUILD_TEST_HELPERS OFF) set(ABSL_USE_EXTERNAL_GOOGLETEST ON) + +# Both abseil and xnnpack create a target called memory, which +# results in a duplicate target if ABSL_ENABLE_INSTALL is on. +if (onnxruntime_USE_XNNPACK) + set(ABSL_ENABLE_INSTALL OFF) +else() + set(ABSL_ENABLE_INSTALL ON) +endif() + if(Patch_FOUND AND WIN32) set(ABSL_PATCH_COMMAND ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/abseil/absl_windows.patch) else() set(ABSL_PATCH_COMMAND "") endif() -if(WIN32 AND NOT Patch_FOUND) - #see https://github.com/google/re2/issues/425 and https://github.com/google/re2/issues/436 - set(ABSL_ENABLE_INSTALL ON) -endif() + # NB! Advancing Abseil version changes its internal namespace, # currently absl::lts_20240116 which affects abseil-cpp.natvis debugger # visualization file, that must be adjusted accordingly, unless we eliminate diff --git a/cmake/external/eigen.cmake b/cmake/external/eigen.cmake index 339cded091b29..40661c2a41d20 100644 --- a/cmake/external/eigen.cmake +++ b/cmake/external/eigen.cmake @@ -18,6 +18,6 @@ else () ) endif() - FetchContent_Populate(eigen) + onnxruntime_fetchcontent_makeavailable(eigen) set(eigen_INCLUDE_DIRS "${eigen_SOURCE_DIR}") endif() diff --git a/cmake/external/extensions.cmake b/cmake/external/extensions.cmake index 68796ad02d982..7776664891876 100644 --- a/cmake/external/extensions.cmake +++ b/cmake/external/extensions.cmake @@ -51,9 +51,24 @@ else() add_subdirectory(${onnxruntime_EXTENSIONS_PATH} ${CMAKE_BINARY_DIR}/_deps/extensions-subbuild EXCLUDE_FROM_ALL) endif() +# move internal includes generated by onnxruntime-extensions as PUBLIC +# from INTERFACE_INCLUDE_DIRECTORIES to INTERFACE_DIRECTORIES for the +# targets that we will link to +get_target_property(ocos_operators_INTERFACE_INCLUDES ocos_operators INTERFACE_INCLUDE_DIRECTORIES) +target_include_directories(ocos_operators PRIVATE ${ocos_operators_INTERFACE_INCLUDES}) +set_target_properties(ocos_operators PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "") + +get_target_property(noexcep_operators_INTERFACE_INCLUDES noexcep_operators INTERFACE_INCLUDE_DIRECTORIES) +target_include_directories(noexcep_operators PRIVATE ${noexcep_operators_INTERFACE_INCLUDES}) +set_target_properties(noexcep_operators PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "") + +get_target_property(ortcustomops_INTERFACE_INCLUDES ortcustomops INTERFACE_INCLUDE_DIRECTORIES) +target_include_directories(ortcustomops PRIVATE ${ortcustomops_INTERFACE_INCLUDES} ${ONNXRUNTIME_INCLUDE_DIR}/core/session) +set_target_properties(ortcustomops PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "") + # target library or executable are defined in CMakeLists.txt of onnxruntime-extensions target_include_directories(ocos_operators PRIVATE ${RE2_INCLUDE_DIR} ${json_SOURCE_DIR}/include) -target_include_directories(ortcustomops PUBLIC ${onnxruntime_EXTENSIONS_PATH}/includes) +target_include_directories(ortcustomops PUBLIC $) if(OCOS_ENABLE_SPM_TOKENIZER) onnxruntime_add_include_to_target(sentencepiece-static ${PROTOBUF_LIB} ${ABSEIL_LIBS}) endif() @@ -63,3 +78,10 @@ onnxruntime_add_include_to_target(noexcep_operators ${PROTOBUF_LIB} ${ABSEIL_LIB add_dependencies(ocos_operators ${onnxruntime_EXTERNAL_DEPENDENCIES}) add_dependencies(ortcustomops ${onnxruntime_EXTERNAL_DEPENDENCIES}) +if (NOT onnxruntime_BUILD_SHARED_LIB) + install(TARGETS ocos_operators ortcustomops noexcep_operators EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/cmake/external/onnxruntime_external_deps.cmake b/cmake/external/onnxruntime_external_deps.cmake index a69d2649ad832..d8946bf6a7b1b 100644 --- a/cmake/external/onnxruntime_external_deps.cmake +++ b/cmake/external/onnxruntime_external_deps.cmake @@ -185,7 +185,8 @@ endif() # for cross-compiling #2. if ONNX_CUSTOM_PROTOC_EXECUTABLE is not set, Compile everything(including protoc) from source code. if(Patch_FOUND) - set(ONNXRUNTIME_PROTOBUF_PATCH_COMMAND ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/protobuf/protobuf_cmake.patch) + set(ONNXRUNTIME_PROTOBUF_PATCH_COMMAND ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/protobuf/protobuf_cmake.patch && + ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/protobuf/protobuf_android_log.patch) else() set(ONNXRUNTIME_PROTOBUF_PATCH_COMMAND "") endif() @@ -274,23 +275,23 @@ FetchContent_Declare( ) onnxruntime_fetchcontent_makeavailable(date) +find_package(Boost COMPONENTS mp11) + +if (NOT TARGET Boost::mp11) FetchContent_Declare( mp11 URL ${DEP_URL_mp11} URL_HASH SHA1=${DEP_SHA1_mp11} - FIND_PACKAGE_ARGS NAMES Boost ) -onnxruntime_fetchcontent_makeavailable(mp11) -if(NOT TARGET Boost::mp11) - if(onnxruntime_USE_VCPKG) - find_package(Boost REQUIRED) - endif() - message(STATUS "Aliasing Boost::headers to Boost::mp11") - add_library(Boost::mp11 ALIAS Boost::headers) + +FetchContent_Populate(mp11) + +add_library(Boost::mp11 IMPORTED INTERFACE) +target_include_directories(Boost::mp11 INTERFACE ${mp11_SOURCE_DIR}/include) endif() set(JSON_BuildTests OFF CACHE INTERNAL "") -set(JSON_Install OFF CACHE INTERNAL "") +set(JSON_Install ON CACHE INTERNAL "") FetchContent_Declare( nlohmann_json @@ -400,6 +401,7 @@ if ((CPUINFO_SUPPORTED OR onnxruntime_USE_XNNPACK) AND NOT ANDROID) endif() endif() +set(GSL_INSTALL ON) if(onnxruntime_USE_CUDA) FetchContent_Declare( GSL @@ -432,7 +434,7 @@ if(NOT safeint_SOURCE_DIR) # use fetch content rather than makeavailable because safeint only includes unconditional test targets FetchContent_Populate(safeint) endif() -add_library(safeint_interface INTERFACE) +add_library(safeint_interface IMPORTED INTERFACE) target_include_directories(safeint_interface INTERFACE ${safeint_SOURCE_DIR}) @@ -442,7 +444,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "Android" OR set(FLATBUFFERS_BUILD_FLATC OFF CACHE BOOL "FLATBUFFERS_BUILD_FLATC" FORCE) endif() set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "FLATBUFFERS_BUILD_TESTS" FORCE) -set(FLATBUFFERS_INSTALL OFF CACHE BOOL "FLATBUFFERS_INSTALL" FORCE) +set(FLATBUFFERS_INSTALL ON CACHE BOOL "FLATBUFFERS_INSTALL" FORCE) set(FLATBUFFERS_BUILD_FLATHASH OFF CACHE BOOL "FLATBUFFERS_BUILD_FLATHASH" FORCE) set(FLATBUFFERS_BUILD_FLATLIB ON CACHE BOOL "FLATBUFFERS_BUILD_FLATLIB" FORCE) if(Patch_FOUND) @@ -506,7 +508,7 @@ FetchContent_Declare( URL_HASH SHA1=${DEP_SHA1_onnx} PATCH_COMMAND ${ONNXRUNTIME_ONNX_PATCH_COMMAND} FIND_PACKAGE_ARGS NAMES ONNX onnx -) + ) if (NOT onnxruntime_MINIMAL_BUILD) onnxruntime_fetchcontent_makeavailable(onnx) else() @@ -522,7 +524,10 @@ if(TARGET ONNX::onnx_proto AND NOT TARGET onnx_proto) add_library(onnx_proto ALIAS ONNX::onnx_proto) endif() +if(onnxruntime_USE_EIGEN_PACKAGE) find_package(Eigen3 CONFIG) +endif() + if(Eigen3_FOUND) get_target_property(eigen_INCLUDE_DIRS Eigen3::Eigen INTERFACE_INCLUDE_DIRECTORIES) else() diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index 9602e54f3bc2d..a3c7f6858c8dc 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -56,144 +56,149 @@ get_c_cxx_api_headers(ONNXRUNTIME_PUBLIC_HEADERS) #If you want to verify if there is any extra line in symbols.txt, run # nm -C -g --defined libonnxruntime.so |grep -v '\sA\s' | cut -f 3 -d ' ' | sort # after build +if(onnxruntime_BUILD_SHARED_LIB) + list(APPEND SYMBOL_FILES "${REPO_ROOT}/tools/ci_build/gen_def.py") + foreach(f ${ONNXRUNTIME_PROVIDER_NAMES}) + list(APPEND SYMBOL_FILES "${ONNXRUNTIME_ROOT}/core/providers/${f}/symbols.txt") + endforeach() -list(APPEND SYMBOL_FILES "${REPO_ROOT}/tools/ci_build/gen_def.py") -foreach(f ${ONNXRUNTIME_PROVIDER_NAMES}) - list(APPEND SYMBOL_FILES "${ONNXRUNTIME_ROOT}/core/providers/${f}/symbols.txt") -endforeach() - -if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") -add_custom_command(OUTPUT ${SYMBOL_FILE} ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c - COMMAND ${Python_EXECUTABLE} "${REPO_ROOT}/tools/ci_build/gen_def.py" - --version_file "${ONNXRUNTIME_ROOT}/../VERSION_NUMBER" --src_root "${ONNXRUNTIME_ROOT}" - --config ${ONNXRUNTIME_PROVIDER_NAMES} --style=${OUTPUT_STYLE} --output ${SYMBOL_FILE} - --output_source ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c - DEPENDS ${SYMBOL_FILES} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - -add_custom_target(onnxruntime_generate_def ALL DEPENDS ${SYMBOL_FILE} ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c) -endif() -if(WIN32) - onnxruntime_add_shared_library(onnxruntime - ${SYMBOL_FILE} - "${ONNXRUNTIME_ROOT}/core/dll/dllmain.cc" - "${ONNXRUNTIME_ROOT}/core/dll/onnxruntime.rc" - ) -elseif(onnxruntime_BUILD_APPLE_FRAMEWORK) - # apple framework requires the header file be part of the library - onnxruntime_add_shared_library(onnxruntime - ${ONNXRUNTIME_PUBLIC_HEADERS} - "${CMAKE_CURRENT_BINARY_DIR}/generated_source.c" - ) - - # create Info.plist for the framework and podspec for CocoaPods (optional) - set(MACOSX_FRAMEWORK_NAME "onnxruntime") - set(MACOSX_FRAMEWORK_IDENTIFIER "com.microsoft.onnxruntime") + if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") + add_custom_command(OUTPUT ${SYMBOL_FILE} ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c + COMMAND ${Python_EXECUTABLE} "${REPO_ROOT}/tools/ci_build/gen_def.py" + --version_file "${ONNXRUNTIME_ROOT}/../VERSION_NUMBER" --src_root "${ONNXRUNTIME_ROOT}" + --config ${ONNXRUNTIME_PROVIDER_NAMES} --style=${OUTPUT_STYLE} --output ${SYMBOL_FILE} + --output_source ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c + DEPENDS ${SYMBOL_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - # Setup weak frameworks for macOS/iOS. 'weak' as the CoreML or WebGPU EPs are optionally enabled. - if(onnxruntime_USE_COREML) - list(APPEND _weak_frameworks "\\\"CoreML\\\"") + add_custom_target(onnxruntime_generate_def ALL DEPENDS ${SYMBOL_FILE} ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c) endif() + if(WIN32) + onnxruntime_add_shared_library(onnxruntime + ${SYMBOL_FILE} + "${ONNXRUNTIME_ROOT}/core/dll/dllmain.cc" + "${ONNXRUNTIME_ROOT}/core/dll/onnxruntime.rc" + ) + elseif(onnxruntime_BUILD_APPLE_FRAMEWORK) + # apple framework requires the header file be part of the library + onnxruntime_add_shared_library(onnxruntime + ${ONNXRUNTIME_PUBLIC_HEADERS} + "${CMAKE_CURRENT_BINARY_DIR}/generated_source.c" + ) + + # create Info.plist for the framework and podspec for CocoaPods (optional) + set(MACOSX_FRAMEWORK_NAME "onnxruntime") + set(MACOSX_FRAMEWORK_IDENTIFIER "com.microsoft.onnxruntime") + + # Setup weak frameworks for macOS/iOS. 'weak' as the CoreML or WebGPU EPs are optionally enabled. + if(onnxruntime_USE_COREML) + list(APPEND _weak_frameworks "\\\"CoreML\\\"") + endif() - if(onnxruntime_USE_WEBGPU) - list(APPEND _weak_frameworks "\\\"QuartzCore\\\"") - list(APPEND _weak_frameworks "\\\"IOSurface\\\"") - list(APPEND _weak_frameworks "\\\"Metal\\\"") - endif() + if(onnxruntime_USE_WEBGPU) + list(APPEND _weak_frameworks "\\\"QuartzCore\\\"") + list(APPEND _weak_frameworks "\\\"IOSurface\\\"") + list(APPEND _weak_frameworks "\\\"Metal\\\"") + endif() + + if (_weak_frameworks) + string(JOIN ", " APPLE_WEAK_FRAMEWORK ${_weak_frameworks}) + endif() - if (_weak_frameworks) - string(JOIN ", " APPLE_WEAK_FRAMEWORK ${_weak_frameworks}) + set(INFO_PLIST_PATH "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") + configure_file(${REPO_ROOT}/cmake/Info.plist.in ${INFO_PLIST_PATH}) + configure_file( + ${REPO_ROOT}/tools/ci_build/github/apple/framework_info.json.template + ${CMAKE_CURRENT_BINARY_DIR}/framework_info.json) + set_target_properties(onnxruntime PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION A + MACOSX_FRAMEWORK_INFO_PLIST ${INFO_PLIST_PATH} + # Note: The PUBLIC_HEADER and VERSION properties for the 'onnxruntime' target will be set later in this file. + ) + else() + if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") + onnxruntime_add_shared_library(onnxruntime ${ONNXRUNTIME_ROOT}/core/session/onnxruntime_c_api.cc) + else() + onnxruntime_add_shared_library(onnxruntime ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c ) + endif() + if (onnxruntime_USE_CUDA) + set_property(TARGET onnxruntime APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN") + endif() endif() - set(INFO_PLIST_PATH "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") - configure_file(${REPO_ROOT}/cmake/Info.plist.in ${INFO_PLIST_PATH}) - configure_file( - ${REPO_ROOT}/tools/ci_build/github/apple/framework_info.json.template - ${CMAKE_CURRENT_BINARY_DIR}/framework_info.json) - set_target_properties(onnxruntime PROPERTIES - FRAMEWORK TRUE - FRAMEWORK_VERSION A - MACOSX_FRAMEWORK_INFO_PLIST ${INFO_PLIST_PATH} - # Note: The PUBLIC_HEADER and VERSION properties for the 'onnxruntime' target will be set later in this file. - ) -else() if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - onnxruntime_add_shared_library(onnxruntime ${ONNXRUNTIME_ROOT}/core/session/onnxruntime_c_api.cc) + add_dependencies(onnxruntime ${onnxruntime_EXTERNAL_DEPENDENCIES}) else() - onnxruntime_add_shared_library(onnxruntime ${CMAKE_CURRENT_BINARY_DIR}/generated_source.c ) + add_dependencies(onnxruntime onnxruntime_generate_def ${onnxruntime_EXTERNAL_DEPENDENCIES}) endif() - if (onnxruntime_USE_CUDA) - set_property(TARGET onnxruntime APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN") - endif() -endif() - -if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - add_dependencies(onnxruntime ${onnxruntime_EXTERNAL_DEPENDENCIES}) -else() - add_dependencies(onnxruntime onnxruntime_generate_def ${onnxruntime_EXTERNAL_DEPENDENCIES}) -endif() -target_include_directories(onnxruntime PRIVATE ${ONNXRUNTIME_ROOT} PUBLIC "$") + target_include_directories(onnxruntime PRIVATE ${ONNXRUNTIME_ROOT} PUBLIC "$") -target_compile_definitions(onnxruntime PRIVATE FILE_NAME=\"onnxruntime.dll\") + target_compile_definitions(onnxruntime PRIVATE FILE_NAME=\"onnxruntime.dll\") -if(UNIX) - if (APPLE) - set(ONNXRUNTIME_SO_LINK_FLAG " -Xlinker -dead_strip") - elseif(NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(ONNXRUNTIME_SO_LINK_FLAG " -Xlinker --version-script=${SYMBOL_FILE} -Xlinker --no-undefined -Xlinker --gc-sections -z noexecstack") + if(UNIX) + if (APPLE) + set(ONNXRUNTIME_SO_LINK_FLAG " -Xlinker -dead_strip") + elseif(NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") + set(ONNXRUNTIME_SO_LINK_FLAG " -Xlinker --version-script=${SYMBOL_FILE} -Xlinker --no-undefined -Xlinker --gc-sections -z noexecstack") + endif() + else() + set(ONNXRUNTIME_SO_LINK_FLAG " -DEF:${SYMBOL_FILE}") endif() -else() - set(ONNXRUNTIME_SO_LINK_FLAG " -DEF:${SYMBOL_FILE}") -endif() -if (NOT WIN32) - if (APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "^iOS") - set(ONNXRUNTIME_SO_LINK_FLAG " -Wl,-exported_symbols_list,${SYMBOL_FILE}") - if (${CMAKE_SYSTEM_NAME} STREQUAL "iOS") - set_target_properties(onnxruntime PROPERTIES - MACOSX_RPATH TRUE - INSTALL_RPATH_USE_LINK_PATH FALSE - BUILD_WITH_INSTALL_NAME_DIR TRUE - INSTALL_NAME_DIR @rpath) - else() - set_target_properties(onnxruntime PROPERTIES INSTALL_RPATH "@loader_path") + if (NOT WIN32) + if (APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "^iOS") + set(ONNXRUNTIME_SO_LINK_FLAG " -Wl,-exported_symbols_list,${SYMBOL_FILE}") + if (${CMAKE_SYSTEM_NAME} STREQUAL "iOS") + set_target_properties(onnxruntime PROPERTIES + MACOSX_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH FALSE + BUILD_WITH_INSTALL_NAME_DIR TRUE + INSTALL_NAME_DIR @rpath) + else() + set_target_properties(onnxruntime PROPERTIES INSTALL_RPATH "@loader_path") + endif() + elseif (NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'") endif() - elseif (NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'") endif() -endif() -if(CMAKE_SYSTEM_NAME STREQUAL "Android" AND onnxruntime_MINIMAL_BUILD) - # target onnxruntime is a shared library, the dummy __cxa_demangle is only attach to it to avoid - # affecting downstream ort library users with the behavior of dummy __cxa_demangle. So the dummy - # __cxa_demangle must not expose to libonnxruntime_common.a. It works as when the linker is - # creating the DSO, our dummy __cxa_demangle always comes before libc++abi.a so the - # __cxa_demangle in libc++abi.a is discarded, thus, huge binary size reduction. - target_sources(onnxruntime PRIVATE "${ONNXRUNTIME_ROOT}/core/platform/android/cxa_demangle.cc") - target_compile_definitions(onnxruntime PRIVATE USE_DUMMY_EXA_DEMANGLE=1) -endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android" AND onnxruntime_MINIMAL_BUILD) + # target onnxruntime is a shared library, the dummy __cxa_demangle is only attach to it to avoid + # affecting downstream ort library users with the behavior of dummy __cxa_demangle. So the dummy + # __cxa_demangle must not expose to libonnxruntime_common.a. It works as when the linker is + # creating the DSO, our dummy __cxa_demangle always comes before libc++abi.a so the + # __cxa_demangle in libc++abi.a is discarded, thus, huge binary size reduction. + target_sources(onnxruntime PRIVATE "${ONNXRUNTIME_ROOT}/core/platform/android/cxa_demangle.cc") + target_compile_definitions(onnxruntime PRIVATE USE_DUMMY_EXA_DEMANGLE=1) + endif() -# strip binary on Android, or for a minimal build on Unix -if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (onnxruntime_MINIMAL_BUILD AND UNIX)) - if (onnxruntime_MINIMAL_BUILD AND ADD_DEBUG_INFO_TO_MINIMAL_BUILD) - # don't strip - else() - set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_RELEASE -s) - set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_MINSIZEREL -s) + # strip binary on Android, or for a minimal build on Unix + if(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (onnxruntime_MINIMAL_BUILD AND UNIX)) + if (onnxruntime_MINIMAL_BUILD AND ADD_DEBUG_INFO_TO_MINIMAL_BUILD) + # don't strip + else() + set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_RELEASE -s) + set_target_properties(onnxruntime PROPERTIES LINK_FLAGS_MINSIZEREL -s) + endif() + endif() + + # we need to copy C/C++ API headers to be packed into Android AAR package + if(CMAKE_SYSTEM_NAME STREQUAL "Android" AND onnxruntime_BUILD_JAVA) + set(ANDROID_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/android/headers) + file(MAKE_DIRECTORY ${ANDROID_HEADERS_DIR}) + # copy the header files one by one + foreach(h_ ${ONNXRUNTIME_PUBLIC_HEADERS}) + get_filename_component(HEADER_NAME_ ${h_} NAME) + add_custom_command(TARGET onnxruntime POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${h_} ${ANDROID_HEADERS_DIR}/${HEADER_NAME_}) + endforeach() endif() endif() -# we need to copy C/C++ API headers to be packed into Android AAR package -if(CMAKE_SYSTEM_NAME STREQUAL "Android" AND onnxruntime_BUILD_JAVA) - set(ANDROID_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/android/headers) - file(MAKE_DIRECTORY ${ANDROID_HEADERS_DIR}) - # copy the header files one by one - foreach(h_ ${ONNXRUNTIME_PUBLIC_HEADERS}) - get_filename_component(HEADER_NAME_ ${h_} NAME) - add_custom_command(TARGET onnxruntime POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${h_} ${ANDROID_HEADERS_DIR}/${HEADER_NAME_}) - endforeach() +if (NOT onnxruntime_BUILD_SHARED_LIB) +add_library(onnxruntime INTERFACE) endif() # This list is a reversed topological ordering of library dependencies. @@ -243,10 +248,17 @@ endif() # If you are linking a new library, please add it to the list onnxruntime_INTERNAL_LIBRARIES or onnxruntime_EXTERNAL_LIBRARIES, # Please do not add a library directly to the target_link_libraries command -target_link_libraries(onnxruntime PRIVATE +if (onnxruntime_BUILD_SHARED_LIB) + target_link_libraries(onnxruntime PRIVATE + ${onnxruntime_INTERNAL_LIBRARIES} + ${onnxruntime_EXTERNAL_LIBRARIES} + ) +else() + target_link_libraries(onnxruntime INTERFACE ${onnxruntime_INTERNAL_LIBRARIES} ${onnxruntime_EXTERNAL_LIBRARIES} -) + ) +endif() set_property(TARGET onnxruntime APPEND_STRING PROPERTY LINK_FLAGS ${ONNXRUNTIME_SO_LINK_FLAG} ${onnxruntime_DELAYLOAD_FLAGS}) #See: https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html diff --git a/cmake/onnxruntime_common.cmake b/cmake/onnxruntime_common.cmake index 896379d743441..b419e44083624 100644 --- a/cmake/onnxruntime_common.cmake +++ b/cmake/onnxruntime_common.cmake @@ -218,7 +218,7 @@ endif() if (NOT onnxruntime_BUILD_SHARED_LIB) install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/common DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core) - install(TARGETS onnxruntime_common + install(TARGETS onnxruntime_common EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_flatbuffers.cmake b/cmake/onnxruntime_flatbuffers.cmake index 3ab4c19122ba1..066fb561de57d 100644 --- a/cmake/onnxruntime_flatbuffers.cmake +++ b/cmake/onnxruntime_flatbuffers.cmake @@ -22,10 +22,9 @@ if (FLATBUFFERS_BUILD_FLATC) add_dependencies(onnxruntime_flatbuffers flatc) endif() if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_flatbuffers + install(TARGETS onnxruntime_flatbuffers EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() - diff --git a/cmake/onnxruntime_framework.cmake b/cmake/onnxruntime_framework.cmake index 9f8d807fad8f4..94450c6c61d13 100644 --- a/cmake/onnxruntime_framework.cmake +++ b/cmake/onnxruntime_framework.cmake @@ -69,9 +69,9 @@ endif() if(onnxruntime_USE_TENSORRT OR onnxruntime_USE_NCCL) # TODO: for now, core framework depends on CUDA. It should be moved to TensorRT EP # TODO: provider_bridge_ort.cc should not include nccl.h -target_include_directories(onnxruntime_framework PRIVATE ${ONNXRUNTIME_ROOT} ${eigen_INCLUDE_DIRS} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) +target_include_directories(onnxruntime_framework PRIVATE ${ONNXRUNTIME_ROOT} ${eigen_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} PUBLIC ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) else() -target_include_directories(onnxruntime_framework PRIVATE ${ONNXRUNTIME_ROOT} ${eigen_INCLUDE_DIRS} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +target_include_directories(onnxruntime_framework PRIVATE ${ONNXRUNTIME_ROOT} ${eigen_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) endif() # Needed for the provider interface, as it includes training headers when training is enabled if (onnxruntime_ENABLE_TRAINING_OPS) @@ -127,7 +127,7 @@ if (onnxruntime_BUILD_SHARED_LIB) install(FILES ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/framework/provider_options.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/) else() install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/framework DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core) - install(TARGETS onnxruntime_framework + install(TARGETS onnxruntime_framework EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_graph.cmake b/cmake/onnxruntime_graph.cmake index 4d51325b8414e..fba1a680bb62a 100644 --- a/cmake/onnxruntime_graph.cmake +++ b/cmake/onnxruntime_graph.cmake @@ -157,7 +157,7 @@ endif() if (NOT onnxruntime_BUILD_SHARED_LIB) install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/graph DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core) - install(TARGETS onnxruntime_graph + install(TARGETS onnxruntime_graph EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_lora.cmake b/cmake/onnxruntime_lora.cmake index 7ba48454d997e..26ee21c645584 100644 --- a/cmake/onnxruntime_lora.cmake +++ b/cmake/onnxruntime_lora.cmake @@ -22,7 +22,7 @@ add_dependencies(onnxruntime_lora ${onnxruntime_EXTERNAL_DEPENDENCIES}) set_target_properties(onnxruntime_lora PROPERTIES FOLDER "ONNXRuntime") if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_lora + install(TARGETS onnxruntime_lora EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_mlas.cmake b/cmake/onnxruntime_mlas.cmake index 20bb1fb772189..26917c5b11f36 100644 --- a/cmake/onnxruntime_mlas.cmake +++ b/cmake/onnxruntime_mlas.cmake @@ -702,7 +702,7 @@ if (PLATFORM_NAME STREQUAL "macabi") endif() if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_mlas + install(TARGETS onnxruntime_mlas EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_optimizer.cmake b/cmake/onnxruntime_optimizer.cmake index 3bae1b8a48e0f..8764a8a369c47 100644 --- a/cmake/onnxruntime_optimizer.cmake +++ b/cmake/onnxruntime_optimizer.cmake @@ -127,7 +127,7 @@ set_target_properties(onnxruntime_optimizer PROPERTIES FOLDER "ONNXRuntime") if (NOT onnxruntime_BUILD_SHARED_LIB) install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/optimizer DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core) - install(TARGETS onnxruntime_optimizer + install(TARGETS onnxruntime_optimizer EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_providers_acl.cmake b/cmake/onnxruntime_providers_acl.cmake index e23d2892713fc..7670e032a5417 100644 --- a/cmake/onnxruntime_providers_acl.cmake +++ b/cmake/onnxruntime_providers_acl.cmake @@ -26,9 +26,9 @@ set_target_properties(onnxruntime_providers_acl PROPERTIES LINKER_LANGUAGE CXX) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_acl + install(TARGETS onnxruntime_providers_acl EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() \ No newline at end of file + endif() diff --git a/cmake/onnxruntime_providers_armnn.cmake b/cmake/onnxruntime_providers_armnn.cmake index 33fadb7c64c2e..c7f6e7bad3e7f 100644 --- a/cmake/onnxruntime_providers_armnn.cmake +++ b/cmake/onnxruntime_providers_armnn.cmake @@ -25,9 +25,9 @@ set_target_properties(onnxruntime_providers_armnn PROPERTIES LINKER_LANGUAGE CXX) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_armnn + install(TARGETS onnxruntime_providers_armnn EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() \ No newline at end of file + endif() diff --git a/cmake/onnxruntime_providers_coreml.cmake b/cmake/onnxruntime_providers_coreml.cmake index 0aa25a221bf27..72785c61af639 100644 --- a/cmake/onnxruntime_providers_coreml.cmake +++ b/cmake/onnxruntime_providers_coreml.cmake @@ -214,7 +214,7 @@ target_include_directories(onnxruntime_providers_coreml PRIVATE ${ONNXRUNTIME_RO set_target_properties(onnxruntime_providers_coreml PROPERTIES LINKER_LANGUAGE CXX) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_coreml + install(TARGETS onnxruntime_providers_coreml EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_providers_cpu.cmake b/cmake/onnxruntime_providers_cpu.cmake index 91a2b13002ec9..e712748ca3aae 100644 --- a/cmake/onnxruntime_providers_cpu.cmake +++ b/cmake/onnxruntime_providers_cpu.cmake @@ -256,7 +256,7 @@ if (NOT onnxruntime_MINIMAL_BUILD AND NOT onnxruntime_EXTENDED_MINIMAL_BUILD endif() if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers + install(TARGETS onnxruntime_providers EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_providers_dml.cmake b/cmake/onnxruntime_providers_dml.cmake index 439be882dcc5e..9e96e14b7c4c9 100644 --- a/cmake/onnxruntime_providers_dml.cmake +++ b/cmake/onnxruntime_providers_dml.cmake @@ -83,7 +83,7 @@ set_target_properties(onnxruntime_providers_dml PROPERTIES FOLDER "ONNXRuntime") if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_dml + install(TARGETS onnxruntime_providers_dml EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_providers_nnapi.cmake b/cmake/onnxruntime_providers_nnapi.cmake index b718a976eb26f..06364ebd49593 100644 --- a/cmake/onnxruntime_providers_nnapi.cmake +++ b/cmake/onnxruntime_providers_nnapi.cmake @@ -74,7 +74,7 @@ endif() if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_nnapi + install(TARGETS onnxruntime_providers_nnapi EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_providers_qnn.cmake b/cmake/onnxruntime_providers_qnn.cmake index b68d84c23bb32..f0116c130a5b2 100644 --- a/cmake/onnxruntime_providers_qnn.cmake +++ b/cmake/onnxruntime_providers_qnn.cmake @@ -41,3 +41,11 @@ if(NOT MSVC) target_compile_options(onnxruntime_providers_qnn PRIVATE "-Wno-unknown-pragmas") endif() + +if (NOT onnxruntime_BUILD_SHARED_LIB) + install(TARGETS onnxruntime_providers_qnn EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/cmake/onnxruntime_providers_rknpu.cmake b/cmake/onnxruntime_providers_rknpu.cmake index 408bcfde06c36..831df84aa6e08 100644 --- a/cmake/onnxruntime_providers_rknpu.cmake +++ b/cmake/onnxruntime_providers_rknpu.cmake @@ -36,9 +36,9 @@ set_target_properties(onnxruntime_providers_rknpu PROPERTIES LINKER_LANGUAGE CXX) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_rknpu + install(TARGETS onnxruntime_providers_rknpu EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() \ No newline at end of file + endif() diff --git a/cmake/onnxruntime_providers_tvm.cmake b/cmake/onnxruntime_providers_tvm.cmake index 8fd50c70dd5d7..7f2304ce57bcc 100644 --- a/cmake/onnxruntime_providers_tvm.cmake +++ b/cmake/onnxruntime_providers_tvm.cmake @@ -56,9 +56,9 @@ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_tvm + install(TARGETS onnxruntime_providers_tvm EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() \ No newline at end of file + endif() diff --git a/cmake/onnxruntime_providers_webnn.cmake b/cmake/onnxruntime_providers_webnn.cmake index 05c63c22244db..da5720a9f7cb5 100644 --- a/cmake/onnxruntime_providers_webnn.cmake +++ b/cmake/onnxruntime_providers_webnn.cmake @@ -22,4 +22,12 @@ add_dependencies(onnxruntime_providers_webnn onnx ${onnxruntime_EXTERNAL_DEPENDENCIES}) set_target_properties(onnxruntime_providers_webnn PROPERTIES FOLDER "ONNXRuntime") - set_target_properties(onnxruntime_providers_webnn PROPERTIES LINKER_LANGUAGE CXX) \ No newline at end of file + set_target_properties(onnxruntime_providers_webnn PROPERTIES LINKER_LANGUAGE CXX) + +if (NOT onnxruntime_BUILD_SHARED_LIB) + install(TARGETS onnxruntime_providers_webnn EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/cmake/onnxruntime_providers_xnnpack.cmake b/cmake/onnxruntime_providers_xnnpack.cmake index 796536ac9d12b..1fbe553fa58a0 100644 --- a/cmake/onnxruntime_providers_xnnpack.cmake +++ b/cmake/onnxruntime_providers_xnnpack.cmake @@ -28,7 +28,7 @@ set_target_properties(onnxruntime_providers_xnnpack PROPERTIES LINKER_LANGUAGE CXX) if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_providers_xnnpack + install(TARGETS onnxruntime_providers_xnnpack EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_session.cmake b/cmake/onnxruntime_session.cmake index 47cf2dfc5e7aa..a3595daa13272 100644 --- a/cmake/onnxruntime_session.cmake +++ b/cmake/onnxruntime_session.cmake @@ -62,7 +62,7 @@ endif() if (NOT onnxruntime_BUILD_SHARED_LIB) install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/session DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core) - install(TARGETS onnxruntime_session + install(TARGETS onnxruntime_session EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/onnxruntime_util.cmake b/cmake/onnxruntime_util.cmake index ae7e842f223d6..c3234f6bb4173 100644 --- a/cmake/onnxruntime_util.cmake +++ b/cmake/onnxruntime_util.cmake @@ -9,7 +9,8 @@ file(GLOB_RECURSE onnxruntime_util_srcs CONFIGURE_DEPENDS source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_util_srcs}) onnxruntime_add_static_library(onnxruntime_util ${onnxruntime_util_srcs}) -target_include_directories(onnxruntime_util PRIVATE ${ONNXRUNTIME_ROOT} PUBLIC ${eigen_INCLUDE_DIRS}) +target_link_libraries(onnxruntime_util PUBLIC Eigen3::Eigen) +target_include_directories(onnxruntime_util PRIVATE ${ONNXRUNTIME_ROOT}) onnxruntime_add_include_to_target(onnxruntime_util onnxruntime_common onnx onnx_proto ${PROTOBUF_LIB} Boost::mp11) if(UNIX) target_compile_options(onnxruntime_util PUBLIC "-Wno-error=comment") @@ -22,7 +23,7 @@ if (WIN32) endif() if (NOT onnxruntime_BUILD_SHARED_LIB) - install(TARGETS onnxruntime_util + install(TARGETS onnxruntime_util EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/cmake/patches/protobuf/protobuf_android_log.patch b/cmake/patches/protobuf/protobuf_android_log.patch new file mode 100644 index 0000000000000..56bca9d325a75 --- /dev/null +++ b/cmake/patches/protobuf/protobuf_android_log.patch @@ -0,0 +1,26 @@ +diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake +index 83e970312..96908991f 100644 +--- a/cmake/libprotobuf-lite.cmake ++++ b/cmake/libprotobuf-lite.cmake +@@ -102,7 +102,7 @@ if(protobuf_LINK_LIBATOMIC) + target_link_libraries(libprotobuf-lite PRIVATE atomic) + endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "Android") +- target_link_libraries(libprotobuf-lite PRIVATE log) ++ target_link_libraries(libprotobuf-lite PRIVATE -llog) + endif() + target_include_directories(libprotobuf-lite PUBLIC ${protobuf_SOURCE_DIR}/src) + if(protobuf_BUILD_SHARED_LIBS) +diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake +index 07e4bcf57..0cf27caff 100644 +--- a/cmake/libprotobuf.cmake ++++ b/cmake/libprotobuf.cmake +@@ -118,7 +118,7 @@ if(protobuf_LINK_LIBATOMIC) + target_link_libraries(libprotobuf PRIVATE atomic) + endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "Android") +- target_link_libraries(libprotobuf PRIVATE log) ++ target_link_libraries(libprotobuf PRIVATE -llog) + endif() + target_include_directories(libprotobuf PUBLIC ${protobuf_SOURCE_DIR}/src) + if(protobuf_BUILD_SHARED_LIBS) diff --git a/cmake/tensorboard/compat/proto/CMakeLists.txt b/cmake/tensorboard/compat/proto/CMakeLists.txt index ad31e4062a8a4..addc3779e9521 100644 --- a/cmake/tensorboard/compat/proto/CMakeLists.txt +++ b/cmake/tensorboard/compat/proto/CMakeLists.txt @@ -23,3 +23,10 @@ add_dependencies(tensorboard ${onnxruntime_EXTERNAL_DEPENDENCIES}) if(WIN32) target_compile_options(tensorboard PRIVATE "/wd4100" "/wd4125" "/wd4127" "/wd4267" "/wd4456" "/wd4800" "/wd6011" "/wd6387" "/wd28182") endif() + +if (NOT onnxruntime_BUILD_SHARED_LIB) + install(TARGETS tensorboard EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif()