name: CI (riscv) on: workflow_dispatch: # allows manual triggering push: branches: - master paths: [ '.github/workflows/build-riscv.yml', '**/CMakeLists.txt', '**/.cmake', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp' ] pull_request: types: [opened, synchronize, reopened] paths: [ '.github/workflows/build-riscv.yml', 'ggml/src/ggml-cpu/arch/riscv/**' ] concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true env: GGML_NLOOP: 3 GGML_N_THREADS: 1 LLAMA_LOG_COLORS: 1 LLAMA_LOG_PREFIX: 1 LLAMA_LOG_TIMESTAMPS: 1 jobs: ubuntu-riscv64-native-sanitizer: runs-on: ubuntu-24.04-riscv continue-on-error: true strategy: matrix: sanitizer: [ADDRESS, THREAD, UNDEFINED] build_type: [Debug] steps: - name: Install dependencies run: | sudo apt-get update # Install necessary packages sudo apt-get install -y libatomic1 libtsan2 gcc-14 g++-14 cmake build-essential wget ccache git-lfs # Set gcc-14 and g++-14 as the default compilers sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100 sudo ln -sf /usr/bin/gcc-14 /usr/bin/gcc sudo ln -sf /usr/bin/g++-14 /usr/bin/g++ if ! which rustc; then # Install Rust stable version sudo apt-get install -y rustup rustup install stable rustup default stable fi git lfs install - name: GCC version check run: | gcc --version g++ --version - name: Clone id: checkout uses: actions/checkout@v6 - name: Configure sccache uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | core.exportVariable('SCCACHE_GHA_ENABLED', 'on'); core.exportVariable('ACTIONS_RESULTS_URL', process.env.ACTIONS_RESULTS_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); core.exportVariable('ACTIONS_CACHE_SERVICE_V2', 'on'); // Force the github action v2 - name: Build id: cmake_build if: ${{ matrix.sanitizer != 'THREAD' }} run: | cmake -B build \ -DLLAMA_OPENSSL=OFF \ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ -DGGML_OPENMP=ON \ -DLLAMA_BUILD_EXAMPLES=ON \ -DLLAMA_BUILD_TOOLS=ON \ -DLLAMA_BUILD_TESTS=OFF \ -DCMAKE_C_COMPILER_LAUNCHER=sccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=sccache \ -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \ -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 cmake --build build --config ${{ matrix.build_type }} -j $(nproc) - name: Build (no OpenMP) id: cmake_build_no_openmp if: ${{ matrix.sanitizer == 'THREAD' }} run: | cmake -B build \ -DLLAMA_OPENSSL=OFF \ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ -DGGML_OPENMP=OFF \ -DLLAMA_BUILD_EXAMPLES=ON \ -DLLAMA_BUILD_TOOLS=ON \ -DLLAMA_BUILD_TESTS=OFF \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \ -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 cmake --build build --config ${{ matrix.build_type }} -j $(nproc) - name: Test id: cmake_test run: | cd build ctest -L main --verbose --timeout 900 - name: Print sccache stats if: always() run: sccache --show-adv-stats