#!/usr/bin/env bash

set -e

PROGNAME="$(basename "${0}")"
MONOREPO_ROOT="$(realpath $(dirname "${PROGNAME}"))"
function usage() {
cat <<EOF
Usage:
${PROGNAME} [-h|--help] <baseline-build> <candidate-build> benchmarks... [-- gbench-args...]

Compare the given benchmarks between the baseline and the candidate build directories.

This requires those benchmarks to have already been generated in both build directories.

<baseline-build>     The path to the build directory considered the baseline.
<candidate-build>    The path to the build directory considered the candidate.
benchmarks...        Paths of the benchmarks to compare. Those paths are relative to '<monorepo-root>'.
[-- gbench-args...]  Any arguments provided after '--' will be passed as-is to GoogleBenchmark's compare.py tool.

Example
=======
$ libcxx-lit build1/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
$ libcxx-lit build2/ -sv libcxx/test/benchmarks/algorithms/for_each.bench.cpp
$ ${PROGNAME} build1/ build2/ libcxx/test/benchmarks/algorithms/for_each.bench.cpp
EOF
}

if [[ "${1}" == "-h" || "${1}" == "--help" ]]; then
    usage
    exit 0
fi

if [[ $# -lt 1 ]]; then
    usage
    exit 1
fi

baseline="${1}"
candidate="${2}"
shift; shift

GBENCH="${MONOREPO_ROOT}/third-party/benchmark"

python3 -m venv /tmp/libcxx-compare-benchmarks-venv
source /tmp/libcxx-compare-benchmarks-venv/bin/activate
pip3 install -r ${GBENCH}/tools/requirements.txt

benchmarks=""
while [[ $# -gt 0 ]]; do
    if [[ "${1}" == "--" ]]; then
        shift
        break
    fi
    benchmarks+=" ${1}"
    shift
done

for benchmark in ${benchmarks}; do
    base="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${baseline} ${benchmark})"
    cand="$(${MONOREPO_ROOT}/libcxx/utils/libcxx-benchmark-json ${candidate} ${benchmark})"

    if [[ ! -e "${base}" ]]; then
        echo "Benchmark ${benchmark} does not exist in the baseline"
        continue
    fi
    if [[ ! -e "${cand}" ]]; then
        echo "Benchmark ${benchmark} does not exist in the candidate"
        continue
    fi

    "${GBENCH}/tools/compare.py" benchmarks "${base}" "${cand}" ${@}
done
