#!/bin/bash
#
# Copyright (c) 2016-2020 The Brenwill Workshop Ltd.
#
# fetchDependencies - Retrieves the correct versions of all dependencies
#
# macOS usage: ./fetchDependencies [--ios] [--iosfat] [--tvos] [--tvosfat] [--macos] [--all] [--none]
#                                  [-v] [--debug] [--build-spirv-tools]
#                                  [--v-headers-root path] [--spirv-cross-root path] [--glslang-root path]
#
#      --ios
#              Build the external libraries for the iOS platform.
#
#      --iosfat
#              Build a single binary for each external library, each containing code
#              for both iOS and iOS Simulator platforms.
#
#      --tvos
#              Build the external libraries for the tvOS platform.
#
#      --tvosfat
#              Build a single binary for each external library, each containing code
#              for both tvOS and tvOS Simulator platforms.
#
#      --macos
#              Build the external libraries for the macOS platform.
#
#      --all
#              Equivalent to specifying [--iosfat --tvosfat --macos]. Results in thee
#              binaries for each external library: one for the iOS and iOS Simulator platforms,
#              one for the tvOS and tvOS Simulator platforms, and one for the macOS platform.
#
#      --none
#              Don't build the external libraries for any platform.
#
#      Multiple platform options may be specified. At least one platform option must be specified.
#
#      --debug
#              Build the external libraries in Debug mode, which may be useful when debugging
#              and tracing calls into those libraries.
#
#      --no-parallel-build
#              Build the external libraries serially instead of in parallel using background processes.
#
#      --glslang-root path
#              "path" specifies a directory path to a KhronosGroup/glslang repository.
#              This repository does need to be built and the build directory must be in the
#              specified directory. It should be built the same way this script builds it.
#
#      --build-spirv-tools
#              Build the full spirv-tools distribution. Normally this is not needed, because
#              MoltenVK includes a template of pre-generated SPIRV-Tools header files, which
#              is all that is needed. Avoiding the spirv-tools build saves significant time
#              during the running of this script, and is necessary during CI because Travis CI
#              cannot support the required use of Python3 by the spirv-tools build. This flag
#              is used by the packagePregenSpirvToolsHeaders script which regenerates the
#              spirv-tools header files and repackages the Templates/spirv-tools/build.zip
#              file when the spirv-tools library version is upgraded.
#
#      --spirv-cross-root path
#              "path" specifies a directory path to a KhronosGroup/SPIRV-Cross repository.
#              This repository does not have to be built.
#
#      -v      verbose output
#
#      --v-headers-root path
#              "path" specifies a directory path to a KhronosGroup/Vulkan-Headers repository.
#              This repository does not have to be built.
#

set -e

# ----------------- Functions -------------------

BLD_NONE=""
BLD_IOS=""
BLD_IOS_SIM=""
BLD_TVOS=""
BLD_TVOS_SIM=""
BLD_MACOS=""
BLD_SPECIFIED=""
XC_CONFIG="Release"
XC_BUILD_VERBOSITY="-quiet"
XC_USE_BCKGND="Y"
V_HEADERS_ROOT=""
SPIRV_CROSS_ROOT=""
GLSLANG_ROOT=""
BLD_SPV_TLS=""

while (( "$#" )); do
  case "$1" in
       --ios)
         BLD_IOS="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --iosfat)
         BLD_IOS="Y"
         BLD_IOS_SIM="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --tvos)
         BLD_TVOS="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --tvosfat)
         BLD_TVOS="Y"
         BLD_TVOS_SIM="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --macos)
         BLD_MACOS="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --all)
         BLD_IOS="Y"
         BLD_IOS_SIM="Y"
         BLD_TVOS="Y"
         BLD_TVOS_SIM="Y"
         BLD_MACOS="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --none)
         BLD_NONE="Y"
         BLD_SPECIFIED="Y"
         shift 1
         ;;
       --debug)
         XC_CONFIG="Debug"
         shift 1
         ;;
       --no-parallel-build)
         XC_USE_BCKGND=""
         shift 1
         ;;
       -v)
         XC_BUILD_VERBOSITY=""
         shift 1
         ;;
       --build-spirv-tools)
         BLD_SPV_TLS="Y"
         shift 1
         ;;
       --skip-spirv-tools-build)	#deprecated
         BLD_SPV_TLS=""
         shift 1
         ;;
       --v-headers-root)
         V_HEADERS_ROOT=$2
         shift 2
         ;;
       --spirv-cross-root)
         SPIRV_CROSS_ROOT=$2
         shift 2
         ;;
       --glslang-root)
         GLSLANG_ROOT=$2
         shift 2
         ;;
       -*|--*=)
         echo "Error: Unsupported option $1" >&2
         exit 1
         ;;
  esac
