| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 1 | #!/bin/bash | 
| Mark Lobodzinski | 4f5ce47 | 2017-11-16 13:23:05 -0700 | [diff] [blame] | 2 | # Update source for glslang | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 3 |  | 
| Cody Northrop | 5934a88 | 2015-05-12 16:23:59 -0600 | [diff] [blame] | 4 | set -e | 
 | 5 |  | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 6 | if [[ $(uname) == "Linux" || $(uname) =~ "CYGWIN" ]]; then | 
| Cody Northrop | 69ea6d0 | 2016-12-02 09:10:20 -0700 | [diff] [blame] | 7 |     CURRENT_DIR="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" | 
| Cody Northrop | 5844be8 | 2016-12-02 09:28:42 -0700 | [diff] [blame] | 8 |     CORE_COUNT=$(nproc || echo 4) | 
| Cody Northrop | 69ea6d0 | 2016-12-02 09:10:20 -0700 | [diff] [blame] | 9 | elif [[ $(uname) == "Darwin" ]]; then | 
| Michael Jurka | 5eba065 | 2016-12-19 16:31:43 +0100 | [diff] [blame] | 10 |     CURRENT_DIR="$(dirname "$(python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' ${BASH_SOURCE[0]})")" | 
| Cody Northrop | 5844be8 | 2016-12-02 09:28:42 -0700 | [diff] [blame] | 11 |     CORE_COUNT=$(sysctl -n hw.ncpu || echo 4) | 
| Cody Northrop | 69ea6d0 | 2016-12-02 09:10:20 -0700 | [diff] [blame] | 12 | fi | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 13 | echo CURRENT_DIR=$CURRENT_DIR | 
| Cody Northrop | 5844be8 | 2016-12-02 09:28:42 -0700 | [diff] [blame] | 14 | echo CORE_COUNT=$CORE_COUNT | 
| Cody Northrop | 69ea6d0 | 2016-12-02 09:10:20 -0700 | [diff] [blame] | 15 |  | 
| Mark Lobodzinski | ca2604b | 2016-11-22 08:02:59 -0700 | [diff] [blame] | 16 | REVISION_DIR="$CURRENT_DIR/external_revisions" | 
| Mark Lobodzinski | 1e4da61 | 2016-11-18 13:20:36 -0700 | [diff] [blame] | 17 |  | 
| Mark Lobodzinski | 7a72500 | 2018-03-27 15:31:16 -0600 | [diff] [blame] | 18 | git submodule update --init --recursive | 
 | 19 |  | 
| Jeff Bolz | 3b6e4ad | 2018-02-14 14:26:18 -0600 | [diff] [blame] | 20 | # Use tr -d to remove line endings | 
 | 21 | GLSLANG_GITURL=$(cat "${REVISION_DIR}/glslang_giturl" | tr -d "\n\r") | 
 | 22 | GLSLANG_REVISION=$(cat "${REVISION_DIR}/glslang_revision" | tr -d "\n\r") | 
| Mike Weiblen | 2248925 | 2017-02-16 17:00:35 -0700 | [diff] [blame] | 23 |  | 
 | 24 | echo "GLSLANG_GITURL=${GLSLANG_GITURL}" | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 25 | echo "GLSLANG_REVISION=${GLSLANG_REVISION}" | 
| Courtney Goeltzenleuchter | 5120b84 | 2014-10-29 17:50:15 -0600 | [diff] [blame] | 26 |  | 
| Mark Lobodzinski | ca2604b | 2016-11-22 08:02:59 -0700 | [diff] [blame] | 27 | BUILDDIR=${CURRENT_DIR} | 
 | 28 | BASEDIR="$BUILDDIR/external" | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 29 |  | 
 | 30 | function create_glslang () { | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 31 |    rm -rf "${BASEDIR}"/glslang | 
 | 32 |    echo "Creating local glslang repository (${BASEDIR}/glslang)." | 
 | 33 |    mkdir -p "${BASEDIR}"/glslang | 
 | 34 |    cd "${BASEDIR}"/glslang | 
| Mike Weiblen | 2248925 | 2017-02-16 17:00:35 -0700 | [diff] [blame] | 35 |    git clone ${GLSLANG_GITURL} . | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 36 |    git checkout ${GLSLANG_REVISION} | 
| Mike Weiblen | 84f17cb | 2017-10-09 10:31:21 -0600 | [diff] [blame] | 37 |    ./update_glslang_sources.py | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 38 | } | 
 | 39 |  | 
 | 40 | function update_glslang () { | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 41 |    echo "Updating ${BASEDIR}/glslang" | 
 | 42 |    cd "${BASEDIR}"/glslang | 
| Cody Northrop | 5a4883b | 2015-07-08 09:53:03 -0600 | [diff] [blame] | 43 |    git fetch --all | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 44 |    git checkout --force ${GLSLANG_REVISION} | 
| Mike Weiblen | 84f17cb | 2017-10-09 10:31:21 -0600 | [diff] [blame] | 45 |    ./update_glslang_sources.py | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 46 | } | 
 | 47 |  | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 48 | function build_glslang () { | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 49 |    echo "Building ${BASEDIR}/glslang" | 
 | 50 |    cd "${BASEDIR}"/glslang | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 51 |    mkdir -p build | 
 | 52 |    cd build | 
| Mike Weiblen | 2e0b984 | 2017-05-02 16:42:31 -0600 | [diff] [blame] | 53 |    cmake -D CMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install .. | 
| Cody Northrop | 5844be8 | 2016-12-02 09:28:42 -0700 | [diff] [blame] | 54 |    make -j $CORE_COUNT | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 55 |    make install | 
 | 56 | } | 
 | 57 |  | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 58 | function create_moltenvk () { | 
 | 59 |    rm -rf "${BASEDIR}"/MoltenVK | 
 | 60 |    echo "Creating local MoltenVK repository (${BASEDIR}/MoltenVK)." | 
 | 61 |    mkdir -p "${BASEDIR}"/MoltenVK | 
 | 62 |    cd "${BASEDIR}"/MoltenVK | 
 | 63 |    git clone --recurse-submodules https://github.com/KhronosGroup/MoltenVK.git "${BASEDIR}"/MoltenVK | 
 | 64 | } | 
 | 65 |  | 
 | 66 | function update_moltenvk () { | 
 | 67 |    echo "Updating ${BASEDIR}/MoltenVK" | 
 | 68 |    cd "${BASEDIR}"/MoltenVK | 
 | 69 |    git pull | 
 | 70 | } | 
 | 71 |  | 
 | 72 | function build_moltenvk () { | 
 | 73 |    echo "Building ${BASEDIR}/MoltenVK" | 
 | 74 |    cd "${BASEDIR}"/MoltenVK/External | 
 | 75 |    ./makeAll | 
 | 76 |    cd "${BASEDIR}"/MoltenVK | 
 | 77 |    xcodebuild -project MoltenVKPackaging.xcodeproj \ | 
 | 78 |     GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS MVK_LOGGING_ENABLED=0' \ | 
 | 79 |     -scheme "MoltenVK (Release)" build | 
 | 80 | } | 
 | 81 |  | 
| Cody Northrop | 73f0fd7 | 2015-12-29 16:25:10 -0700 | [diff] [blame] | 82 | INCLUDE_GLSLANG=false | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 83 | INCLUDE_MOLTENVK=false | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 84 | NO_SYNC=false | 
 | 85 | NO_BUILD=false | 
 | 86 | USE_IMPLICIT_COMPONENT_LIST=true | 
| Cody Northrop | e2905f6 | 2015-11-30 13:40:50 -0700 | [diff] [blame] | 87 |  | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 88 | # Parse options | 
 | 89 | while [[ $# > 0 ]] | 
 | 90 | do | 
 | 91 |   option="$1" | 
 | 92 |  | 
 | 93 |   case $option in | 
 | 94 |       # options to specify build of glslang components | 
 | 95 |       -g|--glslang) | 
 | 96 |       INCLUDE_GLSLANG=true | 
 | 97 |       USE_IMPLICIT_COMPONENT_LIST=false | 
 | 98 |       echo "Building glslang ($option)" | 
 | 99 |       ;; | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 100 |       # options to specify build of moltenvk components | 
 | 101 |       -m|--moltenvk) | 
 | 102 |       if [[ $(uname) == "Darwin" ]]; then | 
 | 103 |         INCLUDE_MOLTENVK=true | 
 | 104 |         USE_IMPLICIT_COMPONENT_LIST=false | 
 | 105 |         echo "Building MoltenVK ($option)" | 
 | 106 |       fi | 
 | 107 |       ;; | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 108 |       # options to specify build of spirv-tools components | 
 | 109 |       -s|--spirv-tools) | 
