1 #!/bin/bash 2 # Update source for glslang, LunarGLASS, spirv-tools 3 4 set -e 5 6 GLSLANG_REVISION=$(cat "${PWD}"/glslang_revision) 7 SPIRV_TOOLS_REVISION=$(cat "${PWD}"/spirv-tools_revision) 8 SPIRV_HEADERS_REVISION=$(cat "${PWD}"/spirv-headers_revision) 9 echo "GLSLANG_REVISION=${GLSLANG_REVISION}" 10 echo "SPIRV_TOOLS_REVISION=${SPIRV_TOOLS_REVISION}" 11 echo "SPIRV_HEADERS_REVISION=${SPIRV_HEADERS_REVISION}" 12 13 BUILDDIR=$PWD 14 BASEDIR=$BUILDDIR/external 15 16 function create_glslang () { 17 rm -rf "${BASEDIR}"/glslang 18 echo "Creating local glslang repository (${BASEDIR}/glslang)." 19 mkdir -p "${BASEDIR}"/glslang 20 cd "${BASEDIR}"/glslang 21 git clone https://github.com/KhronosGroup/glslang.git . 22 git checkout ${GLSLANG_REVISION} 23 } 24 25 function update_glslang () { 26 echo "Updating ${BASEDIR}/glslang" 27 cd "${BASEDIR}"/glslang 28 git fetch --all 29 git checkout --force ${GLSLANG_REVISION} 30 } 31 32 function create_spirv-tools () { 33 rm -rf "${BASEDIR}"/spirv-tools 34 echo "Creating local spirv-tools repository (${BASEDIR}/spirv-tools)." 35 mkdir -p "${BASEDIR}"/spirv-tools 36 cd "${BASEDIR}"/spirv-tools 37 git clone https://github.com/KhronosGroup/SPIRV-Tools.git . 38 git checkout ${SPIRV_TOOLS_REVISION} 39 mkdir -p "${BASEDIR}"/spirv-tools/external/spirv-headers 40 cd "${BASEDIR}"/spirv-tools/external/spirv-headers 41 git clone https://github.com/KhronosGroup/SPIRV-Headers . 42 git checkout ${SPIRV_HEADERS_REVISION} 43 } 44 45 function update_spirv-tools () { 46 echo "Updating ${BASEDIR}/spirv-tools" 47 cd "${BASEDIR}"/spirv-tools 48 git fetch --all 49 git checkout ${SPIRV_TOOLS_REVISION} 50 if [ ! -d "${BASEDIR}/spirv-tools/external/spirv-headers" -o ! -d "${BASEDIR}/spirv-tools/external/spirv-headers/.git" ]; then 51 mkdir -p "${BASEDIR}"/spirv-tools/external/spirv-headers 52 cd "${BASEDIR}"/spirv-tools/external/spirv-headers 53 git clone https://github.com/KhronosGroup/SPIRV-Headers . 54 else 55 cd "${BASEDIR}"/spirv-tools/external/spirv-headers 56 git fetch --all 57 fi 58 git checkout ${SPIRV_HEADERS_REVISION} 59 } 60 61 function build_glslang () { 62 echo "Building ${BASEDIR}/glslang" 63 cd "${BASEDIR}"/glslang 64 mkdir -p build 65 cd build 66 cmake -D CMAKE_BUILD_TYPE=Release .. 67 make -j $(nproc) 68 make install 69 } 70 71 function build_spirv-tools () { 72 echo "Building ${BASEDIR}/spirv-tools" 73 cd "${BASEDIR}"/spirv-tools 74 mkdir -p build 75 cd build 76 cmake -D CMAKE_BUILD_TYPE=Release .. 77 make -j $(nproc) 78 } 79 80 # If any options are provided, just compile those tools 81 # If no options are provided, build everything 82 INCLUDE_GLSLANG=false 83 INCLUDE_SPIRV_TOOLS=false 84 85 if [ "$#" == 0 ]; then 86 echo "Building glslang, spirv-tools" 87 INCLUDE_GLSLANG=true 88 INCLUDE_SPIRV_TOOLS=true 89 else 90 # Parse options 91 while [[ $# > 0 ]] 92 do 93 option="$1" 94 95 case $option in 96 # options to specify build of glslang components 97 -g|--glslang) 98 INCLUDE_GLSLANG=true 99 echo "Building glslang ($option)" 100 ;; 101 # options to specify build of spirv-tools components 102 -s|--spirv-tools) 103 INCLUDE_SPIRV_TOOLS=true 104 echo "Building spirv-tools ($option)" 105 ;; 106 *) 107 echo "Unrecognized option: $option" 108 echo "Try the following:" 109 echo " -g | --glslang # enable glslang" 110 echo " -s | --spirv-tools # enable spirv-tools" 111 exit 1 112 ;; 113 esac 114 shift 115 done 116 fi 117 118 if [ ${INCLUDE_GLSLANG} == "true" ]; then 119 if [ ! -d "${BASEDIR}/glslang" -o ! -d "${BASEDIR}/glslang/.git" -o -d "${BASEDIR}/glslang/.svn" ]; then 120 create_glslang 121 fi 122 update_glslang 123 build_glslang 124 fi 125 126 127 if [ ${INCLUDE_SPIRV_TOOLS} == "true" ]; then 128 if [ ! -d "${BASEDIR}/spirv-tools" -o ! -d "${BASEDIR}/spirv-tools/.git" ]; then 129 create_spirv-tools 130 fi 131 update_spirv-tools 132 build_spirv-tools 133 fi 134