Преглед на файлове

Support building for aarch64 (#7)

* Support building for aarch64

* minor fixes

* fix a typo
Fangjun Kuang преди 2 години
родител
ревизия
767e37f6cf

+ 133 - 0
.github/workflows/aarch64-linux-gnu.yaml

@@ -0,0 +1,133 @@
+# Modified from https://github.com/Tencent/ncnn/blob/master/.github/workflows/linux-arm-cpu-gcc.yml
+name: aarch64-linux-gnu
+
+on:
+  push:
+    branches:
+      - master
+    paths:
+    - '.github/workflows/aarch64-linux-gnu.yaml'
+    - 'CMakeLists.txt'
+    - 'cmake/**'
+    - 'sherpa-ncnn/csrc/*'
+    - 'toolchains/aarch64-linux-gnu.toolchain.cmake'
+  pull_request:
+    branches:
+      - master
+    paths:
+    - '.github/workflows/aarch64-linux-gnu.yaml'
+    - 'CMakeLists.txt'
+    - 'cmake/**'
+    - 'sherpa-ncnn/csrc/*'
+    - 'toolchains/aarch64-linux-gnu.toolchain.cmake'
+
+concurrency:
+  group: aarch64-linux-gnu-${{ github.ref }}
+  cancel-in-progress: true
+
+permissions:
+  contents: read
+
+jobs:
+  aarch64_linux_gnu:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest]
+
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+
+      - name: cache-qemu
+        id: cache-qemu
+        uses: actions/cache@v3
+        with:
+          path: qemu-install
+          key: qemu-aarch64-install-20220908
+
+      - name: install-qemu-build-deps
+        if: steps.cache-qemu.outputs.cache-hit != 'true'
+        run: |
+          sudo apt-get update
+          sudo apt-get install autoconf automake autotools-dev ninja-build
+
+      - name: checkout-qemu
+        if: steps.cache-qemu.outputs.cache-hit != 'true'
+        uses: actions/checkout@v3
+        with:
+          repository: qemu/qemu
+          path: qemu
+          ref: f5643914a9e8f79c606a76e6a9d7ea82a3fc3e65
+
+      - name: qemu
+        if: steps.cache-qemu.outputs.cache-hit != 'true'
+        run: |
+          cd qemu
+          ./configure --prefix=$GITHUB_WORKSPACE/qemu-install --target-list=aarch64-linux-user --disable-system
+          make -j2
+          make install
+
+      - name: cache-toolchain
+        id: cache-toolchain
+        uses: actions/cache@v3
+        with:
+          path: toolchain
+          key: gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
+
+      - name: Download toolchain
+        if: steps.cache-toolchain.outputs.cache-hit != 'true'
+        shell: bash
+        run: |
+          wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
+
+          mkdir $GITHUB_WORKSPACE/toolchain
+          tar xvf ./gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz --strip-components 1 -C $GITHUB_WORKSPACE/toolchain
+
+      - name: Download pretrained model and test-data
+        shell: bash
+        run: |
+          git lfs install
+          git clone https://huggingface.co/csukuangfj/sherpa-ncnn-2022-09-05
+
+      - name: Display toolchain info
+        shell: bash
+        run: |
+          export PATH=$GITHUB_WORKSPACE/toolchain/bin:$PATH
+          aarch64-linux-gnu-gcc --version
+
+      - name: Display qemu-aarch64 -h
+        shell: bash
+        run: |
+          export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH
+          export QEMU_LD_PREFIX=$GITHUB_WORKSPACE/toolchain/aarch64-linux-gnu/libc
+          qemu-aarch64 -h
+
+      - name: build aarch64-linux-gnu
+        shell: bash
+        run: |
+          export PATH=$GITHUB_WORKSPACE/toolchain/bin:$PATH
+
+          ./build-aarch64-linux-gnu.sh
+
+          ls -lh build-aarch64-linux-gnu/bin
+          file build-aarch64-linux-gnu/bin/sherpa-ncnn
+
+      - name: Run tests
+        shell: bash
+        run: |
+          export PATH=$GITHUB_WORKSPACE/toolchain/bin:$PATH
+          export PATH=$GITHUB_WORKSPACE/qemu-install/bin:$PATH
+          export QEMU_LD_PREFIX=$GITHUB_WORKSPACE/toolchain/aarch64-linux-gnu/libc
+
+          cd build-aarch64-linux-gnu/
+
+          ln -s $PWD/../sherpa-ncnn-2022-09-05/bar .
+          ln -s $PWD/../sherpa-ncnn-2022-09-05/test_wavs .
+          ln -s $PWD/../sherpa-ncnn-2022-09-05/tokens.txt .
+
+          time qemu-aarch64 ./bin/sherpa-ncnn ./test_wavs/1089-134686-0001.wav 4
+          time qemu-aarch64 ./bin/sherpa-ncnn ./test_wavs/1221-135766-0001.wav 4
+          time qemu-aarch64 ./bin/sherpa-ncnn ./test_wavs/1221-135766-0002.wav 4