| Mark Lobodzinski | 4f5ce47 | 2017-11-16 13:23:05 -0700 | [diff] [blame] | 110 |       echo "($option) is deprecated and is no longer necessary" | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 111 |       ;; | 
 | 112 |       # option to specify skipping sync from git | 
 | 113 |       --no-sync) | 
 | 114 |       NO_SYNC=true | 
 | 115 |       echo "Skipping sync ($option)" | 
 | 116 |       ;; | 
 | 117 |       # option to specify skipping build | 
 | 118 |       --no-build) | 
 | 119 |       NO_BUILD=true | 
 | 120 |       echo "Skipping build ($option)" | 
 | 121 |       ;; | 
 | 122 |       *) | 
 | 123 |       echo "Unrecognized option: $option" | 
| Jeff Juliano | 3bedf34 | 2017-08-26 10:22:22 -0400 | [diff] [blame] | 124 |       echo "Usage: update_external_sources.sh [options]" | 
 | 125 |       echo "  Available options:" | 
 | 126 |       echo "    -g | --glslang      # enable glslang component" | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 127 |       if [[ $(uname) == "Darwin" ]]; then | 
 | 128 |         echo "    -m | --moltenvk     # enable moltenvk component" | 
 | 129 |       fi | 
| Jeff Juliano | 3bedf34 | 2017-08-26 10:22:22 -0400 | [diff] [blame] | 130 |       echo "    --no-sync           # skip sync from git" | 
 | 131 |       echo "    --no-build          # skip build" | 
 | 132 |       echo "  If any component enables are provided, only those components are enabled." | 
 | 133 |       echo "  If no component enables are provided, all components are enabled." | 
 | 134 |       echo "  Sync uses git to pull a specific revision." | 
 | 135 |       echo "  Build configures CMake, builds Release." | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 136 |       exit 1 | 
 | 137 |       ;; | 
 | 138 |   esac | 
 | 139 |   shift | 
 | 140 | done | 
 | 141 |  | 
 | 142 | if [ ${USE_IMPLICIT_COMPONENT_LIST} == "true" ]; then | 
