Generate derived External/SPIRV-Cross/mvkSpirvCrossRevisionDerived.h header file from SPIRV-Cross_repo_revision file from within fetchDependencies. MoltenVK includes derived header file and extracts first part of revision hash for inclusion in pipelineCacheUUID. Update highest available MTLFeatureSets for use in pipelineCacheUUID. Suppress echoing of script directory changes in fetchDependencies.
283 lines
6.7 KiB
Bash
Executable File
283 lines
6.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Copyright (c) 2016-2019 The Brenwill Workshop Ltd.
|
|
#
|
|
# fetchDependencies - Retrieves the correct versions of all dependencies
|
|
#
|
|
# macOS usage: ./fetchDependencies [-v] [--debug] [--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.
|
|
#
|
|
# -v verbose output
|
|
#
|
|
# --debug
|
|
# Build the external libraries in Debug mode, which may be useful
|
|
# when debugging and tracing calls into those libraries.
|
|
#
|
|
|
|
set -o errexit
|
|
|
|
# ----------------- Functions -------------------
|
|
|
|
XC_SCHEME_SFX=""
|
|
XC_BUILD_VERBOSITY="-quiet"
|
|
V_HEADERS_ROOT=""
|
|
SPIRV_CROSS_ROOT=""
|
|
GLSLANG_ROOT=""
|
|
|
|
while (( "$#" )); do
|
|
case "$1" in
|
|
--debug)
|
|
XC_SCHEME_SFX=" (Debug)"
|
|
shift 1
|
|
;;
|
|
-v)
|
|
XC_BUILD_VERBOSITY=""
|
|
shift 1
|
|
;;
|
|
--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 - > /dev/null
|
|
else
|
|
rm -rf $1
|
|
git clone $2 $1
|
|
cd $1
|
|
git checkout $3
|
|
cd - > /dev/null
|
|
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 $(sysctl -n hw.activecpu)
|
|
fi
|
|
|
|
cd - > /dev/null
|
|
}
|
|
|
|
|
|
# ----------------- 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.
|
|
|
|
REPO_NAME=Vulkan-Headers
|
|
|
|
if [ ! "$V_HEADERS_ROOT" = "" ]; then
|
|
rm -rf ${REPO_NAME}
|
|
ln -sfn ${V_HEADERS_ROOT} ${REPO_NAME}
|
|
else
|
|
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
|
|
|
|
# ----------------- Vulkan-Portability -------------------
|
|
|
|
echo
|
|
echo ========== Vulkan-Portability ==========
|
|
echo
|
|
|
|
REPO_NAME=Vulkan-Portability
|
|
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}
|
|
|
|
|
|
# ----------------- 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.
|
|
|
|
REPO_NAME=SPIRV-Cross
|
|
|
|
if [ ! "$SPIRV_CROSS_ROOT" = "" ]; then
|
|
rm -rf ${REPO_NAME}
|
|
ln -sfn ${SPIRV_CROSS_ROOT} ${REPO_NAME}
|
|
else
|
|
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
|
|
|
|
# Record the SPIRV-Cross revision as a derived header file suitable for including in a build
|
|
HDR_FILE=${REPO_NAME}/mvkSpirvCrossRevisionDerived.h
|
|
echo "// Auto-generated by MoltenVK" > ${HDR_FILE}
|
|
echo "static const char* spirvCrossRevisionString = \"${REPO_REV}\";" >> ${HDR_FILE}
|
|
|
|
|
|
# ----------------- 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.
|
|
|
|
REPO_NAME=glslang
|
|
|
|
if [ ! "$GLSLANG_ROOT" = "" ]; then
|
|
rm -rf ${REPO_NAME}
|
|
ln -sfn ${GLSLANG_ROOT} ${REPO_NAME}
|
|
else
|
|
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 - > /dev/null
|
|
fi
|
|
|
|
#Make sure the embedded spirv-tools is built
|
|
build_repo "${REPO_NAME}/External/spirv-tools"
|
|
|
|
|
|
# ----------------- 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 - > /dev/null
|
|
|
|
|
|
# ----------------- Cleanup -------------------
|
|
|
|
cd ..
|
|
|
|
|
|
# -------------- Build MoltenVK dependencies -----------------
|
|
echo
|
|
echo ========== Building dependency libraries quietly. Please be patient on first build. ==========
|
|
echo
|
|
|
|
EXT_DEPS=ExternalDependencies
|
|
XC_PROJ="${EXT_DEPS}.xcodeproj"
|
|
XC_SCHEME="${EXT_DEPS}${XC_SCHEME_SFX}"
|
|
XC_DD_PATH="${EXT_DIR}/build"
|
|
|
|
xcodebuild \
|
|
-project "${XC_PROJ}" \
|
|
-scheme "${XC_SCHEME}" \
|
|
-derivedDataPath "${XC_DD_PATH}" \
|
|
${XC_BUILD_VERBOSITY} \
|
|
build
|
|
|
|
echo ========== Done! ==========
|
|
|