# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# Workflow for building benchmark tools.
# It is designed to be called from a parent workflow.
# The concurrency of this workflow is controlled by the caller's job.

name: Build Benchmark Tools

on:
  workflow_call:
    inputs:
      runner-group:
        required: true
        type: string
      runner-env:
        required: true
        type: string
      install-dir:
        required: true
        type: string
      install-dir-archive:
        required: true
        type: string
      install-dir-gcs-artifact:
        required: true
        type: string
    outputs:
      benchmark-tools-gcs-artifact-dir:
        description: |
          GCS path to benchmark tools archive.
        value: ${{ jobs.build_benchmark_tools.outputs.benchmark-tools-gcs-artifact-dir }}

permissions:
  contents: read

env:
  # This duplicates the variable from benchmark.yml. The variable needs to be in env
  # instead of the outputs of setup because it contains the run attempt and we
  # want that to be the current attempt, not whatever attempt the setup step
  # last ran in. It therefore can't be passed in via inputs because the env
  # context isn't available there.
  GCS_DIR: gs://iree-github-actions-${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}-artifacts/${{ github.run_id }}/${{ github.run_attempt }}

jobs:
  build_benchmark_tools:
    runs-on:
      - self-hosted # must come first
      - runner-group=${{ inputs.runner-group }}
      - environment=${{ inputs.runner-env }}
      - cpu
      - os-family=Linux
    outputs:
      # We can't collect all outputs from the matrix jobs due to Github's
      # limitation (https://github.com/orgs/community/discussions/17245).
      # Therefore, the output is the GCS directory that stores all benchmark
      # tools archives. The following jobs need to construct the archive names
      # by themselves and combine with path of GCS directory here to fetch the
      # archives.
      benchmark-tools-gcs-artifact-dir: ${{ steps.upload.outputs.benchmark-tools-gcs-artifact-dir }}
    strategy:
      matrix:
        target:
          - platform: "linux"
            arch: "x86_64"
            docker_image: "gcr.io/iree-oss/base-bleeding-edge@sha256:cf2e78194e64fd0166f4141317366261d7a62432b72e9a324cb8c2ff4e1a515a"
            # Builds tools on the host and assumes the builder is Linux x86_64.
            build_script: "./build_tools/cmake/build_runtime.sh"
          - platform: "linux"
            arch: "riscv_64"
            docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
            build_script: "./build_tools/cmake/build_riscv.sh"
          - platform: "android"
            arch: "armv8.2-a"
            docker_image: "gcr.io/iree-oss/android@sha256:66b92a1c920588a73d03316f26025407ea754bab93e8f9bfe40dbf6ed5fe6c7e"
            build_script: "./build_tools/cmake/build_android.sh"
    env:
      PLATFORM: ${{ matrix.target.platform }}
      ARCH: ${{ matrix.target.arch }}
      DOCKER_IMAGE: ${{ matrix.target.docker_image }}
      BUILD_SCRIPT: ${{ matrix.target.build_script }}
      BUILD_TOOLS_DIR: ${{ matrix.target.platform }}-${{ matrix.target.arch }}-benchmark-tools-dir
      INSTALL_DIR: ${{ inputs.install-dir }}
      INSTALL_DIR_ARCHIVE: ${{ inputs.install-dir-archive }}
      INSTALL_DIR_GCS_ARTIFACT: ${{ inputs.install-dir-gcs-artifact }}
    steps:
      - name: "Checking out repository"
        uses: actions/checkout@v4.1.7
      - name: "Checking out runtime submodules"
        run: ./build_tools/scripts/git/update_runtime_submodules.sh
      - name: "Downloading install dir archive"
        run: gcloud storage cp "${INSTALL_DIR_GCS_ARTIFACT}" "${INSTALL_DIR_ARCHIVE}"
      - name: "Extracting install directory"
        run: tar -xf "${INSTALL_DIR_ARCHIVE}"
      - name: "Compiling the benchmark tools"
        id: build
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_TARGET_PLATFORM=${PLATFORM}" \
            --env "IREE_TARGET_ARCH=${ARCH}" \
            --env "BUILD_PRESET=benchmark" \
            --env "IREE_HOST_BIN_DIR=${INSTALL_DIR}/bin" \
            "${DOCKER_IMAGE}" "${BUILD_SCRIPT}" "${BUILD_TOOLS_DIR}/build"
      - name: "Compiling the benchmark tools with tracing"
        id: build-with-tracing
        run: |
          ./build_tools/github_actions/docker_run.sh \
            --env "IREE_TARGET_PLATFORM=${PLATFORM}" \
            --env "IREE_TARGET_ARCH=${ARCH}" \
            --env "BUILD_PRESET=benchmark-with-tracing" \
            --env "IREE_HOST_BIN_DIR=${INSTALL_DIR}/bin" \
            "${DOCKER_IMAGE}" "${BUILD_SCRIPT}" "${BUILD_TOOLS_DIR}/build-traced"
      - name: "Creating the benchmark tools archive"
        id: archive
        env:
          BENCHMARK_TOOLS_ARCHIVE: ${{ env.PLATFORM }}-${{ env.ARCH }}-benchmark-tools.tar
        run: |
          tar -cf "${BENCHMARK_TOOLS_ARCHIVE}" \
            "${BUILD_TOOLS_DIR}"/*/tools/iree-benchmark-module \
            "${BUILD_TOOLS_DIR}"/*/tools/build_config.txt
          echo "benchmark-tools-archive=${BENCHMARK_TOOLS_ARCHIVE}" >> "${GITHUB_OUTPUT}"
      - name: "Uploading the benchmark tools archive"
        id: upload
        env:
          BENCHMARK_TOOLS_ARCHIVE: ${{ steps.archive.outputs.benchmark-tools-archive }}
          BENCHMARK_TOOLS_GCS_ARTIFACT_DIR: ${{ env.GCS_DIR }}/benchmark-tools
        run: |
          gcloud storage cp "${BENCHMARK_TOOLS_ARCHIVE}" "${BENCHMARK_TOOLS_GCS_ARTIFACT_DIR}/"
          echo "benchmark-tools-gcs-artifact-dir=${BENCHMARK_TOOLS_GCS_ARTIFACT_DIR}" >> "${GITHUB_OUTPUT}"
