| #!/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" specific 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 alread has a copy of the |
| # Vulkan-Headers 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 alread has a copy of the |
| # Vulkan-Headers 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 alread has a copy of the |
| # Vulkan-Headers 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} |
| |
| |
| cd .. |
| |