#!/usr/bin/env bash
#
# Copyright (c) 2016-2018 The Brenwill Workshop Ltd.
#
# fetchDependencies - Retrieves the correct versions of all dependencies
#
# macOS usage: ./fetchDependencies [-sdk]
#
#   -sdk = Load for the LunarG SDK, using symlinks to repos in SDK instead of fetching
#          Vulkan-LoaderAndValidationLayers and glslang repositories.


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

# Clone a repository
# $1 repo name
# $2 repo url
# $3 repo revision (commit SHA)
clone_repo() {
	echo "$1 repo: $2"
	echo "$1 revision: $3"

	rm -rf $1
	git clone $2 $1
	cd $1
	git checkout $3
	cd -
}

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

	rm -rf $1/build
	mkdir $1/build
	cd $1/build
	cmake ..
	make
	cd -
}


echo
echo Retrieving MoltenVK dependencies.
echo

V_LVL_NAME=Vulkan-LoaderAndValidationLayers
GLSLANG_NAME=glslang
SPIRV_TOOLS_NAME=SPIRV-Tools

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

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

clone_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}


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

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

clone_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}


# ----------------- SPIRV-Tools -------------------

REPO_NAME=${SPIRV_TOOLS_NAME}
rm -rf ${REPO_NAME}
ln -sfn ${GLSLANG_NAME}/External/spirv-tools ${REPO_NAME}


# ----------------- SPIRV-Headers -------------------

REPO_NAME=SPIRV-Headers
rm -rf ${REPO_NAME}
ln -sfn ${SPIRV_TOOLS_NAME}/external/spirv-headers ${REPO_NAME}


# ----------------- Vulkan-LoaderAndValidationLayers, glslang, SPIRV-Tools & SPIRV-Headers -------------------

# When MoltenVK is loaded as a dependency of the LunarG SDK, the LunarG SDK already
# has Vulkan-LoaderAndValidationLayers & glslang, so create simlinks instead.
if [ "$1" = "-sdk" ]; then

	REPO_NAME=${V_LVL_NAME}
	rm -rf ${REPO_NAME}
	ln -sfn ../../.. ${REPO_NAME}

	REPO_NAME=${GLSLANG_NAME}
	rm -rf ${REPO_NAME}
	ln -sfn ../../${REPO_NAME} ${REPO_NAME}

else

	# ----------------- Vulkan-LoaderAndValidationLayers -------------------

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

	clone_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}


	# ----------------- glslang, SPIRV-Tools & SPIRV-Headers ---------------

	REPO_NAME=${GLSLANG_NAME}
	REPO_URL=$(cat "${V_LVL_NAME}/external_revisions/glslang_giturl")
	REPO_REV=$(cat "${V_LVL_NAME}/external_revisions/glslang_revision")

	clone_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}

	cd ${REPO_NAME}
	./update_glslang_sources.py
	cd -

	build_repo ${GLSLANG_NAME}

	build_repo ${SPIRV_TOOLS_NAME}

fi

