From 07c2cac0913a4bb2cdcc4feb3fd4185cd699dd47 Mon Sep 17 00:00:00 2001 From: nihui Date: Wed, 24 May 2023 17:09:11 +0800 Subject: [PATCH] update loongarch ci toolchain, add loongarch lsx coverage (#4747) --- .ci/test-coverage.yml | 85 +++++++++++++++++++ .../workflows/linux-loongarch64-cpu-gcc.yml | 61 +++++++------ 2 files changed, 115 insertions(+), 31 deletions(-) diff --git a/.ci/test-coverage.yml b/.ci/test-coverage.yml index 7350c7c68..a6bd2090c 100644 --- a/.ci/test-coverage.yml +++ b/.ci/test-coverage.yml @@ -815,3 +815,88 @@ jobs: lcov --list lcov.info - name: codecov-vlen256 run: ./codecov -t ${{settings.CODECOV_TOKEN.access_token}} -C ${{ ci.sha }} -B ${{ ci.head_ref }} -f build/lcov.info + + linux-gcc-loongarch64: + name: linux-gcc-loongarch64 + strategy: + matrix: + OPENMP: ['OFF', 'ON'] + + runs-on: + pool-name: docker + container: + image: bkci/ci:ubuntu + steps: + - name: checkout + checkout: self + with: + strategy: FRESH_CHECKOUT + enableSubmodule: false + enableGitLfs: false + + - name: install-deps + run: | + apt-get update + apt-get install -y lcov libcapstone4 libglib2.0-0 python3-venv + curl https://uploader.codecov.io/verification.gpg | gpg --no-default-keyring --keyring trustedkeys.gpg --import + curl -Os https://uploader.codecov.io/latest/linux/codecov + curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM + curl -Os https://uploader.codecov.io/latest/linux/codecov.SHA256SUM.sig + gpgv codecov.SHA256SUM.sig codecov.SHA256SUM + shasum -a 256 -c codecov.SHA256SUM + chmod +x codecov + wget https://github.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/8.0/loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz + tar -xf loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz + + - name: cache-qemu + id: cache-qemu + uses: cache@1.* + with: + cachePaths: qemu-install + cacheKey: qemu-loongarch64-install-20230524 + + - name: checkout-qemu + if: steps.cache-qemu.outputs.cacheHit != 'true' + checkout: https://github.com/qemu/qemu.git + with: + pullType: COMMIT_ID + refName: 1c12355b31046a6b35a4f50c85c4f01afb1bd728 + localPath: qemu + enableSubmodule: false + enableGitLfs: false + + - name: qemu + if: steps.cache-qemu.outputs.cacheHit != 'true' + run: | + echo 'deb-src http://mirrors.cloud.tencent.com/debian bullseye main' | tee -a /etc/apt/sources.list + echo 'deb-src http://mirrors.cloud.tencent.com/debian bullseye-updates main' | tee -a /etc/apt/sources.list + apt-get update + apt-get build-dep -y qemu + cd qemu + wget https://github.com/nihui/ncnn-assets/raw/master/qemu-patches/0001-linux-user-Expose-loongarch-lsx-isa-bit-in-get_elf_hwcap.patch + patch -p1 -i 0001-linux-user-Expose-loongarch-lsx-isa-bit-in-get_elf_hwcap.patch + ./configure --prefix=${{ci.workspace}}/qemu-install --target-list=loongarch64-linux-user --disable-system + make -j$(nproc) + make install + + - name: build + run: | + export LOONGARCH64_ROOT_PATH=${{ci.workspace}}/cross-tools + mkdir build && cd build + cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/loongarch64-unknown-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_COVERAGE=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_LSX=ON -DNCNN_OPENMP=${{matrix.OPENMP}} -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON .. + cmake --build . -j $(nproc) + - name: test + run: | + export PATH=${{ci.workspace}}/qemu-install/bin:$PATH + cd build + TESTS_EXECUTABLE_LOADER=qemu-loongarch64 TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;${{ci.workspace}}/cross-tools/target" ctest --output-on-failure -j $(nproc) + - name: lcov-collect + run: | + cd build + lcov --gcov-tool ${{ci.workspace}}/cross-tools/bin/loongarch64-unknown-linux-gnu-gcov -d ./src -c -o lcov.info + lcov -r lcov.info '/usr/*' -o lcov.info + lcov -r lcov.info '*/build/*' -o lcov.info + lcov -r lcov.info '*/cross-tools/*' -o lcov.info + lcov --list lcov.info + - name: codecov + run: ./codecov -t ${{settings.CODECOV_TOKEN.access_token}} -C ${{ ci.sha }} -B ${{ ci.head_ref }} -f build/lcov.info diff --git a/.github/workflows/linux-loongarch64-cpu-gcc.yml b/.github/workflows/linux-loongarch64-cpu-gcc.yml index fbdbee1dc..7cb710a12 100644 --- a/.github/workflows/linux-loongarch64-cpu-gcc.yml +++ b/.github/workflows/linux-loongarch64-cpu-gcc.yml @@ -37,42 +37,41 @@ jobs: steps: - uses: actions/checkout@v3 - - name: loongarch64-toolchain - run: | - wget https://github.com/loongson/build-tools/releases/download/2022.05.29/loongarch64-clfs-5.0-cross-tools-gcc-full.tar.xz - tar -xf loongarch64-clfs-5.0-cross-tools-gcc-full.tar.xz - wget https://github.com/loongson/build-tools/releases/download/2022.05.29/qemu-loongarch64 - chmod +x qemu-loongarch64 + # - name: cache-qemu + # id: cache-qemu + # uses: actions/cache@v3 + # with: + # path: qemu-install + # key: qemu-loongarch64-install-20230524 + # - name: checkout-qemu + # if: steps.cache-qemu.outputs.cache-hit != 'true' + # uses: actions/checkout@v3 + # with: + # repository: qemu/qemu + # path: qemu + # ref: 1c12355b31046a6b35a4f50c85c4f01afb1bd728 + # - name: qemu + # if: steps.cache-qemu.outputs.cache-hit != 'true' + # run: | + # cd qemu + # ./configure --prefix=$GITHUB_WORKSPACE/qemu-install --target-list=loongarch64-linux-user --disable-system + # make -j2 + # make install + + # - name: loongarch64-toolchain + # run: | + # wget https://github.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/8.0/loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz + # tar -xf loongarch64-clfs-8.0-cross-tools-gcc-full.tar.xz - - name: configure + - name: build run: | - export LOONGARCH64_ROOT_PATH=$GITHUB_WORKSPACE/cross-tools - export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/cross-tools/target/usr/lib64:$LD_LIBRARY_PATH + export LOONGARCH64_ROOT_PATH=/data/action/osd/cross-tools mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/loongarch64-unknown-linux-gnu.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON .. - - - name: build - run: cmake --build build -j 4 + cmake --build . -j 4 - name: test run: | - export PATH=$GITHUB_WORKSPACE:$PATH - export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/cross-tools/target/usr/lib64:$LD_LIBRARY_PATH + export PATH=/data/action/osd/qemu-loongson/qemu-install/bin:$PATH cd build - TESTS_EXECUTABLE_LOADER=qemu-loongarch64 TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;$GITHUB_WORKSPACE/cross-tools/target/usr" ctest --output-on-failure -j 4 - - linux-gcc-loongarch64-lsx: - runs-on: [self-hosted, linux, centos] - - steps: - - uses: actions/checkout@v3 - - - name: configure - run: | - export LOONGARCH64_ROOT_PATH=/data/action/osd/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1 - export LD_LIBRARY_PATH=/data/action/osd/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.1/sysroot/usr/lib64:$LD_LIBRARY_PATH - mkdir build && cd build - cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/loongarch64-linux-gnu.toolchain.cmake -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON .. - - - name: build - run: cmake --build build -j 4 + TESTS_EXECUTABLE_LOADER=qemu-loongarch64 TESTS_EXECUTABLE_LOADER_ARGUMENTS="-L;/data/action/osd/cross-tools/target" ctest --output-on-failure -j 4