Fangjun Kuang
Committed by GitHub

Refactor WebAssembly build script. (#598)

Make it easier to build WebAssembly for ASR.
  1 +name: wasm-simd-hf-space-de-tts
  2 +
  3 +on:
  4 + release:
  5 + types:
  6 + - published
  7 +
  8 + workflow_dispatch:
  9 +
  10 +concurrency:
  11 + group: wasm-simd-hf-space-de-tts-${{ github.ref }}
  12 + cancel-in-progress: true
  13 +
  14 +jobs:
  15 + wasm-simd-hf-space-de-tts:
  16 + runs-on: ${{ matrix.os }}
  17 + strategy:
  18 + fail-fast: false
  19 + matrix:
  20 + os: [ubuntu-latest]
  21 +
  22 + steps:
  23 + - uses: actions/checkout@v4
  24 + with:
  25 + fetch-depth: 0
  26 + - name: Install emsdk
  27 + uses: mymindstorm/setup-emsdk@v14
  28 +
  29 + - name: View emsdk version
  30 + shell: bash
  31 + run: |
  32 + emcc -v
  33 + echo "--------------------"
  34 + emcc --check
  35 +
  36 + - name: Download model files
  37 + shell: bash
  38 + run: |
  39 + cd wasm/tts/assets
  40 + ls -lh
  41 + echo "----------"
  42 + wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-de_DE-thorsten_emotional-medium.tar.bz2
  43 + tar xf vits-piper-de_DE-thorsten_emotional-medium.tar.bz2
  44 + rm vits-piper-de_DE-thorsten_emotional-medium.tar.bz2
  45 +
  46 + mv -v vits-piper-de_DE-thorsten_emotional-medium/de_DE-thorsten_emotional-medium.onnx ./model.onnx
  47 + mv -v vits-piper-de_DE-thorsten_emotional-medium/tokens.txt ./
  48 + mv vits-piper-de_DE-thorsten_emotional-medium/espeak-ng-data ./
  49 +
  50 + rm -rf vits-piper-de_DE-thorsten_emotional-medium
  51 +
  52 + ls -lh
  53 +
  54 + - name: Build sherpa-onnx for WebAssembly
  55 + shell: bash
  56 + run: |
  57 + ./build-wasm-simd-tts.sh
  58 +
  59 + - name: collect files
  60 + shell: bash
  61 + run: |
  62 + SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
  63 +
  64 + mv build-wasm-simd-tts/install/bin/wasm sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-de-tts
  65 + ls -lh sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-de-tts
  66 + tar cjfv sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-de-tts.tar.bz2 ./sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-de-tts
  67 +
  68 + - name: Upload wasm files
  69 + uses: actions/upload-artifact@v4
  70 + with:
  71 + name: sherpa-onnx-wasm-simd-de-tts
  72 + path: ./sherpa-onnx-wasm-simd-*.tar.bz2
  73 +
  74 + - name: Publish to huggingface
  75 + env:
  76 + HF_TOKEN: ${{ secrets.HF_TOKEN }}
  77 + uses: nick-fields/retry@v2
  78 + with:
  79 + max_attempts: 20
  80 + timeout_seconds: 200
  81 + shell: bash
  82 + command: |
  83 + SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
  84 +
  85 + git config --global user.email "csukuangfj@gmail.com"
  86 + git config --global user.name "Fangjun Kuang"
  87 +
  88 + rm -rf huggingface
  89 + export GIT_LFS_SKIP_SMUDGE=1
  90 +
  91 + git clone https://huggingface.co/spaces/k2-fsa/web-assembly-tts-sherpa-onnx-de huggingface
  92 + cd huggingface
  93 + git fetch
  94 + git pull
  95 + git merge -m "merge remote" --ff origin main
  96 +
  97 + cp -v ../sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-de-tts/* .
  98 +
  99 + git status
  100 + git lfs track "*.data"
  101 + git lfs track "*.wasm"
  102 + ls -lh
  103 +
  104 + git add .
  105 + git commit -m "update model"
  106 + git push https://csukuangfj:$HF_TOKEN@huggingface.co/spaces/k2-fsa/web-assembly-tts-sherpa-onnx-de main
1 -name: wasm-simd-hf-space-en 1 +name: wasm-simd-hf-space-en-tts
2 2
3 on: 3 on:
4 - push:  
5 - branches:  
6 - - wasm-2  
7 release: 4 release:
8 types: 5 types:
9 - published 6 - published
@@ -11,11 +8,11 @@ on: @@ -11,11 +8,11 @@ on:
11 workflow_dispatch: 8 workflow_dispatch:
12 9
13 concurrency: 10 concurrency:
14 - group: wasm-simd-hf-space-en-${{ github.ref }} 11 + group: wasm-simd-hf-space-en-tts-${{ github.ref }}
15 cancel-in-progress: true 12 cancel-in-progress: true
16 13
17 jobs: 14 jobs:
18 - wasm-simd-hf-space-en: 15 + wasm-simd-hf-space-en-tts:
19 runs-on: ${{ matrix.os }} 16 runs-on: ${{ matrix.os }}
20 strategy: 17 strategy:
21 fail-fast: false 18 fail-fast: false
@@ -39,7 +36,7 @@ jobs: @@ -39,7 +36,7 @@ jobs:
39 - name: Download model files 36 - name: Download model files
40 shell: bash 37 shell: bash
41 run: | 38 run: |
42 - cd wasm/assets 39 + cd wasm/tts/assets
43 ls -lh 40 ls -lh
44 echo "----------" 41 echo "----------"
45 wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-libritts_r-medium.tar.bz2 42 wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-libritts_r-medium.tar.bz2
@@ -55,21 +52,21 @@ jobs: @@ -55,21 +52,21 @@ jobs:
55 - name: Build sherpa-onnx for WebAssembly 52 - name: Build sherpa-onnx for WebAssembly
56 shell: bash 53 shell: bash
57 run: | 54 run: |
58 - ./build-wasm-simd.sh 55 + ./build-wasm-simd-tts.sh
59 56
60 - name: collect files 57 - name: collect files
61 shell: bash 58 shell: bash
62 run: | 59 run: |
63 SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) 60 SHERPA_ONNX_VERSION=v$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2)
64 61
65 - mv build-wasm-simd/install/bin/wasm sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en  
66 - ls -lh sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en  
67 - tar cjfv sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en.tar.bz2 ./sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en 62 + mv build-wasm-simd-tts/install/bin/wasm sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en-tts
  63 + ls -lh sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en-tts
  64 + tar cjfv sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en-tts.tar.bz2 ./sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en-tts
68 65
69 - name: Upload wasm files 66 - name: Upload wasm files
70 uses: actions/upload-artifact@v4 67 uses: actions/upload-artifact@v4
71 with: 68 with:
72 - name: sherpa-onnx-wasm-simd-en 69 + name: sherpa-onnx-wasm-simd-en-tts
73 path: ./sherpa-onnx-wasm-simd-*.tar.bz2 70 path: ./sherpa-onnx-wasm-simd-*.tar.bz2
74 71
75 - name: Publish to huggingface 72 - name: Publish to huggingface
@@ -95,7 +92,7 @@ jobs: @@ -95,7 +92,7 @@ jobs:
95 git pull 92 git pull
96 git merge -m "merge remote" --ff origin main 93 git merge -m "merge remote" --ff origin main
97 94
98 - cp -v ../sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en/* . 95 + cp -v ../sherpa-onnx-wasm-simd-${SHERPA_ONNX_VERSION}-en-tts/* .
99 96
100 git status 97 git status
101 git lfs track "*.data" 98 git lfs track "*.data"
@@ -21,6 +21,7 @@ option(SHERPA_ONNX_ENABLE_C_API "Whether to build C API" ON) @@ -21,6 +21,7 @@ option(SHERPA_ONNX_ENABLE_C_API "Whether to build C API" ON)
21 option(SHERPA_ONNX_ENABLE_WEBSOCKET "Whether to build webscoket server/client" ON) 21 option(SHERPA_ONNX_ENABLE_WEBSOCKET "Whether to build webscoket server/client" ON)
22 option(SHERPA_ONNX_ENABLE_GPU "Enable ONNX Runtime GPU support" OFF) 22 option(SHERPA_ONNX_ENABLE_GPU "Enable ONNX Runtime GPU support" OFF)
23 option(SHERPA_ONNX_ENABLE_WASM "Whether to enable WASM" OFF) 23 option(SHERPA_ONNX_ENABLE_WASM "Whether to enable WASM" OFF)
  24 +option(SHERPA_ONNX_ENABLE_WASM_TTS "Whether to enable WASM for TTS" OFF)
24 option(SHERPA_ONNX_ENABLE_BINARY "Whether to build binaries" ON) 25 option(SHERPA_ONNX_ENABLE_BINARY "Whether to build binaries" ON)
25 option(SHERPA_ONNX_LINK_LIBSTDCPP_STATICALLY "True to link libstdc++ statically. Used only when BUILD_SHARED_LIBS is OFF on Linux" ON) 26 option(SHERPA_ONNX_LINK_LIBSTDCPP_STATICALLY "True to link libstdc++ statically. Used only when BUILD_SHARED_LIBS is OFF on Linux" ON)
26 27
@@ -104,6 +105,14 @@ message(STATUS "SHERPA_ONNX_ENABLE_C_API ${SHERPA_ONNX_ENABLE_C_API}") @@ -104,6 +105,14 @@ message(STATUS "SHERPA_ONNX_ENABLE_C_API ${SHERPA_ONNX_ENABLE_C_API}")
104 message(STATUS "SHERPA_ONNX_ENABLE_WEBSOCKET ${SHERPA_ONNX_ENABLE_WEBSOCKET}") 105 message(STATUS "SHERPA_ONNX_ENABLE_WEBSOCKET ${SHERPA_ONNX_ENABLE_WEBSOCKET}")
105 message(STATUS "SHERPA_ONNX_ENABLE_GPU ${SHERPA_ONNX_ENABLE_GPU}") 106 message(STATUS "SHERPA_ONNX_ENABLE_GPU ${SHERPA_ONNX_ENABLE_GPU}")
106 message(STATUS "SHERPA_ONNX_ENABLE_WASM ${SHERPA_ONNX_ENABLE_WASM}") 107 message(STATUS "SHERPA_ONNX_ENABLE_WASM ${SHERPA_ONNX_ENABLE_WASM}")
  108 +message(STATUS "SHERPA_ONNX_ENABLE_WASM_TTS ${SHERPA_ONNX_ENABLE_WASM_TTS}")
  109 +
  110 +if(SHERPA_ONNX_ENABLE_WASM_TTS)
  111 + if(NOT SHERPA_ONNX_ENABLE_WASM)
  112 + message(FATAL_ERROR "Please set SHERPA_ONNX_ENABLE_WASM to ON if you enable WASM for tts")
  113 + endif()
  114 +endif()
  115 +
107 if(SHERPA_ONNX_ENABLE_WASM) 116 if(SHERPA_ONNX_ENABLE_WASM)
108 add_definitions(-DSHERPA_ONNX_ENABLE_WASM=1) 117 add_definitions(-DSHERPA_ONNX_ENABLE_WASM=1)
109 endif() 118 endif()
@@ -114,7 +123,6 @@ endif() @@ -114,7 +123,6 @@ endif()
114 set(CMAKE_CXX_EXTENSIONS OFF) 123 set(CMAKE_CXX_EXTENSIONS OFF)
115 message(STATUS "C++ Standard version: ${CMAKE_CXX_STANDARD}") 124 message(STATUS "C++ Standard version: ${CMAKE_CXX_STANDARD}")
116 125
117 -  
118 include(CheckIncludeFileCXX) 126 include(CheckIncludeFileCXX)
119 127
120 if(UNIX AND NOT APPLE AND NOT SHERPA_ONNX_ENABLE_WASM AND NOT CMAKE_SYSTEM_NAME STREQUAL Android) 128 if(UNIX AND NOT APPLE AND NOT SHERPA_ONNX_ENABLE_WASM AND NOT CMAKE_SYSTEM_NAME STREQUAL Android)
@@ -31,8 +31,8 @@ if [ ! -f $EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake ]; then @@ -31,8 +31,8 @@ if [ ! -f $EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake ]; then
31 exit 1 31 exit 1
32 fi 32 fi
33 33
34 -mkdir -p build-wasm-simd  
35 -pushd build-wasm-simd 34 +mkdir -p build-wasm-simd-tts
  35 +pushd build-wasm-simd-tts
36 36
37 export SHERPA_ONNX_IS_USING_BUILD_WASM_SH=ON 37 export SHERPA_ONNX_IS_USING_BUILD_WASM_SH=ON
38 38
@@ -51,6 +51,7 @@ cmake \ @@ -51,6 +51,7 @@ cmake \
51 -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \ 51 -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \
52 -DSHERPA_ONNX_ENABLE_GPU=OFF \ 52 -DSHERPA_ONNX_ENABLE_GPU=OFF \
53 -DSHERPA_ONNX_ENABLE_WASM=ON \ 53 -DSHERPA_ONNX_ENABLE_WASM=ON \
  54 + -DSHERPA_ONNX_ENABLE_WASM_TTS=ON \
54 -DSHERPA_ONNX_ENABLE_BINARY=OFF \ 55 -DSHERPA_ONNX_ENABLE_BINARY=OFF \
55 -DSHERPA_ONNX_LINK_LIBSTDCPP_STATICALLY=OFF \ 56 -DSHERPA_ONNX_LINK_LIBSTDCPP_STATICALLY=OFF \
56 .. 57 ..
1 -if(NOT $ENV{SHERPA_ONNX_IS_USING_BUILD_WASM_SH})  
2 - message(FATAL_ERROR "Please use ./build-wasm.sh to build for wasm") 1 +if(SHERPA_ONNX_ENABLE_WASM_TTS)
  2 + add_subdirectory(tts)
3 endif() 3 endif()
4 -  
5 -if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/assets/decoder_jit_trace-pnnx.ncnn.bin")  
6 - message(WARNING "${CMAKE_CURRENT_SOURCE_DIR}/assets/decoder_jit_trace-pnnx.ncnn.bin does not exist")  
7 - # message(FATAL_ERROR "Please read ${CMAKE_CURRENT_SOURCE_DIR}/assets/README.md before you continue")  
8 -endif()  
9 -  
10 -set(exported_functions  
11 - MyPrint  
12 - SherpaOnnxCreateOfflineTts  
13 - SherpaOnnxDestroyOfflineTts  
14 - SherpaOnnxDestroyOfflineTtsGeneratedAudio  
15 - SherpaOnnxOfflineTtsGenerate  
16 - SherpaOnnxOfflineTtsGenerateWithCallback  
17 - SherpaOnnxOfflineTtsNumSpeakers  
18 - SherpaOnnxOfflineTtsSampleRate  
19 - SherpaOnnxWriteWave  
20 -)  
21 -set(mangled_exported_functions)  
22 -foreach(x IN LISTS exported_functions)  
23 - list(APPEND mangled_exported_functions "_${x}")  
24 -endforeach()  
25 -list(JOIN mangled_exported_functions "," all_exported_functions)  
26 -  
27 -  
28 -include_directories(${CMAKE_SOURCE_DIR})  
29 -set(MY_FLAGS " -s FORCE_FILESYSTEM=1 -s INITIAL_MEMORY=512MB -s ALLOW_MEMORY_GROWTH=1")  
30 -string(APPEND MY_FLAGS " -sSTACK_SIZE=10485760 ") # 10MB  
31 -string(APPEND MY_FLAGS " -sEXPORTED_FUNCTIONS=[_CopyHeap,_malloc,_free,${all_exported_functions}] ")  
32 -string(APPEND MY_FLAGS "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/assets@. ")  
33 -string(APPEND MY_FLAGS " -sEXPORTED_RUNTIME_METHODS=['ccall','stringToUTF8','setValue','getValue'] ")  
34 -  
35 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_FLAGS}")  
36 -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_FLAGS}")  
37 -set(CMAKE_EXECUTBLE_LINKER_FLAGS "${CMAKE_EXECUTBLE_LINKER_FLAGS} ${MY_FLAGS}")  
38 -  
39 -if (NOT CMAKE_EXECUTABLE_SUFFIX STREQUAL ".js")  
40 - message(FATAL_ERROR "The default suffix for building executables should be .js!")  
41 -endif()  
42 -# set(CMAKE_EXECUTABLE_SUFFIX ".html")  
43 -  
44 -add_executable(sherpa-onnx-wasm-main sherpa-onnx-wasm-main.cc)  
45 -target_link_libraries(sherpa-onnx-wasm-main sherpa-onnx-c-api)  
46 -install(TARGETS sherpa-onnx-wasm-main DESTINATION bin/wasm)  
47 -  
48 -install(  
49 - FILES  
50 - "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.js"  
51 - "index.html"  
52 - "sherpa-onnx.js"  
53 - "app.js"  
54 - "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.wasm"  
55 - "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.data"  
56 - # "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.html"  
57 - DESTINATION  
58 - bin/wasm  
59 -)  
  1 +if(NOT $ENV{SHERPA_ONNX_IS_USING_BUILD_WASM_SH})
  2 + message(FATAL_ERROR "Please use ./build-wasm-simd-tts.sh to build for wasm TTS")
  3 +endif()
  4 +
  5 +if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/assets/model.onnx")
  6 + message(FATAL_ERROR "Please read ${CMAKE_CURRENT_SOURCE_DIR}/assets/README.md before you continue")
  7 +endif()
  8 +
  9 +set(exported_functions
  10 + MyPrint
  11 + SherpaOnnxCreateOfflineTts
  12 + SherpaOnnxDestroyOfflineTts
  13 + SherpaOnnxDestroyOfflineTtsGeneratedAudio
  14 + SherpaOnnxOfflineTtsGenerate
  15 + SherpaOnnxOfflineTtsGenerateWithCallback
  16 + SherpaOnnxOfflineTtsNumSpeakers
  17 + SherpaOnnxOfflineTtsSampleRate
  18 + SherpaOnnxWriteWave
  19 +)
  20 +set(mangled_exported_functions)
  21 +foreach(x IN LISTS exported_functions)
  22 + list(APPEND mangled_exported_functions "_${x}")
  23 +endforeach()
  24 +list(JOIN mangled_exported_functions "," all_exported_functions)
  25 +
  26 +
  27 +include_directories(${CMAKE_SOURCE_DIR})
  28 +set(MY_FLAGS " -s FORCE_FILESYSTEM=1 -s INITIAL_MEMORY=512MB -s ALLOW_MEMORY_GROWTH=1")
  29 +string(APPEND MY_FLAGS " -sSTACK_SIZE=10485760 ") # 10MB
  30 +string(APPEND MY_FLAGS " -sEXPORTED_FUNCTIONS=[_CopyHeap,_malloc,_free,${all_exported_functions}] ")
  31 +string(APPEND MY_FLAGS "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/assets@. ")
  32 +string(APPEND MY_FLAGS " -sEXPORTED_RUNTIME_METHODS=['ccall','stringToUTF8','setValue','getValue'] ")
  33 +
  34 +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_FLAGS}")
  35 +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_FLAGS}")
  36 +set(CMAKE_EXECUTBLE_LINKER_FLAGS "${CMAKE_EXECUTBLE_LINKER_FLAGS} ${MY_FLAGS}")
  37 +
  38 +if (NOT CMAKE_EXECUTABLE_SUFFIX STREQUAL ".js")
  39 + message(FATAL_ERROR "The default suffix for building executables should be .js!")
  40 +endif()
  41 +# set(CMAKE_EXECUTABLE_SUFFIX ".html")
  42 +
  43 +add_executable(sherpa-onnx-wasm-main sherpa-onnx-wasm-main.cc)
  44 +target_link_libraries(sherpa-onnx-wasm-main sherpa-onnx-c-api)
  45 +install(TARGETS sherpa-onnx-wasm-main DESTINATION bin/wasm)
  46 +
  47 +install(
  48 + FILES
  49 + "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.js"
  50 + "index.html"
  51 + "sherpa-onnx.js"
  52 + "app.js"
  53 + "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.wasm"
  54 + "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.data"
  55 + # "$<TARGET_FILE_DIR:sherpa-onnx-wasm-main>/sherpa-onnx-wasm-main.html"
  56 + DESTINATION
  57 + bin/wasm
  58 +)
@@ -18,7 +18,7 @@ rm -rf vits-piper-en_US-libritts_r-medium @@ -18,7 +18,7 @@ rm -rf vits-piper-en_US-libritts_r-medium
18 ``` 18 ```
19 19
20 You should have the following files in `assets` before you can run 20 You should have the following files in `assets` before you can run
21 -`build-wasm-simd.sh` 21 +`build-wasm-simd-tts.sh`
22 22
23 ``` 23 ```
24 assets fangjun$ tree -L 1 24 assets fangjun$ tree -L 1