#!/usr/bin/env bash
#
# Copyright (c) 2016-2019 The Brenwill Workshop Ltd.
#
# fetchDependencies - Retrieves the correct versions of all dependencies
#
# macOS usage: ./fetchDependencies [--v-headers-root path] [--spirv-cross-root path] [--glslang-root path]
#
#      --v-headers-root path
#              "path" specifies a directory path to a
#              KhronosGroup/Vulkan-Headers repository.
#              This repository does not have to be built.
#
#      --spirv-cross-root path
#              "path" specifies a directory path to a
#              KhronosGroup/SPIRV-Cross repository.
#              This repository does not have to be built.
#
#      --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.
#
#      -v      verbose output
#


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

XC_BUILD_VERBOSITY="-quiet"
V_HEADERS_ROOT=""
SPIRV_CROSS_ROOT=""
GLSLANG_ROOT=""

while (( "$#" )); do
  case "$1" in
       -v)
         XC_BUILD_VERBOSITY=""
         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

# 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 -
	else
		rm -rf $1
		git clone $2 $1
		cd $1
		git checkout $3
		cd -
	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 -
}


# ----------------- 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.
if [ ! "$V_HEADERS_ROOT" = "" ]; then
       REPO_NAME=Vulkan-Headers
       rm -rf ${REPO_NAME}
       ln -sfn ${V_HEADERS_ROOT} ${REPO_NAME}
else
       REPO_NAME=Vulkan-Headers
       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.
if [ ! "$SPIRV_CROSS_ROOT" = "" ]; then
       REPO_NAME=SPIRV-Cross
       rm -rf ${REPO_NAME}
       ln -sfn ${SPIRV_CROSS_ROOT} ${REPO_NAME}
else
       REPO_NAME=SPIRV-Cross
       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.
if [ ! "$GLSLANG_ROOT" = "" ]; then
       REPO_NAME=glslang
       rm -rf ${REPO_NAME}
       ln -sfn ${GLSLANG_ROOT} ${REPO_NAME}
else
       REPO_NAME=glslang
       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 -

       build_repo "${REPO_NAME}/External/spirv-tools"
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 -


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

cd ..


# -------------- Build MoltenVK dependencies -----------------
echo
echo ========== Building dependency libraries quietly. Please be patient on first build. ==========
echo

EXT_DEPS=ExternalDependencies

xcodebuild 									\
	-project "${EXT_DEPS}.xcodeproj"		\
	-scheme "${EXT_DEPS}"					\
	-derivedDataPath "${EXT_DIR}/build"		\
	${XC_BUILD_VERBOSITY}					\
	build

echo ========== Done! ==========

