#!/usr/bin/env bash

set -xe

BORINGSSL_SRC_DIR=$1
BORINGSSL_BUILD_DIR=$2
BORINGSSL_OUTPUT_DIR=$3
BORINGSSL_PREFIX=$4
BORINGSSL_CMAKE_EXE="$5"
BORINGSSL_CMAKE_GENERATOR="$6"
BORINGSSL_CMAKE_OPTIONS="$7"
BORINGSSL_LIB_DIR=$BORINGSSL_OUTPUT_DIR/lib
BORINGSSL_INCLUDE_DIR=$BORINGSSL_OUTPUT_DIR/include

cd $BORINGSSL_SRC_DIR

echo "Starting initial build phase."
$BORINGSSL_CMAKE_EXE \
    -G"${BORINGSSL_CMAKE_GENERATOR}" \
    -S$BORINGSSL_SRC_DIR \
    -B$BORINGSSL_BUILD_DIR \
    ${BORINGSSL_CMAKE_OPTIONS}
$BORINGSSL_CMAKE_EXE --build $BORINGSSL_BUILD_DIR --verbose --target crypto ssl

cd $BORINGSSL_BUILD_DIR
[ -f ssl/libssl.a ] || { echo "Failed to build libssl.a" ; exit 1 ; }
[ -f crypto/libcrypto.a ] || { echo "Failed to build libcrypto.a" ; exit 1 ; }

if [ -n "$BORINGSSL_PREFIX" ]; then
    cd $BORINGSSL_SRC_DIR/util
    go run read_symbols.go $BORINGSSL_BUILD_DIR/ssl/libssl.a > $BORINGSSL_OUTPUT_DIR/symbols.txt
    go run read_symbols.go $BORINGSSL_BUILD_DIR/crypto/libcrypto.a >> $BORINGSSL_OUTPUT_DIR/symbols.txt

    rm -rf $BORINGSSL_BUILD_DIR

    echo "Starting build phase with symbol prefixing."
    $BORINGSSL_CMAKE_EXE \
        -G"${BORINGSSL_CMAKE_GENERATOR}" \
        -S$BORINGSSL_SRC_DIR \
        -B$BORINGSSL_BUILD_DIR \
        -DBORINGSSL_PREFIX=$BORINGSSL_PREFIX \
        -DBORINGSSL_PREFIX_SYMBOLS=$BORINGSSL_OUTPUT_DIR/symbols.txt \
        ${BORINGSSL_CMAKE_OPTIONS}
    $BORINGSSL_CMAKE_EXE --build $BORINGSSL_BUILD_DIR --verbose --target crypto ssl
    cd $BORINGSSL_BUILD_DIR
    [ -f symbol_prefix_include/boringssl_prefix_symbols.h ] || { echo "Failed to build boringssl_prefix_symbols.h" ; exit 1 ; }

    cp symbol_prefix_include/boringssl_prefix_symbols.h $BORINGSSL_INCLUDE_DIR
fi

cp ssl/libssl.a $BORINGSSL_LIB_DIR
cp crypto/libcrypto.a $BORINGSSL_LIB_DIR
cp -r $BORINGSSL_SRC_DIR/include/openssl $BORINGSSL_INCLUDE_DIR

echo "Done.  Libs saved in: $BORINGSSL_LIB_DIR, headers saved in: $BORINGSSL_INCLUDE_DIR"
