#!/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]
#                                  [-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.
#
#      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_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
         ;;
       --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 flag $1" >&2
         exit 1
         ;;
  esac
done

# 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

# Update a repository. If it exists, fetch it; if not, clone it.
# $1 repo name
# $2 repo url
# $3 repo revision (commit SHA)
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
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

# ----------------- Vulkan-Portability -------------------

echo
echo ========== Vulkan-Portability ==========
echo

REPO_NAME=Vulkan-Portability
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}


# ----------------- 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
	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 -----------------
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
trap "exit" INT TERM ERR
trap "kill 0" EXIT

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
wait

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

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