#!/usr/bin/env bash set -euo pipefail project_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" vendor_root="${project_root}/vendor" cache_root="${vendor_root}/cache" source_root="${vendor_root}/source" tool_root="${vendor_root}/tools" work_root="${vendor_root}/work" toolchain_root="${project_root}/.toolchains" mkdir -p "${cache_root}" "${source_root}" "${tool_root}" "${work_root}" "${toolchain_root}" download() { local url="$1" local output="$2" if [[ ! -f "${output}" ]]; then printf 'Downloading %s\n' "${url}" curl --fail --location --retry 5 --retry-delay 2 --continue-at - --output "${output}" "${url}" fi } verify_sha256() { local expected="$1" local file="$2" printf '%s %s\n' "${expected}" "${file}" | sha256sum --check --status } extract_archive() { local archive="$1" local destination="$2" if [[ -d "${destination}" ]]; then printf 'Source already present: %s\n' "${destination}" return fi mkdir -p "$(dirname "${destination}")" local temporary temporary="$(mktemp -d "${work_root}/extract.XXXXXX")" tar -xf "${archive}" --strip-components=1 -C "${temporary}" mv "${temporary}" "${destination}" } fetch_snapshot() { local name="$1" local url="$2" local revision="$3" local destination="$4" if [[ -d "${destination}" ]]; then printf 'Source already present: %s\n' "${destination}" return fi local temporary temporary="$(mktemp -d "${work_root}/${name}.XXXXXX")" git -C "${temporary}" init --quiet git -C "${temporary}" remote add origin "${url}" git -C "${temporary}" fetch --quiet --depth 1 origin "${revision}" git -C "${temporary}" checkout --quiet --detach FETCH_HEAD mv "${temporary}" "${destination}" } sdl_archive="${cache_root}/SDL3-3.4.12.tar.gz" download "https://github.com/libsdl-org/SDL/releases/download/release-3.4.12/SDL3-3.4.12.tar.gz" "${sdl_archive}" verify_sha256 "f07b958a9ac5020fb7a44cadb957f658b2149c3c8abb4f63145fac9303249db7" "${sdl_archive}" extract_archive "${sdl_archive}" "${source_root}/sdl" ccache_archive="${cache_root}/ccache-4.13.6.tar.xz" download "https://github.com/ccache/ccache/releases/download/v4.13.6/ccache-4.13.6.tar.xz" "${ccache_archive}" verify_sha256 "a7de667ca08cf67c3c8af9f213f6aa701a1188a2b3163fb74483858ce5e79fbb" "${ccache_archive}" extract_archive "${ccache_archive}" "${source_root}/ccache" ccache_binary_archive="${cache_root}/ccache-4.13.6-linux-x86_64-glibc.tar.xz" download "https://github.com/ccache/ccache/releases/download/v4.13.6/ccache-4.13.6-linux-x86_64-glibc.tar.xz" "${ccache_binary_archive}" verify_sha256 "508b2a1217dc6e04a23e967c7b95a0fb45d8a7e16fde9e180919698f2e2be060" "${ccache_binary_archive}" extract_archive "${ccache_binary_archive}" "${toolchain_root}/ccache/4.13.6" mkdir -p "${toolchain_root}/ccache/current" ln -sfn "${toolchain_root}/ccache/4.13.6/ccache" "${toolchain_root}/ccache/current/ccache" valgrind_archive="${cache_root}/valgrind-3.27.1.tar.bz2" download "https://ftp.funet.fi/pub/mirrors/sourceware.org/pub/valgrind/valgrind-3.27.1.tar.bz2" "${valgrind_archive}" verify_sha256 "5d589152eb8071c02feab8ce6ab719e431a1fbc3e2b1700f5432632a8b9264dc" "${valgrind_archive}" extract_archive "${valgrind_archive}" "${source_root}/valgrind" googletest_archive="${cache_root}/googletest-1.17.0.tar.gz" download "https://github.com/google/googletest/archive/refs/tags/v1.17.0.tar.gz" "${googletest_archive}" verify_sha256 "65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c" "${googletest_archive}" extract_archive "${googletest_archive}" "${source_root}/googletest" mkdir -p "${source_root}/vulkan" fetch_snapshot "vulkan-headers" "https://github.com/KhronosGroup/Vulkan-Headers.git" "8864cdc896bbc2a9b6eb36b3218fc9ef57908d77" "${source_root}/vulkan/headers" fetch_snapshot "vulkan-loader" "https://github.com/KhronosGroup/Vulkan-Loader.git" "a9e72c66d5cb79911eb9a9063bf4016dd0a3a123" "${source_root}/vulkan/loader" fetch_snapshot "vulkan-utility-libraries" "https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git" "a96bd4933c6adfc21329d15e9999791a0153bbf3" "${source_root}/vulkan/utility-libraries" fetch_snapshot "spirv-headers" "https://github.com/KhronosGroup/SPIRV-Headers.git" "ad9184e76a66b1001c29db9b0a3e87f646c64de0" "${source_root}/vulkan/spirv-headers" fetch_snapshot "spirv-tools" "https://github.com/KhronosGroup/SPIRV-Tools.git" "0539c81f69a3daeb706fd3477dca61435b475156" "${source_root}/vulkan/spirv-tools" fetch_snapshot "glslang" "https://github.com/KhronosGroup/glslang.git" "275822a6261ee689aadb1da5f09a0ec2f058685c" "${source_root}/vulkan/glslang" fetch_snapshot "validation-layers" "https://github.com/KhronosGroup/Vulkan-ValidationLayers.git" "b9d4f9ead8d97c1bb0d174ea07d8aed8273818a5" "${source_root}/vulkan/validation-layers" "${project_root}/tools/vendor/sync-skia.sh" "${project_root}/tools/vendor/sync-v8.sh" "${project_root}/tools/vendor/strip-vcs.sh" printf 'Vendor bootstrap complete.\n'