#!/bin/bash # 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 # Build e2e test artifacts using a host tools directory. # # The required IREE_HOST_BIN_DIR environment variable indicates the location # of the precompiled IREE binaries. The IREE_BENCHMARK_PRESETS environment # variable can be set to build required artifacts for the comma-separated # benchmark presets. By default `iree-benchmark-suites` is built for sanity # check and e2e model testing. It can be disabled with the environment variable # `IREE_BUILD_DEFAULT_BENCHMARK_SUITES=0`. # # Designed for CI, but can be run locally. The desired build directory can be # passed as the first argument. Otherwise, it uses the environment variable # IREE_BUILD_E2E_TEST_ARTIFACTS_DIR, defaulting to "build-e2e-test-artifacts". # It reuses the build directory if it already exists. Expects to be run from the # root of the IREE repository. set -xeuo pipefail BUILD_DIR="${1:-${IREE_BUILD_E2E_TEST_ARTIFACTS_DIR:-build-e2e-test-artifacts}}" IREE_HOST_BIN_DIR="$(realpath ${IREE_HOST_BIN_DIR})" BENCHMARK_PRESETS="${IREE_BENCHMARK_PRESETS:-}" BUILD_DEFAULT_BENCHMARK_SUITES="${IREE_BUILD_DEFAULT_BENCHMARK_SUITES:-1}" SHARD_COUNT="${IREE_SHARD_COUNT:-default=1}" source build_tools/cmake/setup_build.sh source build_tools/scripts/setup_tf_python.sh declare -a BUILD_TARGETS if (( "${BUILD_DEFAULT_BENCHMARK_SUITES}" == 1 )); then BUILD_TARGETS+=("iree-benchmark-suites") fi # Separate the presets into the execution and compilation benchmark presets to # export different configs with export_benchmark_config.py. COMPILATION_PRESETS="" EXECUTION_PRESETS="" if [[ -n "${BENCHMARK_PRESETS}" ]]; then IFS=, read -r -a PRESET_ARRAY <<< "${BENCHMARK_PRESETS}" for PRESET in "${PRESET_ARRAY[@]}"; do case "${PRESET}" in comp-stats) BUILD_TARGETS+=(iree-benchmark-suites-comp-stats) COMPILATION_PRESETS="${COMPILATION_PRESETS},${PRESET}" ;; comp-stats-large) BUILD_TARGETS+=(iree-benchmark-suites-comp-stats-large) COMPILATION_PRESETS="${COMPILATION_PRESETS},${PRESET}" ;; *-large) BUILD_TARGETS+=(iree-benchmark-suites-large) EXECUTION_PRESETS="${EXECUTION_PRESETS},${PRESET}" ;; *) # Build target of the default preset has been added above. EXECUTION_PRESETS="${EXECUTION_PRESETS},${PRESET}" ;; esac done COMPILATION_PRESETS="${COMPILATION_PRESETS#,}" EXECUTION_PRESETS="${EXECUTION_PRESETS#,}" fi if (( "${#BUILD_TARGETS[@]}" == 0 )); then echo "No target to build." exit 1 fi echo "Configuring to build e2e test artifacts" "${CMAKE_BIN}" -B "${BUILD_DIR}" \ -G Ninja \ -DPython3_EXECUTABLE="${IREE_PYTHON3_EXECUTABLE}" \ -DPYTHON_EXECUTABLE="${IREE_PYTHON3_EXECUTABLE}" \ -DIREE_HOST_BIN_DIR="${IREE_HOST_BIN_DIR}" \ -DIREE_BUILD_E2E_TEST_ARTIFACTS=ON \ -DIREE_BUILD_COMPILER=OFF \ -DIREE_BUILD_SAMPLES=OFF \ -DIREE_BUILD_TESTS=OFF echo "Building e2e test artifacts" "${CMAKE_BIN}" \ --build "${BUILD_DIR}" \ --target "${BUILD_TARGETS[@]}" \ -- -k 0 E2E_TEST_ARTIFACTS_DIR="${BUILD_DIR}/e2e_test_artifacts" COMPILATION_CONFIG="${E2E_TEST_ARTIFACTS_DIR}/compilation-benchmark-config.json" EXECUTION_CONFIG="${E2E_TEST_ARTIFACTS_DIR}/execution-benchmark-config.json" FLAG_DUMP="${E2E_TEST_ARTIFACTS_DIR}/benchmark-flag-dump.txt" ./build_tools/benchmarks/export_benchmark_config.py \ compilation \ --benchmark_presets="${COMPILATION_PRESETS}" \ --output="${COMPILATION_CONFIG}" ./build_tools/benchmarks/export_benchmark_config.py \ execution \ --benchmark_presets="${EXECUTION_PRESETS}" \ --output="${EXECUTION_CONFIG}" \ --shard_count="${SHARD_COUNT}" ./build_tools/benchmarks/benchmark_helper.py dump-cmds \ --execution_benchmark_config="${EXECUTION_CONFIG}" \ --compilation_benchmark_config="${COMPILATION_CONFIG}" \ > "${FLAG_DUMP}"