Add --v-headers-root, --spirv-cross-root, and --glslang-root options with an arg that allow caller to pass in the root dir of these three repos if the caller already has them. The script then symlinks to these instead of fetching and building.
195 lines
4.7 KiB
Bash
Executable File
195 lines
4.7 KiB
Bash
Executable File
#!/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 ..
|
|
|