summaryrefslogtreecommitdiffstats
path: root/source/x/vulkan-sdk/fetch-sources.sh
blob: 4202b1d4ac49dc3c14dc3d311c9defa63462fc60 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/sh

# Copyright 2017, 2018, 2023, 2024  Patrick J. Volkerding, Sebeka, Minnesota, USA
# Copyright 2021  Heinz Wiesinger, Amsterdam, The Netherlands
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Call this script with the version of the Vulkan-LoaderAndValidationLayers-sdk
# that you would like to fetch the sources for. This will fetch the SDK from
# github, and then look at the revisions listed in the external_revisions
# directory to fetch the proper glslang, SPIRV-Headers, and SPIRV-Tools.
#
# Example:  VERSION=1.1.92.1 ./fetch-sources.sh

VERSION=${VERSION:-latest}

get_known_good() {
JSON_PATH=$1
DEP=$2
KEY=$3

DEP_COMMIT=$(python3 - << EOF
import json
with open('$JSON_PATH') as f:
	known_good = json.load(f)
name = '$DEP'
headers = next(commit for commit in known_good['$KEY'] if commit['name'] == name)
print(headers['commit'])
EOF
)

echo $DEP_COMMIT
}

rm -f *.tar.lz *.fetched release_notes.html

wget https://vulkan.lunarg.com/doc/view/$VERSION/linux/release_notes.html

VERSION=$(grep "Version" release_notes.html | grep "for Linux" | sed -e 's/<[^>]*>//g' | cut -d " " -f 2)

for i in $(grep "Repo:" release_notes.html | cut -d "\"" -f 2); do
  COMMIT=$(basename $i)
  REPO=$(echo $i | cut -d "/" -f 1-5)
  NAME=$(basename $REPO)
  echo ""
  echo "$NAME"
  echo ""

  # release notes for bugfix releases contain the repo list multiple times
  # only create tarballs for the most recent ones (on top)
  if ! [ -e $NAME.fetched ]; then
    git clone $REPO $NAME-$COMMIT
    cd $NAME-$COMMIT
      git reset --hard $COMMIT || git reset --hard origin/$COMMIT
      git submodule update --init --recursive
      git describe --tags > .git-version
    cd ..
    tar --exclude-vcs -cf $NAME-$COMMIT.tar $NAME-$COMMIT
    plzip -9 $NAME-$COMMIT.tar
    touch $NAME.fetched

    if [ "$NAME" = "glslang" -a ! -e SPIRV-Headers.fetched ]; then
      SPIRV_HEADERS_COMMIT=$(get_known_good glslang-$COMMIT/known_good.json spirv-tools/external/spirv-headers commits)

      git clone https://github.com/KhronosGroup/SPIRV-Headers.git SPIRV-Headers-$SPIRV_HEADERS_COMMIT
      cd SPIRV-Headers-$SPIRV_HEADERS_COMMIT
        git reset --hard $SPIRV_HEADERS_COMMIT || git reset --hard origin/$SPIRV_HEADERS_COMMIT
        git submodule update --init --recursive
        git describe --tags > .git-version
      cd ..
      tar --exclude-vcs -cf SPIRV-Headers-$SPIRV_HEADERS_COMMIT.tar SPIRV-Headers-$SPIRV_HEADERS_COMMIT
      plzip -9 SPIRV-Headers-$SPIRV_HEADERS_COMMIT.tar
      rm -rf SPIRV-Headers-$SPIRV_HEADERS_COMMIT
      touch SPIRV-Headers.fetched
    elif [ "$NAME" = "Vulkan-ValidationLayers" -a ! -e robin-hood-hashing.fetched ]; then
      ROBIN_HOOD_COMMIT=$(get_known_good Vulkan-ValidationLayers-$COMMIT/scripts/known_good.json robin-hood-hashing repos)

      git clone https://github.com/martinus/robin-hood-hashing.git robin-hood-hashing-$ROBIN_HOOD_COMMIT
      cd robin-hood-hashing-$ROBIN_HOOD_COMMIT
        git reset --hard $ROBIN_HOOD_COMMIT || git reset --hard origin/$ROBIN_HOOD_COMMIT
        git submodule update --init --recursive
        git describe --tags > .git-version
      cd ..
      tar --exclude-vcs -cf robin-hood-hashing-$ROBIN_HOOD_COMMIT.tar robin-hood-hashing-$ROBIN_HOOD_COMMIT
      plzip -9 robin-hood-hashing-$ROBIN_HOOD_COMMIT.tar
      rm -rf robin-hood-hashing-$ROBIN_HOOD_COMMIT
      touch robin-hood-hashing.fetched
    elif [ "$NAME" = "Vulkan-Profiles" ]; then
      if [ ! -e jsoncpp.fetched ]; then
        JSONCPP_COMMIT=$(get_known_good Vulkan-Profiles-$COMMIT/scripts/known_good.json jsoncpp repos)

        git clone https://github.com/open-source-parsers/jsoncpp.git jsoncpp-$JSONCPP_COMMIT
        cd jsoncpp-$JSONCPP_COMMIT
          git reset --hard $JSONCPP_COMMIT || git reset --hard origin/$JSONCPP_COMMIT
          git submodule update --init --recursive
          git describe --tags > .git-version
        cd ..
        tar --exclude-vcs -cf jsoncpp-$JSONCPP_COMMIT.tar jsoncpp-$JSONCPP_COMMIT
        plzip -9 jsoncpp-$JSONCPP_COMMIT.tar
        rm -rf jsoncpp-$JSONCPP_COMMIT
        touch jsoncpp.fetched
      fi
      if [ ! -e valijson.fetched ]; then
        VALIJSON_COMMIT=$(get_known_good Vulkan-Profiles-$COMMIT/scripts/known_good.json valijson repos)

        git clone https://github.com/tristanpenman/valijson.git valijson-$VALIJSON_COMMIT
        cd valijson-$VALIJSON_COMMIT
          git reset --hard $VALIJSON_COMMIT || git reset --hard origin/$VALIJSON_COMMIT
          # Intentionally skipping the submodules, as those result in a huge source tarball
          #git submodule update --init --recursive
          git describe --tags > .git-version
        cd ..
        tar --exclude-vcs -cf valijson-$VALIJSON_COMMIT.tar valijson-$VALIJSON_COMMIT
        plzip -9 valijson-$VALIJSON_COMMIT.tar
        rm -rf valijson-$VALIJSON_COMMIT
        touch valijson.fetched
      fi
    fi

    rm -rf $NAME-$COMMIT
  fi

