From eb7e92a50ef46aab1f082ee0db19568f1a6df191 Mon Sep 17 00:00:00 2001 From: nihui Date: Wed, 25 Dec 2024 16:09:40 +0800 Subject: [PATCH] add riscv spacemit x60 ci (#5852) --- .github/workflows/linux-riscv64.yml | 60 +++++++++++++++++++++++++++-- toolchains/k1.llvm.toolchain.cmake | 40 +++++++++++++++++++ toolchains/k1.toolchain.cmake | 40 +++++++++++++++++++ 3 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 toolchains/k1.llvm.toolchain.cmake create mode 100644 toolchains/k1.toolchain.cmake diff --git a/.github/workflows/linux-riscv64.yml b/.github/workflows/linux-riscv64.yml index 2cf1cc9cfef..e69fb93a90e 100644 --- a/.github/workflows/linux-riscv64.yml +++ b/.github/workflows/linux-riscv64.yml @@ -96,13 +96,19 @@ jobs: steps: - uses: actions/checkout@v4 - - name: configure + - name: build run: | export RISCV_ROOT_PATH=/data/action/osd/Xuantie-900-gcc-linux-6.6.0-glibc-x86_64-V3.0.1 mkdir build && cd build - cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/${{ matrix.cpu }}-v301.toolchain.cmake -DCMAKE_BUILD_TYPE=release -DNCNN_OPENMP=${{ matrix.OPENMP }} -DNCNN_THREADS=${{ matrix.OPENMP }} -DNCNN_RUNTIME_CPU=OFF -DNCNN_RVV=${{ matrix.RVV }} -DNCNN_XTHEADVECTOR=${{ matrix.XTHEADVECTOR }} -DNCNN_ZFH=${{ matrix.ZFH }} -DNCNN_ZVFH=${{ matrix.ZVFH }} -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_BUILD_TESTS=ON .. - - name: build - run: cmake --build build -j 8 + cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/${{ matrix.cpu }}-v301.toolchain.cmake -DCMAKE_BUILD_TYPE=release \ + -DNCNN_OPENMP=${{ matrix.OPENMP }} -DNCNN_THREADS=${{ matrix.OPENMP }} \ + -DNCNN_RUNTIME_CPU=OFF \ + -DNCNN_RVV=${{ matrix.RVV }} \ + -DNCNN_XTHEADVECTOR=${{ matrix.XTHEADVECTOR }} \ + -DNCNN_ZFH=${{ matrix.ZFH }} \ + -DNCNN_ZVFH=${{ matrix.ZVFH }} \ + -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_BUILD_TESTS=ON .. + cmake --build . -j 8 - name: test run: | @@ -110,6 +116,52 @@ jobs: cd build TESTS_EXECUTABLE_LOADER=qemu-riscv64 TESTS_EXECUTABLE_LOADER_ARGUMENTS="-cpu;${{ matrix.QEMU_CPU }}" ctest --output-on-failure -j 8 + spacemit: + name: spacemit-${{ matrix.cpu }} + runs-on: [self-hosted, linux, ubuntu] + strategy: + fail-fast: false + matrix: + include: + - { cpu: x60, QEMU_CPU: rv64, OPENMP: ON, RVV: ON, XTHEADVECTOR: OFF, ZFH: ON, ZVFH: ON } + + steps: + - uses: actions/checkout@v4 + + - name: build-gcc + run: | + export RISCV_ROOT_PATH=/data/action/osd/spacemit-toolchain-linux-glibc-x86_64-v1.0.5 + mkdir build-gcc && cd build-gcc + cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/k1.toolchain.cmake -DCMAKE_BUILD_TYPE=release \ + -DNCNN_OPENMP=${{ matrix.OPENMP }} -DNCNN_THREADS=${{ matrix.OPENMP }} \ + -DNCNN_RUNTIME_CPU=OFF \ + -DNCNN_RVV=${{ matrix.RVV }} \ + -DNCNN_XTHEADVECTOR=${{ matrix.XTHEADVECTOR }} \ + -DNCNN_ZFH=${{ matrix.ZFH }} \ + -DNCNN_ZVFH=${{ matrix.ZVFH }} \ + -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_BUILD_TESTS=ON .. + cmake --build . -j 8 + + - name: build-llvm + run: | + export RISCV_ROOT_PATH=/data/action/osd/spacemit-toolchain-linux-glibc-x86_64-v1.0.5 + mkdir build-llvm && cd build-llvm + cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/k1.llvm.toolchain.cmake -DCMAKE_BUILD_TYPE=release \ + -DNCNN_OPENMP=${{ matrix.OPENMP }} -DNCNN_THREADS=${{ matrix.OPENMP }} \ + -DNCNN_RUNTIME_CPU=OFF \ + -DNCNN_RVV=${{ matrix.RVV }} \ + -DNCNN_XTHEADVECTOR=${{ matrix.XTHEADVECTOR }} \ + -DNCNN_ZFH=${{ matrix.ZFH }} \ + -DNCNN_ZVFH=${{ matrix.ZVFH }} \ + -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON -DNCNN_BUILD_TESTS=ON .. + cmake --build . -j 8 + + # - name: test-gcc + # run: | + # export PATH=/data/action/osd/spacemit-ai-sdk.v1.1.0/spacemit-qemu/bin:$PATH + # cd build-gcc + # TESTS_EXECUTABLE_LOADER=qemu-riscv64 TESTS_EXECUTABLE_LOADER_ARGUMENTS="-cpu;${{ matrix.QEMU_CPU }}" ctest --output-on-failure -j 8 + gcc-rvv: runs-on: [self-hosted, linux, ubuntu] steps: diff --git a/toolchains/k1.llvm.toolchain.cmake b/toolchains/k1.llvm.toolchain.cmake new file mode 100644 index 00000000000..befc200ab6a --- /dev/null +++ b/toolchains/k1.llvm.toolchain.cmake @@ -0,0 +1,40 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +if(DEFINED ENV{RISCV_ROOT_PATH}) + file(TO_CMAKE_PATH $ENV{RISCV_ROOT_PATH} RISCV_ROOT_PATH) +else() + message(FATAL_ERROR "RISCV_ROOT_PATH env must be defined") +endif() + +set(RISCV_ROOT_PATH ${RISCV_ROOT_PATH} CACHE STRING "root path to riscv toolchain") + +set(CMAKE_C_COMPILER "${RISCV_ROOT_PATH}/bin/clang") +set(CMAKE_CXX_COMPILER "${RISCV_ROOT_PATH}/bin/clang++") +set(CMAKE_SYSROOT "${RISCV_ROOT_PATH}/sysroot") + +set(CMAKE_C_COMPILER_TARGET "riscv64-unknown-linux-gnu") +set(CMAKE_CXX_COMPILER_TARGET "riscv64-unknown-linux-gnu") + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + +set(CMAKE_C_FLAGS "-march=rv64gc_zba_zbb_zbc_zbs_zicbop -mabi=lp64d -mtune=spacemit-x60 -static") +set(CMAKE_CXX_FLAGS "-march=rv64gc_zba_zbb_zbc_zbs_zicbop -mabi=lp64d -mtune=spacemit-x60 -static") + +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") + +# export RISCV_ROOT_PATH=/home/nihui/osd/spacemit-toolchain-linux-glibc-x86_64-v1.0.5 +# cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/k1.llvm.toolchain.cmake -DCMAKE_BUILD_TYPE=release -DNCNN_BUILD_TESTS=ON -DNCNN_OPENMP=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_RVV=ON -DNCNN_XTHEADVECTOR=OFF -DNCNN_ZFH=ON -DNCNN_ZVFH=ON -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON .. diff --git a/toolchains/k1.toolchain.cmake b/toolchains/k1.toolchain.cmake new file mode 100644 index 00000000000..34832c56777 --- /dev/null +++ b/toolchains/k1.toolchain.cmake @@ -0,0 +1,40 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +if(DEFINED ENV{RISCV_ROOT_PATH}) + file(TO_CMAKE_PATH $ENV{RISCV_ROOT_PATH} RISCV_ROOT_PATH) +else() + message(FATAL_ERROR "RISCV_ROOT_PATH env must be defined") +endif() + +set(RISCV_ROOT_PATH ${RISCV_ROOT_PATH} CACHE STRING "root path to riscv toolchain") + +set(CMAKE_C_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-g++") + +set(CMAKE_FIND_ROOT_PATH "${RISCV_ROOT_PATH}/riscv64-unknown-linux-gnu") + +set(CMAKE_SYSROOT "${RISCV_ROOT_PATH}/sysroot") + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + +set(CMAKE_C_FLAGS "-march=rv64gc_zba_zbb_zbc_zbs_zicbop -mabi=lp64d -mtune=spacemit-x60 -static") +set(CMAKE_CXX_FLAGS "-march=rv64gc_zba_zbb_zbc_zbs_zicbop -mabi=lp64d -mtune=spacemit-x60 -static") + +# cache flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") + +# export RISCV_ROOT_PATH=/home/nihui/osd/spacemit-toolchain-linux-glibc-x86_64-v1.0.5 +# cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/k1.toolchain.cmake -DCMAKE_BUILD_TYPE=release -DNCNN_BUILD_TESTS=ON -DNCNN_OPENMP=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_RVV=ON -DNCNN_XTHEADVECTOR=OFF -DNCNN_ZFH=ON -DNCNN_ZVFH=ON -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON ..