#!/bin/bash # Update source for glslang, LunarGLASS, spirv-tools set -e GLSLANG_REVISION=$(cat "${PWD}"/glslang_revision) SPIRV_TOOLS_REVISION=$(cat "${PWD}"/spirv-tools_revision) SPIRV_HEADERS_REVISION=$(cat "${PWD}"/spirv-headers_revision) echo "GLSLANG_REVISION=${GLSLANG_REVISION}" echo "SPIRV_TOOLS_REVISION=${SPIRV_TOOLS_REVISION}" echo "SPIRV_HEADERS_REVISION=${SPIRV_HEADERS_REVISION}" BUILDDIR=$PWD BASEDIR=$BUILDDIR/external function create_glslang () { rm -rf "${BASEDIR}"/glslang echo "Creating local glslang repository (${BASEDIR}/glslang)." mkdir -p "${BASEDIR}"/glslang cd "${BASEDIR}"/glslang git clone https://github.com/KhronosGroup/glslang.git . git checkout ${GLSLANG_REVISION} } function update_glslang () { echo "Updating ${BASEDIR}/glslang" cd "${BASEDIR}"/glslang git fetch --all git checkout --force ${GLSLANG_REVISION} } function create_spirv-tools () { rm -rf "${BASEDIR}"/spirv-tools echo "Creating local spirv-tools repository (${BASEDIR}/spirv-tools)." mkdir -p "${BASEDIR}"/spirv-tools cd "${BASEDIR}"/spirv-tools git clone https://github.com/KhronosGroup/SPIRV-Tools.git . git checkout ${SPIRV_TOOLS_REVISION} mkdir -p "${BASEDIR}"/spirv-tools/external/spirv-headers cd "${BASEDIR}"/spirv-tools/external/spirv-headers git clone https://github.com/KhronosGroup/SPIRV-Headers . git checkout ${SPIRV_HEADERS_REVISION} } function update_spirv-tools () { echo "Updating ${BASEDIR}/spirv-tools" cd "${BASEDIR}"/spirv-tools git fetch --all git checkout ${SPIRV_TOOLS_REVISION} if [ ! -d "${BASEDIR}/spirv-tools/external/spirv-headers" -o ! -d "${BASEDIR}/spirv-tools/external/spirv-headers/.git" ]; then mkdir -p "${BASEDIR}"/spirv-tools/external/spirv-headers cd "${BASEDIR}"/spirv-tools/external/spirv-headers git clone https://github.com/KhronosGroup/SPIRV-Headers . else cd "${BASEDIR}"/spirv-tools/external/spirv-headers git fetch --all fi git checkout ${SPIRV_HEADERS_REVISION} } function build_glslang () { echo "Building ${BASEDIR}/glslang" cd "${BASEDIR}"/glslang mkdir -p build cd build cmake -D CMAKE_BUILD_TYPE=Release .. make -j $(nproc) make install } function build_spirv-tools () { echo "Building ${BASEDIR}/spirv-tools" cd "${BASEDIR}"/spirv-tools mkdir -p build cd build cmake -D CMAKE_BUILD_TYPE=Release .. make -j $(nproc) } # If any options are provided, just compile those tools # If no options are provided, build everything INCLUDE_GLSLANG=false INCLUDE_SPIRV_TOOLS=false if [ "$#" == 0 ]; then echo "Building glslang, spirv-tools" INCLUDE_GLSLANG=true INCLUDE_SPIRV_TOOLS=true else # Parse options while [[ $# > 0 ]] do option="$1" case $option in # options to specify build of glslang components -g|--glslang) INCLUDE_GLSLANG=true echo "Building glslang ($option)" ;; # options to specify build of spirv-tools components -s|--spirv-tools) INCLUDE_SPIRV_TOOLS=true echo "Building spirv-tools ($option)" ;; *) echo "Unrecognized option: $option" echo "Try the following:" echo " -g | --glslang # enable glslang" echo " -s | --spirv-tools # enable spirv-tools" exit 1 ;; esac shift done fi if [ ${INCLUDE_GLSLANG} == "true" ]; then if [ ! -d "${BASEDIR}/glslang" -o ! -d "${BASEDIR}/glslang/.git" -o -d "${BASEDIR}/glslang/.svn" ]; then create_glslang fi update_glslang build_glslang fi if [ ${INCLUDE_SPIRV_TOOLS} == "true" ]; then if [ ! -d "${BASEDIR}/spirv-tools" -o ! -d "${BASEDIR}/spirv-tools/.git" ]; then create_spirv-tools fi update_spirv-tools build_spirv-tools fi