done

# Update a repository. If it exists, fetch it; if not, clone it.
# $1 repo name
# $2 repo url
# $3 repo revision (commit SHA)
function update_repo() {
	echo "$1 repo: $2"
	echo "$1 revision: $3"

	if [ -d $1 -a -d $1/.git ]; then
		cd $1
		git fetch --all
		git checkout --force $3
		cd -  > /dev/null
	else
		rm -rf $1
		git clone $2 $1
		cd $1
		git checkout $3
		cd -  > /dev/null
	fi
}

# Build a repository
# $1 repo name
function build_repo() {
	echo "Building $1"

	mkdir -p $1/build
	cd $1/build
	if type ninja >/dev/null 2>&1 ; then
		cmake -G Ninja -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=install ..
		ninja
	else
		cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=install ..
		make -j $(sysctl -n hw.activecpu)
	fi

	cd -  > /dev/null
}


# ----------------- Main -------------------

EXT_DIR=External
EXT_REV_DIR=../ExternalRevisions

echo
echo ========== Retrieving MoltenVK dependencies into ${EXT_DIR} ==========

mkdir -p ${EXT_DIR}
cd ${EXT_DIR}


# ----------------- Cereal -------------------

echo
echo ========== Cereal ==========
echo

REPO_NAME=cereal
REPO_URL="https://github.com/USCiLab/${REPO_NAME}.git"
REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}


# ----------------- Vulkan-Headers -------------------

echo
echo ========== Vulkan-Headers ==========
echo

# When MoltenVK is built by something that already has
# a copy of this repo, use it by creating a symlink.

REPO_NAME=Vulkan-Headers

if [ ! "$V_HEADERS_ROOT" = "" ]; then
	rm -rf ${REPO_NAME}
	ln -sfn ${V_HEADERS_ROOT} ${REPO_NAME}
else
	REPO_URL="https://github.com/KhronosGroup/${REPO_NAME}.git"
	REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

	update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
fi


# ----------------- SPIRV-Cross -------------------

echo
echo ========== SPIRV-Cross ==========
echo

# When MoltenVK is built by something that already has
# a copy of this repo, use it by creating a symlink.

REPO_NAME=SPIRV-Cross

if [ ! "$SPIRV_CROSS_ROOT" = "" ]; then
	rm -rf ${REPO_NAME}
	ln -sfn ${SPIRV_CROSS_ROOT} ${REPO_NAME}
else
	REPO_URL="https://github.com/KhronosGroup/${REPO_NAME}.git"
	REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

	update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
fi



# ----------------- glslang -------------------

echo
echo ========== glslang and SPIRV-Tools ==========
echo

# When MoltenVK is built by something that already has
# a copy of this repo, use it by creating a symlink.

REPO_NAME=glslang

if [ ! "$GLSLANG_ROOT" = "" ]; then
	rm -rf ${REPO_NAME}
	ln -sfn ${GLSLANG_ROOT} ${REPO_NAME}
else
	REPO_URL="https://github.com/KhronosGroup/${REPO_NAME}.git"
	REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

	update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}

	cd ${REPO_NAME}
	./update_glslang_sources.py
	rm -rf build
	./build_info.py .        \
		-i build_info.h.tmpl  \
		-o build/include/glslang/build_info.h
	cd -  > /dev/null
fi

# Build the embedded spirv-tools, or use option of pre-generated headers
SPV_TLS_DIR="${REPO_NAME}/External/spirv-tools"
if [ "$BLD_SPV_TLS" = "Y" ]; then
	build_repo "${SPV_TLS_DIR}"
else
	unzip -o -q -d "${SPV_TLS_DIR}" ../Templates/spirv-tools/build.zip
	rm -rf "${SPV_TLS_DIR}/__MACOSX"
fi



# ----------------- Vulkan-Tools -------------------

echo
echo ========== Vulkan-Tools ==========
echo

