blob: 9676e0d8cf771a98d9ed0e59b5bb35d9b3ea803e [file] [log] [blame]
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -06001#!/bin/bash
Mark Lobodzinski4f5ce472017-11-16 13:23:05 -07002# Update source for glslang
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -06003
Cody Northrop5934a882015-05-12 16:23:59 -06004set -e
5
Jeff Julianoede64a72017-08-26 08:20:51 -04006if [[ $(uname) == "Linux" || $(uname) =~ "CYGWIN" ]]; then
Cody Northrop69ea6d02016-12-02 09:10:20 -07007 CURRENT_DIR="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")"
Cody Northrop5844be82016-12-02 09:28:42 -07008 CORE_COUNT=$(nproc || echo 4)
Cody Northrop69ea6d02016-12-02 09:10:20 -07009elif [[ $(uname) == "Darwin" ]]; then
Michael Jurka5eba0652016-12-19 16:31:43 +010010 CURRENT_DIR="$(dirname "$(python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' ${BASH_SOURCE[0]})")"
Cody Northrop5844be82016-12-02 09:28:42 -070011 CORE_COUNT=$(sysctl -n hw.ncpu || echo 4)
Cody Northrop69ea6d02016-12-02 09:10:20 -070012fi
Jeff Julianoede64a72017-08-26 08:20:51 -040013echo CURRENT_DIR=$CURRENT_DIR
Cody Northrop5844be82016-12-02 09:28:42 -070014echo CORE_COUNT=$CORE_COUNT
Cody Northrop69ea6d02016-12-02 09:10:20 -070015
Mark Lobodzinskica2604b2016-11-22 08:02:59 -070016REVISION_DIR="$CURRENT_DIR/external_revisions"
Mark Lobodzinski1e4da612016-11-18 13:20:36 -070017
Mark Lobodzinski7a725002018-03-27 15:31:16 -060018git submodule update --init --recursive
19
Jeff Bolz3b6e4ad2018-02-14 14:26:18 -060020# Use tr -d to remove line endings
21GLSLANG_GITURL=$(cat "${REVISION_DIR}/glslang_giturl" | tr -d "\n\r")
22GLSLANG_REVISION=$(cat "${REVISION_DIR}/glslang_revision" | tr -d "\n\r")
Mike Weiblen22489252017-02-16 17:00:35 -070023
24echo "GLSLANG_GITURL=${GLSLANG_GITURL}"
Karl Schultzece13962016-09-27 18:38:02 -060025echo "GLSLANG_REVISION=${GLSLANG_REVISION}"
Courtney Goeltzenleuchter5120b842014-10-29 17:50:15 -060026
Mark Lobodzinskica2604b2016-11-22 08:02:59 -070027BUILDDIR=${CURRENT_DIR}
28BASEDIR="$BUILDDIR/external"
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060029
30function create_glslang () {
Karl Schultzece13962016-09-27 18:38:02 -060031 rm -rf "${BASEDIR}"/glslang
32 echo "Creating local glslang repository (${BASEDIR}/glslang)."
33 mkdir -p "${BASEDIR}"/glslang
34 cd "${BASEDIR}"/glslang
Mike Weiblen22489252017-02-16 17:00:35 -070035 git clone ${GLSLANG_GITURL} .
Karl Schultzece13962016-09-27 18:38:02 -060036 git checkout ${GLSLANG_REVISION}
Mike Weiblen84f17cb2017-10-09 10:31:21 -060037 ./update_glslang_sources.py
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060038}
39
40function update_glslang () {
Karl Schultzece13962016-09-27 18:38:02 -060041 echo "Updating ${BASEDIR}/glslang"
42 cd "${BASEDIR}"/glslang
Cody Northrop5a4883b2015-07-08 09:53:03 -060043 git fetch --all
Karl Schultzece13962016-09-27 18:38:02 -060044 git checkout --force ${GLSLANG_REVISION}
Mike Weiblen84f17cb2017-10-09 10:31:21 -060045 ./update_glslang_sources.py
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060046}
47
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060048function build_glslang () {
Karl Schultzece13962016-09-27 18:38:02 -060049 echo "Building ${BASEDIR}/glslang"
50 cd "${BASEDIR}"/glslang
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060051 mkdir -p build
52 cd build
Mike Weiblen2e0b9842017-05-02 16:42:31 -060053 cmake -D CMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install ..
Cody Northrop5844be82016-12-02 09:28:42 -070054 make -j $CORE_COUNT
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -060055 make install
56}
57
Karl Schultz2e5ed332017-12-12 10:33:01 -050058function 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
66function update_moltenvk () {
67 echo "Updating ${BASEDIR}/MoltenVK"
68 cd "${BASEDIR}"/MoltenVK
69 git pull
70}
71
72function 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 Northrop73f0fd72015-12-29 16:25:10 -070082INCLUDE_GLSLANG=false
Karl Schultz2e5ed332017-12-12 10:33:01 -050083INCLUDE_MOLTENVK=false
Jeff Julianoede64a72017-08-26 08:20:51 -040084NO_SYNC=false
85NO_BUILD=false
86USE_IMPLICIT_COMPONENT_LIST=true
Cody Northrope2905f62015-11-30 13:40:50 -070087
Jeff Julianoede64a72017-08-26 08:20:51 -040088# Parse options
89while [[ $# > 0 ]]
90do
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 Schultz2e5ed332017-12-12 10:33:01 -0500100 # 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 Julianoede64a72017-08-26 08:20:51 -0400108 # options to specify build of spirv-tools components
109 -s|--spirv-tools)
Mark Lobodzinski4f5ce472017-11-16 13:23:05 -0700110 echo "($option) is deprecated and is no longer necessary"
Jeff Julianoede64a72017-08-26 08:20:51 -0400111 ;;
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 Juliano3bedf342017-08-26 10:22:22 -0400124 echo "Usage: update_external_sources.sh [options]"
125 echo " Available options:"
126 echo " -g | --glslang # enable glslang component"
Karl Schultz2e5ed332017-12-12 10:33:01 -0500127 if [[ $(uname) == "Darwin" ]]; then
128 echo " -m | --moltenvk # enable moltenvk component"
129 fi
Jeff Juliano3bedf342017-08-26 10:22:22 -0400130 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 Julianoede64a72017-08-26 08:20:51 -0400136 exit 1
137 ;;
138 esac
139 shift
140done
141
142if [ ${USE_IMPLICIT_COMPONENT_LIST} == "true" ]; then
Mark Lobodzinski4f5ce472017-11-16 13:23:05 -0700143 echo "Building glslang"
Cody Northrop73f0fd72015-12-29 16:25:10 -0700144 INCLUDE_GLSLANG=true
Karl Schultz2e5ed332017-12-12 10:33:01 -0500145 if [[ $(uname) == "Darwin" ]]; then
146 echo "Building MoltenVK"
147 INCLUDE_MOLTENVK=true
148 fi
Courtney Goeltzenleuchter7f0a7be2014-10-17 18:21:42 -0600149fi
Cody Northrope2905f62015-11-30 13:40:50 -0700150
Karl Schultzece13962016-09-27 18:38:02 -0600151if [ ${INCLUDE_GLSLANG} == "true" ]; then
Jeff Julianoede64a72017-08-26 08:20:51 -0400152 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 Northrop73f0fd72015-12-29 16:25:10 -0700157 fi
Jeff Julianoede64a72017-08-26 08:20:51 -0400158 if [ ${NO_BUILD} == "false" ]; then
159 build_glslang
160 fi
Cody Northrop73f0fd72015-12-29 16:25:10 -0700161fi
Karl Schultz2e5ed332017-12-12 10:33:01 -0500162
163if [ ${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
174fi
175