| Mark Lobodzinski | 4f5ce47 | 2017-11-16 13:23:05 -0700 | [diff] [blame] | 143 |   echo "Building glslang" | 
| Cody Northrop | 73f0fd7 | 2015-12-29 16:25:10 -0700 | [diff] [blame] | 144 |   INCLUDE_GLSLANG=true | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 145 |   if [[ $(uname) == "Darwin" ]]; then | 
 | 146 |     echo "Building MoltenVK" | 
 | 147 |     INCLUDE_MOLTENVK=true | 
 | 148 |   fi | 
| Courtney Goeltzenleuchter | 7f0a7be | 2014-10-17 18:21:42 -0600 | [diff] [blame] | 149 | fi | 
| Cody Northrop | e2905f6 | 2015-11-30 13:40:50 -0700 | [diff] [blame] | 150 |  | 
| Karl Schultz | ece1396 | 2016-09-27 18:38:02 -0600 | [diff] [blame] | 151 | if [ ${INCLUDE_GLSLANG} == "true" ]; then | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 152 |   if [ ${NO_SYNC} == "false" ]; then | 
 | 153 |     if [ ! -d "${BASEDIR}/glslang" -o ! -d "${BASEDIR}/glslang/.git" -o -d "${BASEDIR}/glslang/.svn" ]; then | 
 | 154 |        create_glslang | 
 | 155 |     fi | 
 | 156 |     update_glslang | 
| Cody Northrop | 73f0fd7 | 2015-12-29 16:25:10 -0700 | [diff] [blame] | 157 |   fi | 
| Jeff Juliano | ede64a7 | 2017-08-26 08:20:51 -0400 | [diff] [blame] | 158 |   if [ ${NO_BUILD} == "false" ]; then | 
 | 159 |     build_glslang | 
 | 160 |   fi | 
| Cody Northrop | 73f0fd7 | 2015-12-29 16:25:10 -0700 | [diff] [blame] | 161 | fi | 
| Karl Schultz | 2e5ed33 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 162 |  | 
 | 163 | if [ ${INCLUDE_MOLTENVK} == "true" ]; then | 
 | 164 |   if [ ${NO_SYNC} == "false" ]; then | 
 | 165 |     if [ ! -d "${BASEDIR}/MoltenVK" -o ! -d "${BASEDIR}/MoltenVK/.git" ]; then | 
 | 166 |       create_moltenvk | 
 | 167 |     fi | 
 | 168 |     update_moltenvk | 
 | 169 |   fi | 
 | 170 |   if [ ${NO_BUILD} == "false" ]; then | 
 | 171 |     echo "Building moltenvk" | 
 | 172 |     build_moltenvk | 
 | 173 |   fi | 
 | 174 | fi | 
 | 175 |  |