REPO_NAME=Vulkan-Tools
REPO_URL="https://github.com/KhronosGroup/${REPO_NAME}.git"
REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}


# ----------------- VulkanSamples -------------------

echo
echo ========== VulkanSamples ==========
echo

REPO_NAME=VulkanSamples
REPO_URL="https://github.com/LunarG/${REPO_NAME}.git"
REPO_REV=$(cat "${EXT_REV_DIR}/${REPO_NAME}_repo_revision")

update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}

# Generate dispatch files needed for Hologram demo
cd "${REPO_NAME}/Sample-Programs/Hologram"
./generate-dispatch-table HelpersDispatchTable.h
./generate-dispatch-table HelpersDispatchTable.cpp
cd -  > /dev/null


# ----------------- Cleanup -------------------

cd ..


# -------------- Build MoltenVK external library dependencies -----------------

# if no platform was specified, print usage message and exit
if [ "$BLD_SPECIFIED" = "" ]; then
	echo "ERROR: You did not specify a platform to build."
	echo "Include one or more of the following platform options:"
	echo "    --ios --iosfat --tvos --tvosfat --macos --all"
	echo "See the instructions in the fetchDependencies script for more info."
	exit 1
fi

echo
echo ========== Started building dependency libraries at `date +"%r"` ==========
echo Please be patient on first build

# Build an Xcode scheme for an OS and platform
# 1 - OS
# 2 - platform
function build_impl() {
	XC_OS=${1}
	XC_PLTFM=${2}

	XC_SCHEME="${EXT_DEPS}-${XC_OS}"
	XC_LCL_DD_PATH="${XC_DD_PATH}/Intermediates/${XC_OS}"
	XC_DEST="generic/platform=${XC_PLTFM}"

	echo Building external libraries for ${XC_PLTFM}

	xcodebuild 										\
		-project "${XC_PROJ}"						\
		-scheme "${XC_SCHEME}"						\
		-destination "${XC_DEST}"					\
		-configuration "${XC_CONFIG}"				\
		-derivedDataPath "${XC_LCL_DD_PATH}"		\
		${XC_BUILD_VERBOSITY}						\
		build

	echo Completed building external libraries for ${XC_PLTFM}
}

# Select whether or not to run the build in parallel.
# 1 - OS
# 2 - platform
function build() {
	if [ "$XC_USE_BCKGND" != "" ]; then
		build_impl ${1} ${2} &
	else
		build_impl ${1} ${2}
	fi
}

# Build a fat library for the OS containing code for the OS and its Simulator
# Builds serially to ensure both are built
# 1 - OS
function build_fat_impl() {
	XC_OS=${1}

	build_impl ${XC_OS} ${XC_OS}
	build_impl ${XC_OS} "${XC_OS} Simulator"
}

# Select whether or not to run the build in parallel.
# 1 - OS
function build_fat() {
	if [ "$XC_USE_BCKGND" != "" ]; then
		build_fat_impl ${1} &
	else
		build_fat_impl ${1}
	fi
}

EXT_DEPS=ExternalDependencies
XC_PROJ="${EXT_DEPS}.xcodeproj"
XC_DD_PATH="${EXT_DIR}/build"

# Structure build tasks by platform so they can be built in parallel per platform.
# Content for each platform must be built in series to avoid
if [ "$XC_USE_BCKGND" != "" ]; then
	trap "exit" INT TERM ERR
	trap "kill 0" EXIT
fi

if [ "$BLD_NONE" != "" ]; then
	echo Not building any platforms
fi

if [ "$BLD_MACOS" != "" ]; then
	build "macOS" "macOS"
fi

if [ "$BLD_IOS" != "" ]; then
	if [ "$BLD_IOS_SIM" != "" ]; then
		build_fat "iOS"
	else
		build "iOS" "iOS"
	fi
fi

if [ "$BLD_TVOS" != "" ]; then
	if [ "$BLD_TVOS_SIM" != "" ]; then
		build_fat "tvOS"
	else
		build "tvOS" "tvOS"
	fi
fi

# Wait for any background process (if selected) to finish
if [ "$XC_USE_BCKGND" != "" ]; then
	wait
fi

# Update latest symlink and clean MoltenVK for rebuild
PROJECT_DIR="."
CONFIGURATION=${XC_CONFIG}
. "./Scripts/package_ext_libs_finish.sh"

echo ========== Finished at `date +"%r"` ==========
exit 0
