| #!/usr/bin/env bash |
| # |
| # Copyright (c) 2016-2018 The Brenwill Workshop Ltd. |
| # |
| # fetchDependencies - Retrieves the correct versions of all dependencies |
| # |
| # macOS usage: ./fetchDependencies [--v-lvl-root path] [--glslang-root path] |
| # |
| # --v-lvl-root path |
| # "path" specifies a directory path to a |
| # KhronosGroup/Vulkan-LoaderAndValidationLayers 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. |
| |
| |
| # ----------------- Functions ------------------- |
| |
| # 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 |
| ninja |
| else |
| cmake .. |
| make |
| fi |
| cd - |
| } |
| |
| |
| # ----------------- Main ------------------- |
| |
| EXT_DIR=External |
| EXT_REV_DIR=ExternalRevisions |
| V_LVL_NAME=Vulkan-LoaderAndValidationLayers |
| GLSLANG_NAME=glslang |
| V_LVL_ROOT="" |
| GLSLANG_ROOT="" |
| |
| while (( "$#" )); do |
| case "$1" in |
| --v-lvl-root) |
| V_LVL_ROOT=$2 |
| shift 2 |
| ;; |
| --glslang-root) |
| GLSLANG_ROOT=$2 |
| shift 2 |
| ;; |
| -*|--*=) |
| echo "Error: Unsupported flag $1" >&2 |
| exit 1 |
| ;; |
| esac |
| done |
| |
| echo |
| echo Retrieving MoltenVK dependencies into ${EXT_DIR}. |
| echo |
| |
| mkdir -p ${EXT_DIR} |
| cd ${EXT_DIR} |
| |
| # ----------------- Cereal ------------------- |
| |
| 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} |
| |
| |
| # ----------------- SPIRV-Cross ------------------- |
| |
| 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} |
| |
| |
| # ----------------- VulkanSamples ------------------- |
| |
| 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} |
| |
| |
| # ----------------- Vulkan-LoaderAndValidationLayers ------------------- |
| |
| # When MoltenVK is built by something that already has a copy of the |
| # Vulkan-LoaderAndValidationLayers repo, use it by creating a symlink. |
| if [ ! "$V_LVL_ROOT" = "" ]; then |
| |
| REPO_NAME=${V_LVL_NAME} |
| rm -rf ${REPO_NAME} |
| ln -sfn ${V_LVL_ROOT} ${REPO_NAME} |
| |
| else |
| |
| REPO_NAME=${V_LVL_NAME} |
| 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_external_sources.sh -g |
| cd - |
| |
| fi |
| |
| cd .. |
| |