diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2022-11-14 11:27:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-14 11:27:00 +0800 |
| commit | 623f5c36e0dc8190753aa5fa2e89f1010c367c67 (patch) | |
| tree | a21bdacd766b138316186877bc20c4001ed64451 /external/bump-glslang.sh | |
| parent | 3e312b3062ab493c80d7d7eddf43c94ec59ecdb7 (diff) | |
glslang: 11.10.0-16-g42398c93 -> 11.12.0-32-gf74f37c5 (#2507)
Diffstat (limited to 'external/bump-glslang.sh')
| -rwxr-xr-x | external/bump-glslang.sh | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/external/bump-glslang.sh b/external/bump-glslang.sh new file mode 100755 index 000000000..b7d30e3a0 --- /dev/null +++ b/external/bump-glslang.sh @@ -0,0 +1,223 @@ +#!/usr/bin/env bash + +set -e + +EXTERNAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + +refDef=refs/heads/master +ref=$refDef +upstreamDef=https://github.com/KhronosGroup/glslang +upstream=$upstreamDef + +while [[ "$#" -gt 0 ]]; do + case $1 in + -h | --help) help=1 ;; + --release) + ref="refs/tags/$2" + shift + ;; + --ref) + ref="$2" + shift + ;; + --upstream) + upstream="$2" + shift + ;; + --do-commit) + do_commit=1 + ;; + *) + echo "Unknown parameter passed: $1" >&2 + exit 1 + ;; + esac + shift +done + +if [ $help ]; then + me=$(basename "$0") + cat <<EOF +$me: Update external/glslang and dependencies + +- Merge the latest upstream glslang (or a specified commit) +- Checkout the 'known good' revision of and spirv-headers +- Merge the 'known_good' revision of spirv-tools with our changes +- Regenerate the contents of external/glslang-generated and external/spirv-tools-generated +- Optionally commit the changes + +Options: + --ref 2b2523f : merge this specific commit into our branch + defaults to $refDef + + --release foo : short for --ref refs/tags/foo + + --upstream https://example.com/glslang + : Specify the url of the repo from which to merge + defaults to $upstreamDef + + --do-commit : Commit the changes to git + +EOF + exit +fi + +big_msg() +{ + echo + echo "################################################################" + echo "$1" + echo "################################################################" +} + +require_bin() +{ + if ! command -v "$1" &> /dev/null + then + echo "This script needs $1, but it isn't in \$PATH" + missing_bin=1 + fi +} +require_bin "jq" +require_bin "git" +require_bin "python" +require_bin "cmake" +if [ $missing_bin ]; then + exit 1 +fi + +glslang=$EXTERNAL_DIR/glslang +glslang_generated=$EXTERNAL_DIR/glslang-generated +spirv_headers=$EXTERNAL_DIR/spirv-headers +spirv_tools=$EXTERNAL_DIR/spirv-tools +spirv_tools_generated=$EXTERNAL_DIR/spirv-tools-generated +effcee=$spirv_tools/external/effcee +re2=$spirv_tools/external/re2 + +if ! test -f "$glslang/.git"; then + echo "$glslang doesn't appear to be a git repo" + echo "Perhaps you need to 'git submodule update --init'" + exit 1 +fi + +known_good_commit(){ + jq <"$glslang/known_good.json" \ + ".commits | .[] | select(.name == \"$1\") | .commit" \ + --raw-output +} + +bump_dep(){ + commit=$(known_good_commit "$2") + big_msg "Fetching $commit from origin in $1" + git -C "$1" fetch origin "$commit" + big_msg "Checking out $commit in $1" + git -C "$1" checkout "$commit" +} + +declare -A old_ref +declare -A new_ref +merge_dep(){ + name=$1 + dir=$2 + up=$3 + r=$4 + old_ref["$1"]=$(git -C "$dir" describe --exclude master-tot --tags HEAD) + big_msg "Fetching $name $r from $up" + git -C "$dir" fetch --tags --force "$up" + git -C "$dir" fetch "$up" "$r" + big_msg "Merging $r into our branch" + git -C "$dir" merge --no-edit FETCH_HEAD + new_ref["$1"]=$(git -C "$dir" describe --exclude master-tot --tags HEAD) +} + +merge_dep glslang "$glslang" "$upstream" "$ref" + +spirv_tools_upstream=https://github.com/$( + jq <"$glslang/known_good.json" \ + ".commits | .[] | select(.name == \"spirv-tools\") | .subrepo" \ + --raw-output +) +merge_dep spirv-tools "$spirv_tools" "$spirv_tools_upstream" "$(known_good_commit "spirv-tools")" + +bump_dep "$spirv_headers" "spirv-tools/external/spirv-headers" + +# Make sure we have the dependencies of spirv-tools up to date + +test -d "$effcee" || git clone https://github.com/google/effcee.git "$effcee" +git -C "$effcee" pull + +test -d "$re2" || git clone https://github.com/google/re2.git "$re2" +git -C "$re2" pull + +rm -rf "$spirv_tools/external/spirv-headers" +ln -s "$spirv_headers" "$spirv_tools/external/spirv-headers" + +# +# We have now checked out everything, time to generate the files for +# glslang-generated and friends. +# + +big_msg "Generating files for glslang-generated" +set -x +(cd "$glslang" && python build_info.py . -i build_info.h.tmpl -o "$glslang_generated"/glslang/build_info.h) +set +x + +big_msg "Generating files for spirv-tools" +build="$spirv_tools/build" +mkdir -p "$build" +echo "Building spirv-tools" +cmake -Wno-dev -B "$build" "$spirv_tools" +# These are the targets which generate .inc and .h files (just what we need, +# specify them here to avoid a lengthy compile) +cmake --build "$build" \ + --target spirv-tools-build-version \ + --target core_tables \ + --target enum_string_mapping \ + --target extinst_tables +echo "Replacing existing .inc and .h files in $spirv_tools_generated" +set -x +rm -f "$spirv_tools_generated/*.{inc,h}" +cp --target-directory "$spirv_tools_generated" "$build"/*.{inc,h} +set +x + +if [ $do_commit ]; then + big_msg "Committing changes" + msg=$(cat <<EOF +external/glslang: ${old_ref["glslang"]} -> ${new_ref["glslang"]} + +external/spirv-tools: ${old_ref["spirv-tools"]} -> ${new_ref["spirv-tools"]}" +EOF +) + + git commit \ + --message "$msg" \ + "$glslang" \ + "$glslang_generated" \ + "$spirv_headers" \ + "$spirv_tools" \ + "$spirv_tools_generated" + +else + + cat <<EOFF +Commit these changes with: + msg=\$(cat <<EOF +external/glslang: ${old_ref["glslang"]} -> ${new_ref["glslang"]} + +external/spirv-tools: ${old_ref["spirv-tools"]} -> ${new_ref["spirv-tools"]}" +EOF +) + git commit \\ + --message "\$msg" + "$glslang" \\ + "$glslang_generated" \\ + "$spirv_headers" \\ + "$spirv_tools" \\ + "$spirv_tools_generated" + +EOFF + +fi + +echo "Please also don't forget to push the new commits in external/glslang and" +echo "external/spirv-tools to our forks!" |