done

if ! [ -e "Vulkan-ExtensionLayer.fetched" ]; then
    git clone https://github.com/KhronosGroup/Vulkan-ExtensionLayer.git Vulkan-ExtensionLayer-sdk-$VERSION
    cd Vulkan-ExtensionLayer-sdk-$VERSION
      git reset --hard sdk-$VERSION || git reset --hard origin/sdk-$VERSION || \
      git reset --hard sdk-$VERSION-TAG || git reset --hard origin/sdk-$VERSION-TAG || \
      git reset --hard sdk.$VERSION-TAG || git reset --hard origin/sdk.$VERSION-TAG
      git submodule update --init --recursive
      git describe --tags > .git-version
    cd ..
    tar --exclude-vcs -cf Vulkan-ExtensionLayer-sdk-$VERSION.tar Vulkan-ExtensionLayer-sdk-$VERSION
    plzip -9 Vulkan-ExtensionLayer-sdk-$VERSION.tar
    rm -rf Vulkan-ExtensionLayer-sdk-$VERSION
    touch Vulkan-ExtensionLayer.fetched
fi

echo $VERSION > VERSION

rm -f release_notes.html
rm -f *.fetched

# Adding this kludge since 1.3.268 is somehow pulling a bad shaderc (the
# commit referenced can't be found in the repo, and a mostly empty archive
# is produced.) So, if we find an unreasonably small shaderc, just pull a
# recent one.
if [ "$(tar tf shaderc-*.tar.lz | wc -l)" -lt "7" ]; then
  rm shaderc-*.tar.*
  lftpget https://github.com/google/shaderc/archive/refs/tags/v2023.8.tar.gz  
  mv v2023.8.tar.gz shaderc-2023.8.tar.gz
  gzip -d shaderc-2023.8.tar.gz
  plzip -9 shaderc-2023.8.tar
fi