From 64007a6193ce7ff119fba1fcd961df6d330c7c3a Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Sun, 18 Feb 2024 10:39:55 +0800 Subject: [PATCH] Support building debug version on Windows (#583) --- .github/workflows/test-build-wheel.yaml | 2 +- .github/workflows/test-pip-install.yaml | 2 +- .github/workflows/windows-x64-debug.yaml | 78 ++++++++++++++++++++ .github/workflows/windows-x86-debug.yaml | 78 ++++++++++++++++++++ cmake/onnxruntime-win-x64-static-debug.cmake | 72 ++++++++++++++++++ cmake/onnxruntime-win-x64-static.cmake | 4 + cmake/onnxruntime-win-x86-static-debug.cmake | 71 ++++++++++++++++++ cmake/onnxruntime-win-x86-static.cmake | 4 + cmake/onnxruntime.cmake | 16 +++- 9 files changed, 323 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/windows-x64-debug.yaml create mode 100644 .github/workflows/windows-x86-debug.yaml create mode 100644 cmake/onnxruntime-win-x64-static-debug.cmake create mode 100644 cmake/onnxruntime-win-x86-static-debug.cmake diff --git a/.github/workflows/test-build-wheel.yaml b/.github/workflows/test-build-wheel.yaml index d4d5117a95..dad71e55ea 100644 --- a/.github/workflows/test-build-wheel.yaml +++ b/.github/workflows/test-build-wheel.yaml @@ -74,7 +74,7 @@ jobs: export PATH=/c/hostedtoolcache/windows/Python/3.8.10/x64/bin:$PATH export PATH=/c/hostedtoolcache/windows/Python/3.9.13/x64/bin:$PATH export PATH=/c/hostedtoolcache/windows/Python/3.10.11/x64/bin:$PATH - export PATH=/c/hostedtoolcache/windows/Python/3.11.7/x64/bin:$PATH + export PATH=/c/hostedtoolcache/windows/Python/3.11.8/x64/bin:$PATH which sherpa-onnx sherpa-onnx --help diff --git a/.github/workflows/test-pip-install.yaml b/.github/workflows/test-pip-install.yaml index e6c004ed35..fb269cec2d 100644 --- a/.github/workflows/test-pip-install.yaml +++ b/.github/workflows/test-pip-install.yaml @@ -67,7 +67,7 @@ jobs: export PATH=/c/hostedtoolcache/windows/Python/3.8.10/x64/bin:$PATH export PATH=/c/hostedtoolcache/windows/Python/3.9.13/x64/bin:$PATH export PATH=/c/hostedtoolcache/windows/Python/3.10.11/x64/bin:$PATH - export PATH=/c/hostedtoolcache/windows/Python/3.11.7/x64/bin:$PATH + export PATH=/c/hostedtoolcache/windows/Python/3.11.8/x64/bin:$PATH sherpa-onnx --help sherpa-onnx-keyword-spotter --help diff --git a/.github/workflows/windows-x64-debug.yaml b/.github/workflows/windows-x64-debug.yaml new file mode 100644 index 0000000000..7bcb5287aa --- /dev/null +++ b/.github/workflows/windows-x64-debug.yaml @@ -0,0 +1,78 @@ +name: windows-x64-debug + +on: + push: + branches: + - master + tags: + - '*' + paths: + - '.github/workflows/windows-x64-debug.yaml' + - '.github/scripts/test-online-transducer.sh' + - '.github/scripts/test-online-paraformer.sh' + - '.github/scripts/test-offline-transducer.sh' + - '.github/scripts/test-offline-ctc.sh' + - '.github/scripts/test-online-ctc.sh' + - '.github/scripts/test-offline-tts.sh' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + pull_request: + branches: + - master + paths: + - '.github/workflows/windows-x64-debug.yaml' + - '.github/scripts/test-online-transducer.sh' + - '.github/scripts/test-online-paraformer.sh' + - '.github/scripts/test-offline-transducer.sh' + - '.github/scripts/test-offline-ctc.sh' + - '.github/scripts/test-online-ctc.sh' + - '.github/scripts/test-offline-tts.sh' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + + workflow_dispatch: + +concurrency: + group: windows-x64-debug-${{ github.ref }} + cancel-in-progress: true + +jobs: + windows_x64_debug: + name: Windows x64 debug + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest] + shared_lib: [OFF] + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure CMake + shell: bash + run: | + mkdir build + cd build + cmake -A x64 -D CMAKE_BUILD_TYPE=Debug -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. + + - name: Build sherpa-onnx for windows + shell: bash + run: | + cd build + cmake --build . --config Debug -- -m:2 + cmake --build . --config Debug --target install -- -m:2 + + ls -lh ./bin/Debug/sherpa-onnx.exe + + - name: Test online CTC + shell: bash + run: | + export PATH=$PWD/build/bin/Debug:$PATH + export EXE=sherpa-onnx.exe + + .github/scripts/test-online-ctc.sh diff --git a/.github/workflows/windows-x86-debug.yaml b/.github/workflows/windows-x86-debug.yaml new file mode 100644 index 0000000000..540db7d4f7 --- /dev/null +++ b/.github/workflows/windows-x86-debug.yaml @@ -0,0 +1,78 @@ +name: windows-x86-debug + +on: + push: + branches: + - master + tags: + - '*' + paths: + - '.github/workflows/windows-x86-debug.yaml' + - '.github/scripts/test-online-transducer.sh' + - '.github/scripts/test-online-paraformer.sh' + - '.github/scripts/test-offline-transducer.sh' + - '.github/scripts/test-offline-ctc.sh' + - '.github/scripts/test-offline-tts.sh' + - '.github/scripts/test-online-ctc.sh' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + pull_request: + branches: + - master + paths: + - '.github/workflows/windows-x86-debug.yaml' + - '.github/scripts/test-online-transducer.sh' + - '.github/scripts/test-online-paraformer.sh' + - '.github/scripts/test-offline-transducer.sh' + - '.github/scripts/test-offline-ctc.sh' + - '.github/scripts/test-offline-tts.sh' + - '.github/scripts/test-online-ctc.sh' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + + workflow_dispatch: + +concurrency: + group: windows-x86-debug-${{ github.ref }} + cancel-in-progress: true + +jobs: + windows_x86_debug: + name: Windows x86 debug + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest] + shared_lib: [OFF] + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure CMake + shell: bash + run: | + mkdir build + cd build + cmake -A Win32 -D CMAKE_BUILD_TYPE=Debug -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -D CMAKE_INSTALL_PREFIX=./install .. + + - name: Build sherpa-onnx for windows + shell: bash + run: | + cd build + cmake --build . --config Debug -- -m:2 + cmake --build . --config Debug --target install -- -m:2 + + ls -lh ./bin/Debug/sherpa-onnx.exe + + - name: Test online CTC + shell: bash + run: | + export PATH=$PWD/build/bin/Debug:$PATH + export EXE=sherpa-onnx.exe + + .github/scripts/test-online-ctc.sh diff --git a/cmake/onnxruntime-win-x64-static-debug.cmake b/cmake/onnxruntime-win-x64-static-debug.cmake new file mode 100644 index 0000000000..c2b7314bf4 --- /dev/null +++ b/cmake/onnxruntime-win-x64-static-debug.cmake @@ -0,0 +1,72 @@ +# 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() + +if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) + message(FATAL_ERROR "This file is for building a debug version on Windows x64") +endif() + +set(onnxruntime_URL "https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.17.0/onnxruntime-win-x64-static_lib-debug-1.17.0.tar.bz2") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x64-static_lib-debug-1.17.0.tar.bz2") +set(onnxruntime_HASH "SHA256=6010bbab913cee3f11c421aeff9d173980623da6e72e88078396839a26d65c98") + +# 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_lib-debug-1.17.0.tar.bz2 + ${CMAKE_SOURCE_DIR}/onnxruntime-win-x64-static_lib-debug-1.17.0.tar.bz2 + ${CMAKE_BINARY_DIR}/onnxruntime-win-x64-static_lib-debug-1.17.0.tar.bz2 + /tmp/onnxruntime-win-x64-static_lib-debug-1.17.0.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-static.cmake b/cmake/onnxruntime-win-x64-static.cmake index 04d50b61bd..6a154fc7f9 100644 --- a/cmake/onnxruntime-win-x64-static.cmake +++ b/cmake/onnxruntime-win-x64-static.cmake @@ -15,6 +15,10 @@ if(BUILD_SHARED_LIBS) message(FATAL_ERROR "This file is for building static libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") endif() +if(NOT CMAKE_BUILD_TYPE STREQUAL Release) + message(FATAL_ERROR "This file is for building a release version on Windows x64") +endif() + set(onnxruntime_URL "https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.17.0/onnxruntime-win-x64-static_lib-1.17.0.tar.bz2") set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x64-static_lib-1.17.0.tar.bz2") set(onnxruntime_HASH "SHA256=7ff33b989fbe32546d694284d46653fd4c38f47155105ec14907e6d3cd4b01bb") diff --git a/cmake/onnxruntime-win-x86-static-debug.cmake b/cmake/onnxruntime-win-x86-static-debug.cmake new file mode 100644 index 0000000000..7498a69a34 --- /dev/null +++ b/cmake/onnxruntime-win-x86-static-debug.cmake @@ -0,0 +1,71 @@ +# 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() + +if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) + message(FATAL_ERROR "This file is for building a debug version on Windows x86") +endif() + +set(onnxruntime_URL "https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.17.0/onnxruntime-win-x86-static_lib-debug-1.17.0.tar.bz2") +set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x86-static_lib-debug-1.17.0.tar.bz2") +set(onnxruntime_HASH "SHA256=aa18677dd45338a90fc1bc14c86fe1e8a21f63913d40b3644924f5b24654218e") + +# 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_lib-debug-1.17.0.tar.bz2 + ${CMAKE_SOURCE_DIR}/onnxruntime-win-x86-static_lib-debug-1.17.0.tar.bz2 + ${CMAKE_BINARY_DIR}/onnxruntime-win-x86-static_lib-debug-1.17.0.tar.bz2 + /tmp/onnxruntime-win-x86-static_lib-debug-1.17.0.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-static.cmake b/cmake/onnxruntime-win-x86-static.cmake index e212fb0e9f..ec4f42b30c 100644 --- a/cmake/onnxruntime-win-x86-static.cmake +++ b/cmake/onnxruntime-win-x86-static.cmake @@ -15,6 +15,10 @@ if(BUILD_SHARED_LIBS) message(FATAL_ERROR "This file is for building static libraries. BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}") endif() +if(NOT CMAKE_BUILD_TYPE STREQUAL Release) + message(FATAL_ERROR "This file is for building a release version on Windows x86") +endif() + set(onnxruntime_URL "https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.17.0/onnxruntime-win-x86-static_lib-1.17.0.tar.bz2") set(onnxruntime_URL2 "https://huggingface.co/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-x86-static_lib-1.17.0.tar.bz2") set(onnxruntime_HASH "SHA256=3c40c53fef937452bf6cfbac1584875d5627bd908ca731d120642112526c8352") diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index 787071c3a2..59a62c7fac 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -69,7 +69,13 @@ function(download_onnxruntime) if(BUILD_SHARED_LIBS) include(onnxruntime-win-x86) else() - include(onnxruntime-win-x86-static) + if(CMAKE_BUILD_TYPE STREQUAL Release) + include(onnxruntime-win-x86-static) + elseif(CMAKE_BUILD_TYPE STREQUAL Debug) + include(onnxruntime-win-x86-static-debug) + else() + message(STATUS "Support only CMAKE_BUILD_TYPE Release or Debug. Given: ${CMAKE_BUILD_TYPE}") + endif() endif() if(SHERPA_ONNX_ENABLE_GPU) @@ -87,7 +93,13 @@ function(download_onnxruntime) else() # static libraries for windows x64 message(STATUS "Use static onnxruntime libraries") - include(onnxruntime-win-x64-static) + if(CMAKE_BUILD_TYPE STREQUAL Release) + include(onnxruntime-win-x64-static) + elseif(CMAKE_BUILD_TYPE STREQUAL Debug) + include(onnxruntime-win-x64-static-debug) + else() + message(STATUS "Support only CMAKE_BUILD_TYPE Release or Debug. Given: ${CMAKE_BUILD_TYPE}") + endif() endif() endif() else()