+ 3 - 0
.github/workflows/arm-linux-gnueabihf.yaml

@@ -10,6 +10,7 @@ on:
     - 'CMakeLists.txt'
     - 'cmake/**'
     - 'sherpa-ncnn/csrc/*'
+    - 'toolchains/arm-linux-gnueabihf.toolchain.cmake'
   pull_request:
     branches:
       - master
@@ -18,6 +19,7 @@ on:
     - 'CMakeLists.txt'
     - 'cmake/**'
     - 'sherpa-ncnn/csrc/*'
+    - 'toolchains/arm-linux-gnueabihf.toolchain.cmake'
 
 concurrency:
   group: arm-linux-gnueabihf-${{ github.ref }}
@@ -113,6 +115,7 @@ jobs:
           ./build-arm-linux-gnueabihf.sh
 
           ls -lh build-arm-linux-gnueabihf/bin
+          file build-arm-linux-gnueabihf/sherpa-ncnn
 
       - name: Run tests
         shell: bash

+ 5 - 0
.github/workflows/linux-macos-windows.yaml

@@ -62,6 +62,9 @@ jobs:
           cd build
           make -j2
 
+          ls -lh bin/sherpa-ncnn
+          file bin/sherpa-ncnn
+
           ln -s $PWD/../sherpa-ncnn-2022-09-05/bar .
           ln -s $PWD/../sherpa-ncnn-2022-09-05/test_wavs .
           ln -s $PWD/../sherpa-ncnn-2022-09-05/tokens.txt .
@@ -80,6 +83,8 @@ jobs:
           ln -s $PWD/../sherpa-ncnn-2022-09-05/test_wavs .
           ln -s $PWD/../sherpa-ncnn-2022-09-05/tokens.txt .
 
+          ls -lh ./bin/Debug/sherpa-ncnn.exe
+
           ./bin/Debug/sherpa-ncnn.exe ./test_wavs/1089-134686-0001.wav 2
           ./bin/Debug/sherpa-ncnn.exe ./test_wavs/1221-135766-0001.wav 2
           ./bin/Debug/sherpa-ncnn.exe ./test_wavs/1221-135766-0002.wav 2

+ 10 - 0
build-aarch64-linux-gnu.sh

@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+set -x
+
+dir=build-aarch64-linux-gnu
+mkdir -p $dir
+cd $dir
+cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
+make VERBOSE=1 -j4
+make install

+ 13 - 0
toolchains/README.md

@@ -9,3 +9,16 @@ tar xvf /path/to/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
 
 export PATH=/ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH
 ```
+
+
+# gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
+
+Go to <https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/>
+
+```bash
+wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
+
+tar xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /ceph-fj/fangjun/software
+
+export PATH=/ceph-fj/fangjun/software/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
+```

+ 18 - 0
toolchains/aarch64-linux-gnu.toolchain.cmake

@@ -0,0 +1,18 @@
+# Copied from https://github.com/Tencent/ncnn/blob/master/toolchains/aarch64-linux-gnu.toolchain.cmake
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
+set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(CMAKE_C_FLAGS "-march=armv8-a")
+set(CMAKE_CXX_FLAGS "-march=armv8-a")
+
+# cache flags
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")