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, RISCV64]

    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)

  # debian-13-riscv64-spacemit-ime-native: # Bianbu 2.2
  #   runs-on: [self-hosted, RISCV64]

  #   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
  #         sudo apt-get upgrade binutils -y

  #     - 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 \
  #           -DGGML_RVV=ON \
  #           -DGGML_RV_ZFH=ON \
  #           -DGGML_RV_ZICBOP=ON \
  #           -DGGML_CPU_RISCV64_SPACEMIT=ON \
  #           -DRISCV64_SPACEMIT_IME_SPEC=RISCV64_SPACEMIT_IME1

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