name: Build relocatable cmake package
on:
  workflow_dispatch:
  workflow_call:

cache-mode: none
permissions:
  contents: read

jobs:
  linux:
    runs-on: [self-hosted, Linux, CPU]
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Build
        run: |
          PREFIX="$(pwd)"/inst
          cmake -S . -B build \
                -DCMAKE_PREFIX_PATH="$PREFIX" \
                -DLLAMA_OPENSSL=OFF \
                -DLLAMA_BUILD_TESTS=OFF \
                -DLLAMA_BUILD_TOOLS=OFF \
                -DLLAMA_BUILD_EXAMPLES=OFF \
                -DLLAMA_BUILD_APP=OFF \
                -DLLAMA_BUILD_IS_DEV=OFF \
                -DCMAKE_BUILD_TYPE=Release
          cmake --build build --config Release -j $(nproc)
          cmake --install build --prefix "$PREFIX" --config Release

          export LLAMA_CONFIG="$PREFIX"/lib/cmake/llama/llama-config.cmake
          build_commit=$(git rev-parse --short HEAD | xargs)
          build_number=$(git rev-list --count HEAD | xargs)

          major=$(grep -oE "set\(LLAMA_VERSION_MAJOR[[:space:]]+[0-9]+" CMakeLists.txt | grep -oE "[0-9]+$")
          minor=$(grep -oE "set\(LLAMA_VERSION_MINOR[[:space:]]+[0-9]+" CMakeLists.txt | grep -oE "[0-9]+$")
          patch=$(grep -oE "set\(LLAMA_VERSION_PATCH[[:space:]]+[0-9]+" CMakeLists.txt | grep -oE "[0-9]+$")
          build_version="$major.$minor.$patch"

          checks=("set\(LLAMA_VERSION[[:space:]]+$build_version\)"
                  "set\(LLAMA_BUILD_COMMIT[[:space:]]+$build_commit\)"
                  "set\(LLAMA_BUILD_NUMBER[[:space:]]+$build_number\)")

          for check in "${checks[@]}"; do
              if ! grep -qE "$check" "$LLAMA_CONFIG"; then
                  echo "Checking llama-config.cmake version... \"$check\" failed!"
                  exit 1
              fi
          done

          echo "Checking llama-config.cmake version... success."

          cd examples/simple-cmake-pkg
          cmake -S . -B build -DCMAKE_PREFIX_PATH="$PREFIX"/lib/cmake
          cmake --build build -j $(nproc)
