Add separate ExternalDependencies Xcode project. Move external dependencies to ExternalDependencies project. The fetchDependencies script builds external dependencies libraries into External/build. The fetchDependencies script prepares SPIRV-Tools without preparing glslang. MoltenVK links to pre-built external dependency static libraries. MoltenVK includes external library headers using full relative paths.
243 lines
5.6 KiB
Bash
Executable File
243 lines
5.6 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" 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 -j
|
|
fi
|
|
|
|
cd -
|
|
}
|
|
|
|
|
|
# ----------------- Main -------------------
|
|
|
|
EXT_DIR=External
|
|
EXT_REV_DIR=../ExternalRevisions
|
|
|
|
echo
|
|
echo ========== Retrieving MoltenVK dependencies into ${EXT_DIR} ==========
|
|
|
|
mkdir -p ${EXT_DIR}
|
|
cd ${EXT_DIR}
|
|
|
|
|
|
# ----------------- Cereal -------------------
|
|
|
|
echo
|
|
echo ========== Cereal ==========
|
|
echo
|
|
|
|
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 -------------------
|
|
|
|
echo
|
|
echo ========== Vulkan-Headers ==========
|
|
echo
|
|
|
|
# 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 -------------------
|
|
|
|
echo
|
|
echo ========== SPIRV-Cross ==========
|
|
echo
|
|
|
|
# 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 -------------------
|
|
|
|
echo
|
|
echo ========== glslang and SPIRV-Tools ==========
|
|
echo
|
|
|
|
# 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}/External/spirv-tools"
|
|
fi
|
|
|
|
|
|
# ----------------- Vulkan-Tools -------------------
|
|
|
|
echo
|
|
echo ========== Vulkan-Tools ==========
|
|
echo
|
|
|
|
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 -------------------
|
|
|
|
echo
|
|
echo ========== VulkanSamples ==========
|
|
echo
|
|
|
|
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}
|
|
|
|
# Generate dispatch files needed for Hologram demo
|
|
cd "${REPO_NAME}/Sample-Programs/Hologram"
|
|
./generate-dispatch-table HelpersDispatchTable.h
|
|
./generate-dispatch-table HelpersDispatchTable.cpp
|
|
cd -
|
|
|
|
|
|
# ----------------- Cleanup -------------------
|
|
|
|
cd ..
|
|
|
|
|
|
# -------------- Build MoltenVK dependencies -----------------
|
|
echo
|
|
echo ========== Building dependencies quietly. Please be patient on first build. ==========
|
|
echo
|
|
|
|
EXT_DEPS=ExternalDependencies
|
|
|
|
xcodebuild \
|
|
-project "${EXT_DEPS}.xcodeproj" \
|
|
-scheme "${EXT_DEPS}" \
|
|
-derivedDataPath "${EXT_DIR}/build" \
|
|
-quiet \
|
|
build
|
|
|
|
echo ========== Done! ==========
|
|
|