From 81e7ae10ab2d158e189defbf47eedf6ec722b493 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 09:32:28 +0800 Subject: [PATCH 1/7] Support Windows arm64 --- cmake/onnxruntime-win-arm64.cmake | 91 +++++++++++++++++++++++++++++++ cmake/onnxruntime.cmake | 9 ++- 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 cmake/onnxruntime-win-arm64.cmake diff --git a/cmake/onnxruntime-win-arm64.cmake b/cmake/onnxruntime-win-arm64.cmake new file mode 100644 index 0000000000..57a43a8ad1 --- /dev/null +++ b/cmake/onnxruntime-win-arm64.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 ARM64 OR CMAKE_VS_PLATFORM_NAME STREQUAL arm64)) + 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.17.1/onnxruntime-win-arm64-1.17.1.zip") +set(onnxruntime_URL2 "https://hub.nuaa.cf/microsoft/onnxruntime/releases/download/v1.17.1/onnxruntime-win-arm64-1.17.1.zip") +set(onnxruntime_HASH "SHA256=47782cebcab0fd7a1f0a3f0676b088c1bc0f4fbf21666f6fe57570dc362fa5a8") + +# 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-arm64-1.17.1.zip + ${CMAKE_SOURCE_DIR}/onnxruntime-win-arm64-1.17.1.zip + ${CMAKE_BINARY_DIR}/onnxruntime-win-arm64-1.17.1.zip + /tmp/onnxruntime-win-arm64-1.17.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 ae22bfab02..a446e624ac 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -87,9 +87,14 @@ function(download_onnxruntime) if(SHERPA_ONNX_ENABLE_GPU) message(FATAL_ERROR "GPU support for Win32 is not supported!") endif() + elseif(CMAKE_VS_PLATFORM_NAME STREQUAL ARM64 OR CMAKE_VS_PLATFORM_NAME STREQUAL arm64) + # for 64-bit windows (arm64) + if(NOT BUILD_SHARED_LIBS) + message(FATAL_ERROR "Please pass -DBUILD_SHARED_LIBS=ON to cmake") + endif() + include(onnxruntime-win-arm64) else() - # for 64-bit windows - + # for 64-bit windows (x64) if(BUILD_SHARED_LIBS) message(STATUS "Use dynamic onnxruntime libraries") if(SHERPA_ONNX_ENABLE_GPU) From 969d9408b8d3c087c3435c9dd9855a5625307677 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 09:40:49 +0800 Subject: [PATCH 2/7] Add CI for Windows arm64 --- .github/workflows/windows-arm64.yaml | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 .github/workflows/windows-arm64.yaml diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml new file mode 100644 index 0000000000..eea96c3294 --- /dev/null +++ b/.github/workflows/windows-arm64.yaml @@ -0,0 +1,60 @@ +name: windows-arm64 + +on: + push: + branches: + - master + - win-arm64-2 + tags: + - '*' + paths: + - '.github/workflows/windows-arm64.yaml' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + pull_request: + branches: + - master + paths: + - '.github/workflows/windows-arm64.yaml' + - 'CMakeLists.txt' + - 'cmake/**' + - 'sherpa-onnx/csrc/*' + + workflow_dispatch: + +concurrency: + group: windows-arm64-${{ github.ref }} + cancel-in-progress: true + +jobs: + windows_arm64: + name: shared-${{ matrix.shared_lib }} tts-${{ matrix.with_tts }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest] + shared_lib: [ON] + with_tts: [ON, OFF] + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure CMake + shell: bash + run: | + mkdir build + cd build + cmake -A ARM -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -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 Release -- -m:2 + cmake --build . --config Release --target install -- -m:2 + + ls -lh ./bin/Release/sherpa-onnx.exe From 29345871e0e2ebd7375371d2baba83dcbdcc0d34 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 09:46:23 +0800 Subject: [PATCH 3/7] small fixes --- .github/workflows/windows-arm64.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml index eea96c3294..02b818db98 100644 --- a/.github/workflows/windows-arm64.yaml +++ b/.github/workflows/windows-arm64.yaml @@ -48,7 +48,7 @@ jobs: run: | mkdir build cd build - cmake -A ARM -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. + cmake -A ARM64 -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. - name: Build sherpa-onnx for windows shell: bash From 95df8e9c01f8b3d4e98ebe6b522f21bb3e8bc3ab Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 10:03:40 +0800 Subject: [PATCH 4/7] specify host arch --- .github/workflows/windows-arm64.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml index 02b818db98..8fdc0fe1a2 100644 --- a/.github/workflows/windows-arm64.yaml +++ b/.github/workflows/windows-arm64.yaml @@ -48,7 +48,7 @@ jobs: run: | mkdir build cd build - cmake -A ARM64 -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. + cmake -A ARM64 -T v143,host=x64 -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. - name: Build sherpa-onnx for windows shell: bash From d1770d6523fa281a04e9d0418ece63e2e44ed837 Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 10:23:00 +0800 Subject: [PATCH 5/7] disable building espeak-ng-bin --- .github/workflows/windows-arm64.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml index 8fdc0fe1a2..7fcafca7d2 100644 --- a/.github/workflows/windows-arm64.yaml +++ b/.github/workflows/windows-arm64.yaml @@ -48,7 +48,7 @@ jobs: run: | mkdir build cd build - cmake -A ARM64 -T v143,host=x64 -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install .. + cmake -A ARM64 -DSHERPA_ONNX_ENABLE_TTS=${{ matrix.with_tts }} -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=${{ matrix.shared_lib }} -DCMAKE_INSTALL_PREFIX=./install -DBUILD_ESPEAK_NG_EXE=OFF .. - name: Build sherpa-onnx for windows shell: bash From 206d51d0533f9c7013e81d8f470e99b813f1cf4d Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 11:11:48 +0800 Subject: [PATCH 6/7] Minor fixes --- .github/workflows/windows-arm64.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml index 7fcafca7d2..4fb85a9e15 100644 --- a/.github/workflows/windows-arm64.yaml +++ b/.github/workflows/windows-arm64.yaml @@ -4,7 +4,6 @@ on: push: branches: - master - - win-arm64-2 tags: - '*' paths: From a0e499388091a0a868f0f27a85848e2f4385415a Mon Sep 17 00:00:00 2001 From: Fangjun Kuang Date: Fri, 24 May 2024 11:13:33 +0800 Subject: [PATCH 7/7] Fix typos --- cmake/onnxruntime-win-arm64.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/onnxruntime-win-arm64.cmake b/cmake/onnxruntime-win-arm64.cmake index 57a43a8ad1..0705b6451a 100644 --- a/cmake/onnxruntime-win-arm64.cmake +++ b/cmake/onnxruntime-win-arm64.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Xiaomi Corporation +# Copyright (c) 2022-2024 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}") @@ -8,7 +8,7 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) endif() if(NOT (CMAKE_VS_PLATFORM_NAME STREQUAL ARM64 OR CMAKE_VS_PLATFORM_NAME STREQUAL arm64)) - message(FATAL_ERROR "This file is for Windows x64 only. Given: ${CMAKE_VS_PLATFORM_NAME}") + message(FATAL_ERROR "This file is for Windows arm64 only. Given: ${CMAKE_VS_PLATFORM_NAME}") endif() if(NOT BUILD_SHARED_LIBS)