name: Build on RISCV Linux Machine by Cloud-V
on:
  pull_request:
  workflow_dispatch:
  workflow_call:

jobs:
  debian-13-riscv64-native: # Bianbu 2.2
    runs-on: self-hosted

    steps:
      - name: Install prerequisites
        run: |
          sudo apt-get update || true
          sudo apt-get install -y libatomic1
      - uses: actions/checkout@v4
      - name: Setup Riscv
        run: |
          sudo apt-get update || true
          sudo apt-get install -y --no-install-recommends \
                  build-essential \
                  gcc-14-riscv64-linux-gnu \
                  g++-14-riscv64-linux-gnu \
                  ccache \
                  cmake

      - name: Setup ccache
        run: |
          mkdir -p $HOME/.ccache
          ccache -M 5G -d $HOME/.ccache
          export CCACHE_LOGFILE=/home/runneruser/ccache_debug/ccache.log
          export CCACHE_DEBUGDIR="/home/runneruser/ccache_debug"
          echo "$GITHUB_WORKSPACE"
          echo "CCACHE_LOGFILE=$CCACHE_LOGFILE" >> $GITHUB_ENV
          echo "CCACHE_DEBUGDIR=$CCACHE_DEBUGDIR" >> $GITHUB_ENV
          echo "CCACHE_BASEDIR=$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV

      - name: Build
        run: |
          cmake -B build \
            -DLLAMA_CURL=OFF \
            -DCMAKE_BUILD_TYPE=Release \
            -DGGML_OPENMP=OFF \
            -DLLAMA_BUILD_EXAMPLES=ON \
            -DLLAMA_BUILD_TOOLS=ON \
            -DLLAMA_BUILD_TESTS=OFF \
            -DCMAKE_SYSTEM_NAME=Linux \
            -DCMAKE_SYSTEM_PROCESSOR=riscv64 \
            -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \
            -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 \
            -DCMAKE_C_COMPILER_LAUNCHER=ccache \
            -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
            -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
            -DCMAKE_FIND_ROOT_PATH=/usr/lib/riscv64-linux-gnu \
            -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
            -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
            -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH

          cmake --build build --config Release -j $(nproc)
