#!/usr/bin/env bash # # Copyright (c) 2016-2018 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. # # # ----------------- Functions ------------------- V_HEADERS_ROOT="" SPIRV_CROSS_ROOT="" GLSLANG_ROOT="" while (( "$#" )); do case "$1" in --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 fi make install cd - } # ----------------- Main ------------------- EXT_DIR=External EXT_REV_DIR=ExternalRevisions 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} # ----------------- Vulkan-Headers ------------------- # 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 ------------------- # 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 ------------------- # 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} fi # ----------------- Vulkan-Tools ------------------- 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 ------------------- 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} # ----------------- Cleanup ------------------- cd ..