diff --git a/CMakeLists.txt b/CMakeLists.txt index 0512038f..653c1905 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,15 @@ if(SHERPA_ONNX_ENABLE_JNI AND NOT BUILD_SHARED_LIBS) set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE) endif() +if(SHERPA_ONNX_ENABLE_GPU) + message(WARNING "\ +Compiling for NVIDIA GPU is enabled. Please make sure cudatoolkit +is installed on your system. Otherwise, you will get errors at runtime. +Hint: You don't need sudo permission to install CUDA toolkit. Please refer to + https://k2-fsa.github.io/k2/installation/cuda-cudnn.html +to install CUDA toolkit if you have not installed it.") +endif() + if(BUILD_SHARED_LIBS AND MSVC) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() diff --git a/cmake/asio.cmake b/cmake/asio.cmake index 52b5c7d4..b7fa5076 100644 --- a/cmake/asio.cmake +++ b/cmake/asio.cmake @@ -19,6 +19,7 @@ function(download_asio) if(EXISTS ${f}) set(asio_URL "${f}") file(TO_CMAKE_PATH "${asio_URL}" asio_URL) + message(STATUS "Found local downloaded asio: ${asio_URL}") set(asio_URL2) break() endif() diff --git a/cmake/cargs.cmake b/cmake/cargs.cmake index e7a1deed..121c8dee 100644 --- a/cmake/cargs.cmake +++ b/cmake/cargs.cmake @@ -18,6 +18,7 @@ function(download_cargs) if(EXISTS ${f}) set(cargs_URL "${f}") file(TO_CMAKE_PATH "${cargs_URL}" cargs_URL) + message(STATUS "Found local downloaded cargs: ${cargs_URL}") break() endif() endforeach() diff --git a/cmake/googletest.cmake b/cmake/googletest.cmake index 8be03f54..835cef50 100644 --- a/cmake/googletest.cmake +++ b/cmake/googletest.cmake @@ -19,6 +19,7 @@ function(download_googltest) if(EXISTS ${f}) set(googletest_URL "${f}") file(TO_CMAKE_PATH "${googletest_URL}" googletest_URL) + message(STATUS "Found local downloaded googletest: ${googletest_URL}") set(googletest_URL2) break() endif() diff --git a/cmake/json.cmake b/cmake/json.cmake index 3ec935b3..b1da43a9 100644 --- a/cmake/json.cmake +++ b/cmake/json.cmake @@ -19,6 +19,7 @@ function(download_json) if(EXISTS ${f}) set(json_URL "${f}") file(TO_CMAKE_PATH "${json_URL}" json_URL) + message(STATUS "Found local downloaded json: ${json_URL}") set(json_URL2) break() endif() diff --git a/cmake/kaldi-native-fbank.cmake b/cmake/kaldi-native-fbank.cmake index 4f39163f..a0c00e57 100644 --- a/cmake/kaldi-native-fbank.cmake +++ b/cmake/kaldi-native-fbank.cmake @@ -23,6 +23,7 @@ function(download_kaldi_native_fbank) if(EXISTS ${f}) set(kaldi_native_fbank_URL "${f}") file(TO_CMAKE_PATH "${kaldi_native_fbank_URL}" kaldi_native_fbank_URL) + message(STATUS "Found local downloaded kaldi-native-fbank: ${kaldi_native_fbank_URL}") set(kaldi_native_fbank_URL2 ) break() endif() diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index ef437288..76ab5c4d 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -34,7 +34,17 @@ function(download_onnxruntime) # ./include # It contains all the needed header files if(SHERPA_ONNX_ENABLE_GPU) - set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.14.1/onnxruntime-linux-x64-gpu-1.14.1.tgz") + set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.14.0/onnxruntime-linux-x64-gpu-1.14.0.tgz") + set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-linux-x64-gpu-1.14.0.tgz") + set(onnxruntime_HASH "SHA256=d28fd59be62b9749071e2997c237b42f8e52661ae4d12862f77aa934750ead21") + + set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-linux-x64-gpu-1.14.0.tgz + ${PROJECT_SOURCE_DIR}/onnxruntime-linux-x64-gpu-1.14.0.tgz + ${PROJECT_BINARY_DIR}/onnxruntime-linux-x64-gpu-1.14.0.tgz + /tmp/onnxruntime-linux-x64-gpu-1.14.0.tgz + /star-fj/fangjun/download/github/onnxruntime-linux-x64-gpu-1.14.0.tgz + ) endif() # After downloading, it contains: # ./lib/libonnxruntime.so.1.14.1 @@ -77,6 +87,10 @@ function(download_onnxruntime) set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.14.0/onnxruntime-win-x86-1.14.0.zip") set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x86-1.14.0.zip") set(onnxruntime_HASH "SHA256=4214b130db602cbf31a6f26f25377ab077af0cf03c4ddd4651283e1fb68f56cf") + + if(SHERPA_ONNX_ENABLE_GPU) + message(FATAL_ERROR "GPU support for Win32 is not supported!") + endif() else() # If you don't have access to the Internet, # please pre-download onnxruntime @@ -92,6 +106,18 @@ function(download_onnxruntime) set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.14.0/onnxruntime-win-x64-1.14.0.zip") set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-1.14.0.zip") set(onnxruntime_HASH "SHA256=300eafef456748cde2743ee08845bd40ff1bab723697ff934eba6d4ce3519620") + + if(SHERPA_ONNX_ENABLE_GPU) + set(onnxruntime_URL "https://github.com/microsoft/onnxruntime/releases/download/v1.14.0/onnxruntime-win-x64-gpu-1.14.0.zip") + set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/onnxruntime-win-x64-gpu-1.14.0.zip") + set(onnxruntime_HASH "SHA256=b42aac412ec96db92c182b9c8b02190da00072a5efc4adcbecf9b62e933c30d3") + set(possible_file_locations + $ENV{HOME}/Downloads/onnxruntime-win-x64-gpu-1.14.0.zip + ${PROJECT_SOURCE_DIR}/onnxruntime-win-x64-gpu-1.14.0.zip + ${PROJECT_BINARY_DIR}/onnxruntime-win-x64-gpu-1.14.0.zip + /tmp/onnxruntime-win-x64-gpu-1.14.0.zip + ) + endif() endif() # After downloading, it contains: # ./lib/onnxruntime.{dll,lib,pdb} @@ -105,28 +131,22 @@ function(download_onnxruntime) message(FATAL_ERROR "Only support Linux, macOS, and Windows at present. Will support other OSes later") endif() - if(NOT SHERPA_ONNX_ENABLE_GPU) - foreach(f IN LISTS possible_file_locations) - if(EXISTS ${f}) - set(onnxruntime_URL "${f}") - file(TO_CMAKE_PATH "${onnxruntime_URL}" onnxruntime_URL) - set(onnxruntime_URL2) - break() - endif() - endforeach() + 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} - ) - else() - FetchContent_Declare(onnxruntime - URL - ${onnxruntime_URL} - ) - endif() + FetchContent_Declare(onnxruntime + URL + ${onnxruntime_URL} + ${onnxruntime_URL2} + URL_HASH ${onnxruntime_HASH} + ) FetchContent_GetProperties(onnxruntime) if(NOT onnxruntime_POPULATED) @@ -150,7 +170,7 @@ function(download_onnxruntime) INTERFACE_INCLUDE_DIRECTORIES "${onnxruntime_SOURCE_DIR}/include" ) - if(SHERPA_ONNX_ENABLE_GPU) + if(SHERPA_ONNX_ENABLE_GPU AND NOT WIN32) find_library(location_onnxruntime_cuda_lib onnxruntime_providers_cuda PATHS "${onnxruntime_SOURCE_DIR}/lib" @@ -172,6 +192,24 @@ function(download_onnxruntime) 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() endif() if(UNIX AND NOT APPLE) diff --git a/cmake/portaudio.cmake b/cmake/portaudio.cmake index 1b2e4176..dbf9917d 100644 --- a/cmake/portaudio.cmake +++ b/cmake/portaudio.cmake @@ -20,6 +20,7 @@ function(download_portaudio) if(EXISTS ${f}) set(portaudio_URL "${f}") file(TO_CMAKE_PATH "${portaudio_URL}" portaudio_URL) + message(STATUS "Found local downloaded portaudio: ${portaudio_URL}") set(portaudio_URL2) break() endif() diff --git a/cmake/pybind11.cmake b/cmake/pybind11.cmake index 3b007090..de21aa67 100644 --- a/cmake/pybind11.cmake +++ b/cmake/pybind11.cmake @@ -19,6 +19,7 @@ function(download_pybind11) if(EXISTS ${f}) set(pybind11_URL "${f}") file(TO_CMAKE_PATH "${pybind11_URL}" pybind11_URL) + message(STATUS "Found local downloaded pybind11: ${pybind11_URL}") set(pybind11_URL2) break() endif() diff --git a/cmake/websocketpp.cmake b/cmake/websocketpp.cmake index 35a052bc..30c33426 100644 --- a/cmake/websocketpp.cmake +++ b/cmake/websocketpp.cmake @@ -20,6 +20,7 @@ function(download_websocketpp) if(EXISTS ${f}) set(websocketpp_URL "${f}") file(TO_CMAKE_PATH "${websocketpp_URL}" websocketpp_URL) + message(STATUS "Found local downloaded websocketpp: ${websocketpp_URL}") set(websocketpp_URL2) break() endif()