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