From 6125d9e0638ec968521b43b72f4cf31659e96803 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Tue, 18 Jul 2023 15:44:54 +0800 Subject: [PATCH] Refactor onnxruntime.cmake (#220) --- cmake/.gitignore | 1 + cmake/kaldi-native-fbank.cmake | 4 + cmake/onnxruntime-darwin-arm64.cmake | 70 ++++++ cmake/onnxruntime-darwin-universal.cmake | 67 ++++++ cmake/onnxruntime-darwin-x86_64.cmake | 70 ++++++ cmake/onnxruntime-linux-aarch64.cmake | 69 ++++++ cmake/onnxruntime-linux-arm.cmake | 69 ++++++ cmake/onnxruntime-linux-x86_64-gpu.cmake | 88 ++++++++ cmake/onnxruntime-linux-x86_64.cmake | 69 ++++++ cmake/onnxruntime-win-x64-gpu.cmake | 111 ++++++++++ cmake/onnxruntime-win-x64-static.cmake | 67 ++++++ cmake/onnxruntime-win-x64.cmake | 91 ++++++++ cmake/onnxruntime-win-x86-static.cmake | 67 ++++++ cmake/onnxruntime-win-x86.cmake | 91 ++++++++ cmake/onnxruntime.cmake | 269 ++--------------------- sherpa-onnx/c-api/c-api.h | 2 +- sherpa-onnx/csrc/CMakeLists.txt | 4 + 17 files changed, 961 insertions(+), 248 deletions(-) create mode 100644 cmake/.gitignore create mode 100644 cmake/onnxruntime-darwin-arm64.cmake create mode 100644 cmake/onnxruntime-darwin-universal.cmake create mode 100644 cmake/onnxruntime-darwin-x86_64.cmake create mode 100644 cmake/onnxruntime-linux-aarch64.cmake create mode 100644 cmake/onnxruntime-linux-arm.cmake create mode 100644 cmake/onnxruntime-linux-x86_64-gpu.cmake create mode 100644 cmake/onnxruntime-linux-x86_64.cmake create mode 100644 cmake/onnxruntime-win-x64-gpu.cmake create mode 100644 cmake/onnxruntime-win-x64-static.cmake create mode 100644 cmake/onnxruntime-win-x64.cmake create mode 100644 cmake/onnxruntime-win-x86-static.cmake create mode 100644 cmake/onnxruntime-win-x86.cmake diff --git a/cmake/.gitignore b/cmake/.gitignore new file mode 100644 index 00000000..4d7a2315 --- /dev/null +++ b/cmake/.gitignore @@ -0,0 +1 @@ +!*.cmake diff --git a/cmake/kaldi-native-fbank.cmake b/cmake/kaldi-native-fbank.cmake index 40c25e75..91c55466 100644 --- a/cmake/kaldi-native-fbank.cmake +++ b/cmake/kaldi-native-fbank.cmake @@ -55,6 +55,10 @@ function(download_kaldi_native_fbank) else() install(TARGETS kaldi-native-fbank-core DESTINATION lib) endif() + + if(WIN32 AND BUILD_SHARED_LIBS) + install(TARGETS kaldi-native-fbank-core DESTINATION bin) + endif() endfunction() download_kaldi_native_fbank() diff --git a/cmake/onnxruntime-darwin-arm64.cmake b/cmake/onnxruntime-darwin-arm64.cmake new file mode 100644 index 00000000..b89ad2ba --- /dev/null +++ b/cmake/onnxruntime-darwin-arm64.cmake @@ -0,0 +1,70 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_OSX_ARCHITECTURES: ${CMAKE_OSX_ARCHITECTURES}") +message(STATUS "CMAKE_APPLE_SILICON_PROCESSOR : ${CMAKE_APPLE_SILICON_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + message(FATAL_ERROR "This file is for macOS only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) + message(FATAL_ERROR "This file is for arm64 only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-osx-arm64-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-osx-arm64-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=df97832fc7907c6677a6da437f92339d84a462becb74b1d65217fcb859ee9460") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-osx-arm64-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-osx-arm64-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-osx-arm64-1.15.1.tgz + /tmp/onnxruntime-osx-arm64-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*dylib") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-darwin-universal.cmake b/cmake/onnxruntime-darwin-universal.cmake new file mode 100644 index 00000000..c3cfb680 --- /dev/null +++ b/cmake/onnxruntime-darwin-universal.cmake @@ -0,0 +1,67 @@ +# Possible values for CMAKE_SYSTEM_NAME: Linux, Windows, Darwin + +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_OSX_ARCHITECTURES: ${CMAKE_OSX_ARCHITECTURES}") +message(STATUS "CMAKE_APPLE_SILICON_PROCESSOR : ${CMAKE_APPLE_SILICON_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + message(FATAL_ERROR "This file is for macOS only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-osx-universal2-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-osx-universal2-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=ecb7651c216fe6ffaf4c578e135d98341bc5bc944c5dc6b725ef85b0d7747be0") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-osx-universal2-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-osx-universal2-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-osx-universal2-1.15.1.tgz + /tmp/onnxruntime-osx-universal2-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*dylib") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-darwin-x86_64.cmake b/cmake/onnxruntime-darwin-x86_64.cmake new file mode 100644 index 00000000..c3663977 --- /dev/null +++ b/cmake/onnxruntime-darwin-x86_64.cmake @@ -0,0 +1,70 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_OSX_ARCHITECTURES: ${CMAKE_OSX_ARCHITECTURES}") +message(STATUS "CMAKE_APPLE_SILICON_PROCESSOR : ${CMAKE_APPLE_SILICON_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + message(FATAL_ERROR "This file is for macOS only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + message(FATAL_ERROR "This file is for x86_64 only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-osx-x86_64-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-osx-x86_64-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=4b66ebbca24b8b96f6b74655fee3610a7e529b4e01f6790632f24ee82b778e5a") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-osx-x86_64-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-osx-x86_64-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-osx-x86_64-1.15.1.tgz + /tmp/onnxruntime-osx-x86_64-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*dylib") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-linux-aarch64.cmake b/cmake/onnxruntime-linux-aarch64.cmake new file mode 100644 index 00000000..5911af45 --- /dev/null +++ b/cmake/onnxruntime-linux-aarch64.cmake @@ -0,0 +1,69 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux) + message(FATAL_ERROR "This file is for Linux only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) + message(FATAL_ERROR "This file is for aarch64 only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-aarch64-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-aarch64-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=85272e75d8dd841138de4b774a9672ea93c1be108d96038c6c34a62d7f976aee") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-linux-aarch64-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-linux-aarch64-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-linux-aarch64-1.15.1.tgz + /tmp/onnxruntime-linux-aarch64-1.15.1.tgz + /star-fj/fangjun/download/github/onnxruntime-linux-aarch64-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-linux-arm.cmake b/cmake/onnxruntime-linux-arm.cmake new file mode 100644 index 00000000..81d903d9 --- /dev/null +++ b/cmake/onnxruntime-linux-arm.cmake @@ -0,0 +1,69 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux) + message(FATAL_ERROR "This file is for Linux only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL arm) + message(FATAL_ERROR "This file is for arm only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-linux-arm-1.15.1.zip") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-arm-1.15.1.zip") +set(onnxruntime_HASH "SHA256=867b96210a347e4b1bb949e7c9a3f222371ea0c00c9deaaba9fdd66c689f7fb7") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-linux-arm-1.15.1.zip + ${PROJECT_SOURCE_DIR}/onnxruntime-linux-arm-1.15.1.zip + ${PROJECT_BINARY_DIR}/onnxruntime-linux-arm-1.15.1.zip + /tmp/onnxruntime-linux-arm-1.15.1.zip + /star-fj/fangjun/download/github/onnxruntime-linux-arm-1.15.1.zip +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-linux-x86_64-gpu.cmake b/cmake/onnxruntime-linux-x86_64-gpu.cmake new file mode 100644 index 00000000..df6d79cf --- /dev/null +++ b/cmake/onnxruntime-linux-x86_64-gpu.cmake @@ -0,0 +1,88 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux) + message(FATAL_ERROR "This file is for Linux only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + message(FATAL_ERROR "This file is for x86_64 only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +if(NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building shared libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +if(NOT SHERPA_ONNX_ENABLE_GPU) + message(FATAL_ERROR "This file is for NVIDIA GPU only. Given SHERPA_ONNX_ENABLE_GPU: ${SHERPA_ONNX_ENABLE_GPU}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-x64-gpu-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-x64-gpu-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=eab891393025edd5818d1aa26a42860e5739fcc49e3ca3f876110ec8736fe7f1") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-linux-x64-gpu-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-linux-x64-gpu-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-linux-x64-gpu-1.15.1.tgz + /tmp/onnxruntime-linux-x64-gpu-1.15.1.tgz + /star-fj/fangjun/download/github/onnxruntime-linux-x64-gpu-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +find_library(location_onnxruntime_cuda_lib onnxruntime_providers_cuda + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +add_library(onnxruntime_providers_cuda SHARED IMPORTED) +set_target_properties(onnxruntime_providers_cuda PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime_cuda_lib} +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-linux-x86_64.cmake b/cmake/onnxruntime-linux-x86_64.cmake new file mode 100644 index 00000000..47dac2af --- /dev/null +++ b/cmake/onnxruntime-linux-x86_64.cmake @@ -0,0 +1,69 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux) + message(FATAL_ERROR "This file is for Linux only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + message(FATAL_ERROR "This file is for x86_64 only. Given: ${CMAKE_SYSTEM_PROCESSOR}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-x64-1.15.1.tgz") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-x64-1.15.1.tgz") +set(onnxruntime_HASH "SHA256=5492f9065f87538a286fb04c8542e9ff7950abb2ea6f8c24993a940006787d87") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-linux-x64-1.15.1.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-linux-x64-1.15.1.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-linux-x64-1.15.1.tgz + /tmp/onnxruntime-linux-x64-1.15.1.tgz + /star-fj/fangjun/download/github/onnxruntime-linux-x64-1.15.1.tgz +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime*") +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +install(FILES ${onnxruntime_lib_files} DESTINATION lib) diff --git a/cmake/onnxruntime-win-x64-gpu.cmake b/cmake/onnxruntime-win-x64-gpu.cmake new file mode 100644 index 00000000..3155db64 --- /dev/null +++ b/cmake/onnxruntime-win-x64-gpu.cmake @@ -0,0 +1,111 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + message(FATAL_ERROR "This file is for Windows only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL X64 OR CMAKE_VS_PLATFORM_NAME STREQUAL x64)) + message(FATAL_ERROR "This file is for Windows x64 only. Given: ${CMAKE_VS_PLATFORM_NAME}") +endif() + +if(NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building shared libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +if(NOT SHERPA_ONNX_ENABLE_GPU) + message(FATAL_ERROR "This file is for NVIDIA GPU only. Given SHERPA_ONNX_ENABLE_GPU: ${SHERPA_ONNX_ENABLE_GPU}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x64-gpu-1.15.1.zip") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-gpu-1.15.1.zip") +set(onnxruntime_HASH "SHA256=dcc3a385b415dd2e4a813018b71da5085d9b97774552edf17947826a255a3732") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x64-gpu-1.15.1.zip + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-gpu-1.15.1.zip + ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-gpu-1.15.1.zip + /tmp/onnxruntime-win-x64-gpu-1.15.1.zip +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +set_property(TARGET onnxruntime + PROPERTY + IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime.lib" +) + +file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime.dll + DESTINATION + ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} +) + +add_library(onnxruntime_providers_cuda SHARED IMPORTED) +set_target_properties(onnxruntime_providers_cuda PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +set_property(TARGET onnxruntime_providers_cuda + PROPERTY + IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime_providers_cuda.lib" +) + +file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime_providers_cuda.dll + DESTINATION + ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") + +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") + +if(SHERPA_ONNX_ENABLE_PYTHON) + install(FILES ${onnxruntime_lib_files} DESTINATION ..) +else() + install(FILES ${onnxruntime_lib_files} DESTINATION lib) +endif() + +install(FILES ${onnxruntime_lib_files} DESTINATION bin) diff --git a/cmake/onnxruntime-win-x64-static.cmake b/cmake/onnxruntime-win-x64-static.cmake new file mode 100644 index 00000000..1943a2a0 --- /dev/null +++ b/cmake/onnxruntime-win-x64-static.cmake @@ -0,0 +1,67 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + message(FATAL_ERROR "This file is for Windows only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL X64 OR CMAKE_VS_PLATFORM_NAME STREQUAL x64)) + message(FATAL_ERROR "This file is for Windows x64 only. Given: ${CMAKE_VS_PLATFORM_NAME}") +endif() + +if(BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building static libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x64-static-1.15.1.tar.bz2") +set(onnxruntime_URL2 "") +set(onnxruntime_HASH "SHA256=c809a8510a89b8b37ae7d563c39229db22bac8fbefcbfe5c81a60b367d065b1b") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x64-static-1.15.1.tar.bz2 + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-static-1.15.1.tar.bz2 + ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-static-1.15.1.tar.bz2 + /tmp/onnxruntime-win-x64-static-1.15.1.tar.bz2 +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +# for static libraries, we use onnxruntime_lib_files directly below +include_directories(${onnxruntime_SOURCE_DIR}/include) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.lib") +set(onnxruntime_lib_files ${onnxruntime_lib_files} PARENT_SCOPE) + +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +if(SHERPA_ONNX_ENABLE_PYTHON) + install(FILES ${onnxruntime_lib_files} DESTINATION ..) +else() + install(FILES ${onnxruntime_lib_files} DESTINATION lib) +endif() diff --git a/cmake/onnxruntime-win-x64.cmake b/cmake/onnxruntime-win-x64.cmake new file mode 100644 index 00000000..e31d4f79 --- /dev/null +++ b/cmake/onnxruntime-win-x64.cmake @@ -0,0 +1,91 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + message(FATAL_ERROR "This file is for Windows only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL X64 OR CMAKE_VS_PLATFORM_NAME STREQUAL x64)) + message(FATAL_ERROR "This file is for Windows x64 only. Given: ${CMAKE_VS_PLATFORM_NAME}") +endif() + +if(NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building shared libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x64-1.15.1.zip") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-1.15.1.zip") +set(onnxruntime_HASH "SHA256=261308ee5526dfd3f405ce8863e43d624a2e0bcd16b2d33cdea8c120ab3534d3") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x64-1.15.1.zip + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-1.15.1.zip + ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-1.15.1.zip + /tmp/onnxruntime-win-x64-1.15.1.zip +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +set_property(TARGET onnxruntime + PROPERTY + IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime.lib" +) + +file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime.dll + DESTINATION + ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") + +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") + +if(SHERPA_ONNX_ENABLE_PYTHON) + install(FILES ${onnxruntime_lib_files} DESTINATION ..) +else() + install(FILES ${onnxruntime_lib_files} DESTINATION lib) +endif() + +install(FILES ${onnxruntime_lib_files} DESTINATION bin) diff --git a/cmake/onnxruntime-win-x86-static.cmake b/cmake/onnxruntime-win-x86-static.cmake new file mode 100644 index 00000000..c8ff5b43 --- /dev/null +++ b/cmake/onnxruntime-win-x86-static.cmake @@ -0,0 +1,67 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + message(FATAL_ERROR "This file is for Windows only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL Win32 OR CMAKE_VS_PLATFORM_NAME STREQUAL win32)) + message(FATAL_ERROR "This file is for Windows x86 only. Given: ${CMAKE_VS_PLATFORM_NAME}") +endif() + +if(BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building static libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x86-static-1.15.1.tar.bz2") +set(onnxruntime_URL2 "") +set(onnxruntime_HASH "SHA256=94d9a30976b5c4a5dff7508d00f141835916e5a36315d5f53be9b3edb85148b5") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x86-static-1.15.1.tar.bz2 + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x86-static-1.15.1.tar.bz2 + ${PROJECT_BINARY_DIR}/onnxruntime-win-x86-static-1.15.1.tar.bz2 + /tmp/onnxruntime-win-x86-static-1.15.1.tar.bz2 +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +# for static libraries, we use onnxruntime_lib_files directly below +include_directories(${onnxruntime_SOURCE_DIR}/include) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.lib") +set(onnxruntime_lib_files ${onnxruntime_lib_files} PARENT_SCOPE) + +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") +if(SHERPA_ONNX_ENABLE_PYTHON) + install(FILES ${onnxruntime_lib_files} DESTINATION ..) +else() + install(FILES ${onnxruntime_lib_files} DESTINATION lib) +endif() diff --git a/cmake/onnxruntime-win-x86.cmake b/cmake/onnxruntime-win-x86.cmake new file mode 100644 index 00000000..e10d1907 --- /dev/null +++ b/cmake/onnxruntime-win-x86.cmake @@ -0,0 +1,91 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation +message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") + +if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) + message(FATAL_ERROR "This file is for Windows only. Given: ${CMAKE_SYSTEM_NAME}") +endif() + +if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL Win32 OR CMAKE_VS_PLATFORM_NAME STREQUAL win32)) + message(FATAL_ERROR "This file is for Windows x86 only. Given: ${CMAKE_VS_PLATFORM_NAME}") +endif() + +if(NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "This file is for building shared libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") +endif() + +set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x86-1.15.1.zip") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x86-1.15.1.zip") +set(onnxruntime_HASH "SHA256=8de18fdf274a8adcd95272fcf58beda0fe2fb37f0cd62c02bc4bb6200429e4e2") + +# If you don't have access to the Internet, +# please download onnxruntime to one of the following locations. +# You can add more if you want. +set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x86-1.15.1.zip + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x86-1.15.1.zip + ${PROJECT_BINARY_DIR}/onnxruntime-win-x86-1.15.1.zip + /tmp/onnxruntime-win-x86-1.15.1.zip +) + +foreach(f IN LISTS possible_file_locations) + if(EXISTS ${f}) + set(onnxruntime_URL "${f}") + file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) + message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") + set(onnxruntime_URL2) + break() + endif() +endforeach() + +FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} +) + +FetchContent_GetProperties(onnxruntime) +if(NOT onnxruntime_POPULATED) + message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") + FetchContent_Populate(onnxruntime) +endif() +message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") + +find_library(location_onnxruntime onnxruntime + PATHS + "${onnxruntime_SOURCE_DIR}/lib" + NO_CMAKE_SYSTEM_PATH +) + +message(STATUS "location_onnxruntime: ${location_onnxruntime}") + +add_library(onnxruntime SHARED IMPORTED) + +set_target_properties(onnxruntime PROPERTIES + IMPORTED_LOCATION ${location_onnxruntime} + INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" +) + +set_property(TARGET onnxruntime + PROPERTY + IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime.lib" +) + +file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime.dll + DESTINATION + ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} +) + +file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") + +message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") + +if(SHERPA_ONNX_ENABLE_PYTHON) + install(FILES ${onnxruntime_lib_files} DESTINATION ..) +else() + install(FILES ${onnxruntime_lib_files} DESTINATION lib) +endif() + +install(FILES ${onnxruntime_lib_files} DESTINATION bin) diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index 033d2ceb..abd35887 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -1,3 +1,4 @@ +# Copyright (c) 2022-2023 Xiaomi Corporation function(download_onnxruntime) include(FetchContent) @@ -5,115 +6,33 @@ function(download_onnxruntime) message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") if(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) - # For embedded systems - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-linux-aarch64-1.15.1.tgz - ${PROJECT_SOURCE_DIR}/onnxruntime-linux-aarch64-1.15.1.tgz - ${PROJECT_BINARY_DIR}/onnxruntime-linux-aarch64-1.15.1.tgz - /tmp/onnxruntime-linux-aarch64-1.15.1.tgz - /star-fj/fangjun/download/github/onnxruntime-linux-aarch64-1.15.1.tgz - ) - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-aarch64-1.15.1.tgz") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-aarch64-1.15.1.tgz") - set(onnxruntime_HASH "SHA256=85272e75d8dd841138de4b774a9672ea93c1be108d96038c6c34a62d7f976aee") + include(onnxruntime-linux-aarch64) elseif(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL arm) - # For embedded systems - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-linux-arm-1.15.1.zip - ${PROJECT_SOURCE_DIR}/onnxruntime-linux-arm-1.15.1.zip - ${PROJECT_BINARY_DIR}/onnxruntime-linux-arm-1.15.1.zip - /tmp/onnxruntime-linux-arm-1.15.1.zip - /star-fj/fangjun/download/github/onnxruntime-linux-arm-1.15.1.zip - ) - set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-linux-arm-1.15.1.zip") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-arm-1.15.1.zip") - set(onnxruntime_HASH "SHA256=867b96210a347e4b1bb949e7c9a3f222371ea0c00c9deaaba9fdd66c689f7fb7") + include(onnxruntime-linux-arm) elseif(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) - # If you don't have access to the Internet, - # please pre-download onnxruntime - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-linux-x64-1.15.1.tgz - ${PROJECT_SOURCE_DIR}/onnxruntime-linux-x64-1.15.1.tgz - ${PROJECT_BINARY_DIR}/onnxruntime-linux-x64-1.15.1.tgz - /tmp/onnxruntime-linux-x64-1.15.1.tgz - /star-fj/fangjun/download/github/onnxruntime-linux-x64-1.15.1.tgz - ) - - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-x64-1.15.1.tgz") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-x64-1.15.1.tgz") - set(onnxruntime_HASH "SHA256=5492f9065f87538a286fb04c8542e9ff7950abb2ea6f8c24993a940006787d87") - # After downloading, it contains: - # ./lib/libonnxruntime.so.1.15.1 - # ./lib/libonnxruntime.so, which is a symlink to lib/libonnxruntime.so.1.15.1 - # - # ./include - # It contains all the needed header files if(SHERPA_ONNX_ENABLE_GPU) - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-linux-x64-gpu-1.15.1.tgz") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-x64-gpu-1.15.1.tgz") - set(onnxruntime_HASH "SHA256=eab891393025edd5818d1aa26a42860e5739fcc49e3ca3f876110ec8736fe7f1") - - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-linux-x64-gpu-1.15.1.tgz - ${PROJECT_SOURCE_DIR}/onnxruntime-linux-x64-gpu-1.15.1.tgz - ${PROJECT_BINARY_DIR}/onnxruntime-linux-x64-gpu-1.15.1.tgz - /tmp/onnxruntime-linux-x64-gpu-1.15.1.tgz - /star-fj/fangjun/download/github/onnxruntime-linux-x64-gpu-1.15.1.tgz - ) + include(onnxruntime-linux-x86_64-gpu) + else() + include(onnxruntime-linux-x86_64) + endif() + elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin) + if (arm64 IN_LIST CMAKE_OSX_ARCHITECTURES OR x86_64 IN_LIST CMAKE_OSX_ARCHITECTURES) + include(onnxruntime-darwin-universal) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) + include(onnxruntime-darwin-x86_64) + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) + include(onnxruntime-darwin-arm64) + else() + message(FATAL_ERROR "Unsupport processor {CMAKE_SYSTEM_PROCESSOR} for Darwin") endif() - # After downloading, it contains: - # ./lib/libonnxruntime.so.1.15.1 - # ./lib/libonnxruntime.so, which is a symlink to lib/libonnxruntime.so.1.15.1 - # ./lib/libonnxruntime_providers_cuda.so - # ./include, which contains all the needed header files - elseif(APPLE) - # If you don't have access to the Internet, - # please pre-download onnxruntime - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-osx-universal2-1.15.1.tgz - ${PROJECT_SOURCE_DIR}/onnxruntime-osx-universal2-1.15.1.tgz - ${PROJECT_BINARY_DIR}/onnxruntime-osx-universal2-1.15.1.tgz - /tmp/onnxruntime-osx-universal2-1.15.1.tgz - ) - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-osx-universal2-1.15.1.tgz") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-osx-universal2-1.15.1.tgz") - set(onnxruntime_HASH "SHA256=ecb7651c216fe6ffaf4c578e135d98341bc5bc944c5dc6b725ef85b0d7747be0") - # After downloading, it contains: - # ./lib/libonnxruntime.1.15.1.dylib - # ./lib/libonnxruntime.dylib, which is a symlink to lib/libonnxruntime.1.15.1.dylib - # - # ./include - # It contains all the needed header files elseif(WIN32) message(STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}") if(CMAKE_VS_PLATFORM_NAME STREQUAL Win32 OR CMAKE_VS_PLATFORM_NAME STREQUAL win32) if(BUILD_SHARED_LIBS) - # If you don't have access to the Internet, - # please pre-download onnxruntime - # - # for 32-bit windows - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-win-x86-1.15.1.zip - ${PROJECT_SOURCE_DIR}/onnxruntime-win-x86-1.15.1.zip - ${PROJECT_BINARY_DIR}/onnxruntime-win-x86-1.15.1.zip - /tmp/onnxruntime-win-x86-1.15.1.zip - ) - - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x86-1.15.1.zip") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x86-1.15.1.zip") - set(onnxruntime_HASH "SHA256=8de18fdf274a8adcd95272fcf58beda0fe2fb37f0cd62c02bc4bb6200429e4e2") + include(onnxruntime-win-x86) else() - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-win-x86-static-1.15.1.tar.bz2 - ${PROJECT_SOURCE_DIR}/onnxruntime-win-x86-static-1.15.1.tar.bz2 - ${PROJECT_BINARY_DIR}/onnxruntime-win-x86-static-1.15.1.tar.bz2 - /tmp/onnxruntime-win-x86-static-1.15.1.tar.bz2 - ) - - set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x86-static-1.15.1.tar.bz2") - set(onnxruntime_URL2 "") - set(onnxruntime_HASH "SHA256=94d9a30976b5c4a5dff7508d00f141835916e5a36315d5f53be9b3edb85148b5") + include(onnxruntime-win-x86-static) endif() if(SHERPA_ONNX_ENABLE_GPU) @@ -123,166 +42,22 @@ function(download_onnxruntime) # for 64-bit windows if(BUILD_SHARED_LIBS) - # If you don't have access to the Internet, - # please pre-download onnxruntime - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-win-x64-1.15.1.zip - ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-1.15.1.zip - ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-1.15.1.zip - /tmp/onnxruntime-win-x64-1.15.1.zip - ) - - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x64-1.15.1.zip") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-1.15.1.zip") - set(onnxruntime_HASH "SHA256=261308ee5526dfd3f405ce8863e43d624a2e0bcd16b2d33cdea8c120ab3534d3") - if(SHERPA_ONNX_ENABLE_GPU) - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.15.1/onnxruntime-win-x64-gpu-1.15.1.zip") - set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-gpu-1.15.1.zip") - set(onnxruntime_HASH "SHA256=dcc3a385b415dd2e4a813018b71da5085d9b97774552edf17947826a255a3732") - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-win-x64-gpu-1.15.1.zip - ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-gpu-1.15.1.zip - ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-gpu-1.15.1.zip - /tmp/onnxruntime-win-x64-gpu-1.15.1.zip - ) + include(onnxruntime-win-x64-gpu) + else() + include(onnxruntime-win-x64) endif() else() # static libraries for windows x64 message(STATUS "Use static onnxruntime libraries") - # If you don't have access to the Internet, - # please pre-download onnxruntime - set(possible_file_locations - $ENV{HOME}/Downloads/onnxruntime-win-x64-static-1.15.1.tar.bz2 - ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-static-1.15.1.tar.bz2 - ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-static-1.15.1.tar.bz2 - /tmp/onnxruntime-win-x64-static-1.15.1.tar.bz2 - ) - - set(onnxruntime_URL "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x64-static-1.15.1.tar.bz2") - set(onnxruntime_URL2 "") - set(onnxruntime_HASH "SHA256=c809a8510a89b8b37ae7d563c39229db22bac8fbefcbfe5c81a60b367d065b1b") + include(onnxruntime-win-x64-static) endif() endif() - # After downloading, it contains: - # ./lib/onnxruntime.{dll,lib,pdb} - # ./lib/onnxruntime_providers_shared.{dll,lib,pdb} - # - # ./include - # It contains all the needed header files else() message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") message(FATAL_ERROR "Only support Linux, macOS, and Windows at present. Will support other OSes later") endif() - - foreach(f IN LISTS possible_file_locations) - if(EXISTS ${f}) - set(onnxruntime_URL "${f}") - file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) - message(STATUS "Found local downloaded onnxruntime: ${onnxruntime_URL}") - set(onnxruntime_URL2) - break() - endif() - endforeach() - - FetchContent_Declare(onnxruntime - URL - ${onnxruntime_URL} - ${onnxruntime_URL2} - URL_HASH ${onnxruntime_HASH} - ) - - FetchContent_GetProperties(onnxruntime) - if(NOT onnxruntime_POPULATED) - message(STATUS "Downloading onnxruntime from ${onnxruntime_URL}") - FetchContent_Populate(onnxruntime) - endif() - message(STATUS "onnxruntime is downloaded to ${onnxruntime_SOURCE_DIR}") - - if(BUILD_SHARED_LIBS OR NOT WIN32) - find_library(location_onnxruntime onnxruntime - PATHS - "${onnxruntime_SOURCE_DIR}/lib" - NO_CMAKE_SYSTEM_PATH - ) - - message(STATUS "location_onnxruntime: ${location_onnxruntime}") - - add_library(onnxruntime SHARED IMPORTED) - - set_target_properties(onnxruntime PROPERTIES - IMPORTED_LOCATION ${location_onnxruntime} - INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" - ) - endif() - - if(SHERPA_ONNX_ENABLE_GPU AND NOT WIN32) - find_library(location_onnxruntime_cuda_lib onnxruntime_providers_cuda - PATHS - "${onnxruntime_SOURCE_DIR}/lib" - NO_CMAKE_SYSTEM_PATH - ) - add_library(onnxruntime_providers_cuda SHARED IMPORTED) - set_target_properties(onnxruntime_providers_cuda PROPERTIES - IMPORTED_LOCATION ${location_onnxruntime_cuda_lib} - ) - endif() - - if(WIN32) - if(BUILD_SHARED_LIBS) - set_property(TARGET onnxruntime - PROPERTY - IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime.lib" - ) - - file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime.dll - DESTINATION - ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} - ) - if(SHERPA_ONNX_ENABLE_GPU) - add_library(onnxruntime_providers_cuda SHARED IMPORTED) - - set_target_properties(onnxruntime_providers_cuda PROPERTIES - IMPORTED_LOCATION ${location_onnxruntime} - INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" - ) - - set_property(TARGET onnxruntime_providers_cuda - PROPERTY - IMPORTED_IMPLIB "${onnxruntime_SOURCE_DIR}/lib/onnxruntime_providers_cuda.lib" - ) - - file(COPY ${onnxruntime_SOURCE_DIR}/lib/onnxruntime_providers_cuda.dll - DESTINATION - ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} - ) - endif() - else() - # for static libraries, we use onnxruntime_lib_files directly below - include_directories(${onnxruntime_SOURCE_DIR}/include) - endif() - endif() - - if(UNIX AND NOT APPLE) - file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/lib*") - elseif(APPLE) - file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime.*.*dylib") - elseif(WIN32) - if(BUILD_SHARED_LIBS) - file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") - else() - file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.lib") - set(onnxruntime_lib_files ${onnxruntime_lib_files} PARENT_SCOPE) - endif() - endif() - - message(STATUS "onnxruntime lib files: ${onnxruntime_lib_files}") - if(SHERPA_ONNX_ENABLE_PYTHON AND WIN32) - install(FILES ${onnxruntime_lib_files} DESTINATION ..) - else() - install(FILES ${onnxruntime_lib_files} DESTINATION lib) - endif() endfunction() # First, we try to locate the header and the lib if the use has already diff --git a/sherpa-onnx/c-api/c-api.h b/sherpa-onnx/c-api/c-api.h index aeb68b43..ae30fbe4 100644 --- a/sherpa-onnx/c-api/c-api.h +++ b/sherpa-onnx/c-api/c-api.h @@ -31,7 +31,7 @@ extern "C" { #define SHERPA_ONNX_IMPORT #endif #else // WIN32 -#define SHERPA_ONNX_EXPORT __attribute__((__visibility__("default"))) +#define SHERPA_ONNX_EXPORT #define SHERPA_ONNX_IMPORT SHERPA_ONNX_EXPORT #endif diff --git a/sherpa-onnx/csrc/CMakeLists.txt b/sherpa-onnx/csrc/CMakeLists.txt index 85775725..9a431ba0 100644 --- a/sherpa-onnx/csrc/CMakeLists.txt +++ b/sherpa-onnx/csrc/CMakeLists.txt @@ -125,6 +125,10 @@ else() install(TARGETS sherpa-onnx-core DESTINATION lib) endif() +if(WIN32 AND BUILD_SHARED_LIBS) + install(TARGETS sherpa-onnx-core DESTINATION bin) +endif() + install( TARGETS sherpa-onnx