diff --git a/.github/workflows/windows-arm64.yaml b/.github/workflows/windows-arm64.yaml index a6d2a96da..105260ce2 100644 --- a/.github/workflows/windows-arm64.yaml +++ b/.github/workflows/windows-arm64.yaml @@ -34,7 +34,7 @@ jobs: fail-fast: false matrix: os: [windows-latest] - shared_lib: [ON] + shared_lib: [ON, OFF] with_tts: [ON, OFF] steps: diff --git a/cmake/onnxruntime-win-arm64-static.cmake b/cmake/onnxruntime-win-arm64-static.cmake new file mode 100644 index 000000000..0ebbfc29a --- /dev/null +++ b/cmake/onnxruntime-win-arm64-static.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 ARM64 OR CMAKE_VS_PLATFORM_NAME STREQUAL arm64)) + message(FATAL_ERROR "This file is for Windows arm64 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 Release) + message(FATAL_ERROR "This file is for building a release version on Windows arm64") +endif() + +set(onnxruntime_URL "https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.17.1/onnxruntime-win-arm64-static_lib-1.17.1.tar.bz2") +set(onnxruntime_URL2 "https://hf-mirror.com/csukuangfj/onnxruntime-libs/resolve/main/onnxruntime-win-arm64-static_lib-1.17.1.tar.bz2") +set(onnxruntime_HASH "SHA256=534ab5bb8b5495ce45fed866cf3ec9034f89f2057a0152e49120b1088003a17e") + +# 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-static_lib-1.17.1.tar.bz2 + ${CMAKE_SOURCE_DIR}/onnxruntime-win-arm64-static_lib-1.17.1.tar.bz2 + ${CMAKE_BINARY_DIR}/onnxruntime-win-arm64-static_lib-1.17.1.tar.bz2 + /tmp/onnxruntime-win-arm64-static_lib-1.17.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.cmake b/cmake/onnxruntime.cmake index 8453b96bd..14b47bd21 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -91,10 +91,11 @@ function(download_onnxruntime) 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") + if(BUILD_SHARED_LIBS) + include(onnxruntime-win-arm64) + else() + include(onnxruntime-win-arm64-static) endif() - include(onnxruntime-win-arm64) else() # for 64-bit windows (x64) if(SHERPA_ONNX_ENABLE_DIRECTML)