# Copyright The Amber Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -e  # Fail on error
set -x  # Display commands as run

BUILD_ROOT="$PWD"
SRC="$PWD/github/amber"
BUILD_TYPE="Release"

export ANDROID_NDK="$BUILD_ROOT/android-ndk-r25b"
ANDROID_STL="c++_static"
ANDROID_PLATFORM="android-24"
ANDROID_ABI="armeabi-v7a"

TOOLCHAIN_PATH="$ANDROID_NDK/build/cmake/android.toolchain.cmake"

# Disable git's "detected dubious ownership" error - kokoro checks out the repo with a different
# user, and we don't care about this warning.
git config --global --add safe.directory '*'

# removing the old version
echo y | sudo apt-get purge --auto-remove cmake

# Installing the 3.14.0 version.
#   Glslang requires 3.14.0
wget http://www.cmake.org/files/v3.18/cmake-3.18.6.tar.gz
tar -xvzf cmake-3.18.6.tar.gz
pushd cmake-3.18.6/
./configure
make
sudo make install
echo "$(date): $(cmake --version)"
popd

# Get NINJA.
wget -q https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
unzip -q ninja-linux.zip
export PATH="$PWD:$PATH"

# Get Android NDK.
wget -q https://dl.google.com/android/repository/android-ndk-r25b-linux.zip
unzip -q android-ndk-r25b-linux.zip
# ANDROID_NDK is set earlier.

cd "$SRC"
./tools/git-sync-deps

mkdir build && cd "$SRC/build"

# Invoke the build.
echo "$(date): Starting build..."
cmake -GNinja \
    "-DCMAKE_BUILD_TYPE=$BUILD_TYPE" \
    "-DANDROID_ABI=$ANDROID_ABI" \
    "-DANDROID_PLATFORM=$ANDROID_PLATFORM" \
    "-DANDROID_NDK=$ANDROID_NDK" \
    "-DANDROID_STL=$ANDROID_STL" \
    "-DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_PATH" \
     ..

echo "$(date): Build everything..."
ninja
echo "$(date): Build completed."
