diff --git a/.github/workflows/build-wheels-armv7l.yaml b/.github/workflows/build-wheels-armv7l.yaml new file mode 100644 index 00000000..fb80bbed --- /dev/null +++ b/.github/workflows/build-wheels-armv7l.yaml @@ -0,0 +1,99 @@ +name: build-wheels-armv7l + +on: + push: + branches: + - wheel + tags: + - '*' + workflow_dispatch: + +env: + SHERPA_ONNX_IS_IN_GITHUB_ACTIONS: 1 + +concurrency: + group: build-wheels-armv7l-${{ github.ref }} + cancel-in-progress: true + +jobs: + build_wheels_armv7l: + name: ${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + + steps: + - uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: arm + + - name: Get version + shell: bash + run: | + SHERPA_ONNX_VERSION=$(cat ./CMakeLists.txt | grep SHERPA_ONNX_VERSION | cut -d " " -f 2 | cut -d '"' -f 2) + echo "sherpa-onnx version: $SHERPA_ONNX_VERSION" + echo SHERPA_ONNX_VERSION=$SHERPA_ONNX_VERSION >> $GITHUB_ENV + + v=${{ matrix.python-version }} + PYTHON_VERSION=${v/./} + echo PYTHON_VERSION=$PYTHON_VERSION >> $GITHUB_ENV + + # https://github.com/mshr-h/onnx-dockerfile-for-raspberry-pi/blob/main/3.10-bullseye-build/Dockerfile.arm32v7 + - name: Run docker + uses: addnab/docker-run-action@v3 + with: + image: balenalib/raspberrypi3-python:${{ matrix.python-version }}-bullseye-build + options: | + --platform linux/arm/v7 + --volume ${{ github.workspace }}/:/workspace + shell: bash + run: | + uname -a + cd /workspace + ls -lh + + id + apt install -qq -y git wget + wget -qq https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/cmake-3.27-for-armv7.tar.bz2 + + ls -lh + tar xf cmake-3.27-for-armv7.tar.bz2 + ls -lh cmake/data/bin + chmod +x cmake/data/bin/cmake + export PATH=$PWD/cmake/data/bin:$PATH + + cmake --version + + export SHERPA_ONNX_CMAKE_ARGS='-DCMAKE_C_FLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=neon" -DCMAKE_CXX_FLAGS="-march=armv7-a -mfloat-abi=hard -mfpu=neon"' + python3 setup.py bdist_wheel + ls -lh dist + + mkdir wheelhouse + cp -v dist/* wheelhouse/ + + - name: Display wheels + shell: bash + run: | + ls -lh ./wheelhouse/ + + - name: Upload wheel + uses: actions/upload-artifact@v3 + with: + name: sherpa_onnx-${{ env.SHERPA_ONNX_VERSION }}-cp${{ env.PYTHON_VERSION }}-cp${{ env.PYTHON_VERSION }}-linux_armv7l.whl.zip + path: ./wheelhouse/*.whl + + - name: Publish wheels to PyPI + env: + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + python3 -m pip install --upgrade pip + python3 -m pip install wheel twine setuptools + + twine upload ./wheelhouse/*.whl diff --git a/.github/workflows/nightly-wheel-arm.yaml b/.github/workflows/nightly-wheel-arm.yaml new file mode 100644 index 00000000..2f5ca5a1 --- /dev/null +++ b/.github/workflows/nightly-wheel-arm.yaml @@ -0,0 +1,68 @@ +name: nightly-wheel-arm + +on: + push: + branches: + - master + - nightly + schedule: + # minute (0-59) + # hour (0-23) + # day of the month (1-31) + # month (1-12) + # day of the week (0-6) + # nightly build at 23:50 UTC time every day + - cron: "50 23 * * *" + + workflow_dispatch: + +concurrency: + group: nightly-wheel-armv7l-${{ github.ref }} + cancel-in-progress: true + +jobs: + nightly-wheel-arm: + name: ${{ matrix.python-version }} + # see https://github.com/actions/virtual-environments/blob/win19/20210525.0/images/win/Windows2019-Readme.md + runs-on: ${{ matrix.os}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: arm + + - name: Run docker + uses: addnab/docker-run-action@v3 + with: + image: balenalib/raspberrypi3-python:${{ matrix.python-version }}-bullseye-build + options: | + --platform linux/arm/v7 + --volume ${{ github.workspace }}/:/workspace + shell: bash + run: | + uname -a + cd /workspace + ls -lh + + v=${{ matrix.python-version }} + PYTHON_VERSION=${v/./} + echo PYTHON_VERSION=$PYTHON_VERSION >> $GITHUB_ENV + extra="" + if [[ ${PYTHON_VERSION} == "37" ]]; then + extra="m" + fi + + # pip install -i https://www.piwheels.org/simple numpy sentencepiece click + pip install https://huggingface.co/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/sentencepiece-0.2.0-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}${extra}-linux_armv7l.whl + pip install --no-deps sherpa-onnx + python3 -c "import sherpa_onnx; print(sherpa_onnx.__file__, sherpa_onnx.__version__); print(dir(sherpa_onnx)); print(help(sherpa_onnx))" diff --git a/cmake/onnxruntime-linux-arm.cmake b/cmake/onnxruntime-linux-arm.cmake index 49f1cf2b..27b8ee9b 100644 --- a/cmake/onnxruntime-linux-arm.cmake +++ b/cmake/onnxruntime-linux-arm.cmake @@ -6,7 +6,7 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux) message(FATAL_ERROR "This file is for Linux only. Given: ${CMAKE_SYSTEM_NAME}") endif() -if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL arm) +if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)) message(FATAL_ERROR "This file is for arm only. Given: ${CMAKE_SYSTEM_PROCESSOR}") endif() diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index 171e4251..75e147ca 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -7,7 +7,7 @@ function(download_onnxruntime) if(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) include(onnxruntime-linux-aarch64) - elseif(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL arm) + elseif(CMAKE_SYSTEM_NAME STREQUAL Linux AND (CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)) include(onnxruntime-linux-arm) elseif(CMAKE_SYSTEM_NAME STREQUAL Linux AND CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) if(SHERPA_ONNX_ENABLE_GPU)