#!/bin/bash
set -e
set -o pipefail

# Build WebKit, run benchmarks, and spit out compressed PGO profiles

DisplayHelp() {
    echo "Usage: build-and-collect-pgo-profiles [ options ]"
    echo "  -h              Show this help message."
    echo "  -b <directory>  Base directory in which output files are stored. Default: /Volumes/WebKit/BenchmarkProfiles/."
    echo "  -a <app>        Path to Safari.app to generate profiles for. If not specified, the script will build WebKit."
    echo "  -d <directory>  Path to build directory. Use seperately from -a."
}

BASE="/Volumes/WebKit/BenchmarkProfiles/"

while getopts "b:a:d:h" flag; do
    case "${flag}" in
        b) BASE=${OPTARG};;
        a) APP=${OPTARG};;
        d) BUILD=${OPTARG};;
        h)
          DisplayHelp
          exit;;
    esac
done

echo "app: $APP"
echo "build: $BUILD"
echo "base: $BASE"

if [ ! -z $APP ] && [ ! -z $BUILD ] ; then
    echo "These flags (-a and -d) cannot be used together."
    DisplayHelp
    exit
fi

while true; do
    read -p "Have you read the source of this script, and do you understand that it is potentially destructive? [y/N]" yn
    case $yn in
        [Yy]* ) break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

echo "Using output directory: $BASE"

if [[ ! -d "$BASE" ]] ; then
    echo "$BASE is missing, aborting."
    DisplayHelp
    exit
fi

rm -rf "$BASE/*"

mkdir -p "$BASE/speedometer"
mkdir -p "$BASE/jetstream"
mkdir -p "$BASE/motionmark"
mkdir -p "$BASE/output"
mkdir -p "$BASE/Internal/WebKit/WebKitAdditions/Profiling/"

if [[ -z $APP ]] ; then
    cd Internal
    echo "Building WebKit..."
    rm -rf ../OpenSource/WebKitBuild
    make release WK_LTO_MODE=thin ENABLE_LLVM_PROFILE_GENERATION=ON
    cd ../
else
    if [[ ! -e "$APP" ]] ; then
        echo "$APP is missing, aborting."
        DisplayHelp
        exit
    fi
    echo "Using .app: $APP"
fi

jsargs=(
    --plan jetstream2
    --diagnose-directory="$BASE/jetstream"
    --generate-profiles
    --count 1
)

spargs=(
    --plan speedometer2
    --diagnose-directory="$BASE/speedometer"
    --generate-profiles
    --count 1
)

mmargs=(
    --plan motionmark1.1
    --diagnose-directory="$BASE/motionmark"
    --generate-profiles
    --count 1
)

if [[ -n $APP ]] ; then
   jsargs+=(--browser-path "$APP")
   spargs+=(--browser-path "$APP")
   mmargs+=(--browser-path "$APP")
else
   jsargs+=(--build-directory $BUILD)
   spargs+=(--build-directory $BUILD)
   mmargs+=(--build-directory $BUILD)
fi

SPTH='OpenSource/Tools/Scripts'

$SPTH/run-benchmark "${jsargs[@]}"
$SPTH/pgo-profile merge "$BASE/jetstream"

$SPTH/run-benchmark "${spargs[@]}"
$SPTH/pgo-profile merge "$BASE/speedometer"

$SPTH/run-benchmark "${mmargs[@]}"
$SPTH/pgo-profile merge "$BASE/motionmark"

rm *.result

$SPTH/pgo-profile combine --jetstream "$BASE/jetstream" --speedometer "$BASE/speedometer" --motionmark "$BASE/motionmark" --output "$BASE/output"

$SPTH/pgo-profile compress --input "$BASE/output" --output "$BASE/Internal/WebKit/WebKitAdditions/Profiling/"

echo "Done! Find your profiles in $BASE/Internal/WebKit/WebKitAdditions/Profiling/"
echo "To check these in, do: 'cp -r $BASE/Internal/ ../Internal/'"
