summaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2025-06-24 15:54:00 +0800
committerGitHub <noreply@github.com>2025-06-24 07:54:00 +0000
commit47475114d036a391bacdb53a9a1c60e5d35b61bc (patch)
treec891ec9f7784e68bd831c5a7407285d4b18a943d /extras
parentb1fc75fab3a1b700a89a711289598ac74883483c (diff)
Document supported compiler versions in building.md (#7512)
* Document supported compiler versions in building.md Closes https://github.com/shader-slang/slang/issues/7376 * multiple checked versions
Diffstat (limited to 'extras')
-rwxr-xr-xextras/verify-documented-compiler-version.sh141
1 files changed, 141 insertions, 0 deletions
diff --git a/extras/verify-documented-compiler-version.sh b/extras/verify-documented-compiler-version.sh
new file mode 100755
index 000000000..b98a29dc4
--- /dev/null
+++ b/extras/verify-documented-compiler-version.sh
@@ -0,0 +1,141 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+# File paths
+DOCS_FILE="docs/building.md"
+CMAKE_CACHE="build/CMakeCache.txt"
+
+# Check if required files exist
+if [[ ! -f "$DOCS_FILE" ]]; then
+ echo "::warning::Documentation file $DOCS_FILE not found"
+ exit 0
+fi
+
+if [[ ! -f "$CMAKE_CACHE" ]]; then
+ echo "::warning::CMakeCache.txt not found at $CMAKE_CACHE"
+ exit 0
+fi
+
+# Extract compiler path from CMakeCache.txt
+COMPILER_PATH=$(grep "^CMAKE_CXX_COMPILER:FILEPATH=" "$CMAKE_CACHE" | cut -d'=' -f2)
+
+if [[ -z "$COMPILER_PATH" ]]; then
+ echo "::warning::Could not find CMAKE_CXX_COMPILER in CMakeCache.txt"
+ exit 0
+fi
+
+# Determine compiler type and get version
+COMPILER_NAME=$(basename "$COMPILER_PATH")
+COMPILER_VERSION=""
+COMPILER_TYPE=""
+
+if [[ "$COMPILER_NAME" =~ ^g\+\+|^gcc ]]; then
+ COMPILER_TYPE="GCC"
+ # Get GCC version (e.g., "gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0")
+ COMPILER_VERSION=$("$COMPILER_PATH" --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
+elif [[ "$COMPILER_NAME" =~ ^clang\+\+|^clang ]]; then
+ COMPILER_TYPE="Clang"
+ # Get Clang version (e.g., "Ubuntu clang version 15.0.7")
+ COMPILER_VERSION=$("$COMPILER_PATH" --version | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
+elif [[ "$COMPILER_NAME" =~ ^cl\.exe|^cl$ ]]; then
+ COMPILER_TYPE="MSVC"
+ # MSVC version is more complex, extract major version
+ # MSVC outputs version like "19.29.30133" where 19 is the major version
+ COMPILER_VERSION=$("$COMPILER_PATH" 2>&1 | grep -oE 'Version [0-9]+\.[0-9]+' | grep -oE '[0-9]+\.[0-9]+' | head -1)
+else
+ echo "::warning::Unknown compiler type: $COMPILER_NAME"
+ exit 0
+fi
+
+if [[ -z "$COMPILER_VERSION" ]]; then
+ echo "::warning::Could not determine version for compiler: $COMPILER_PATH"
+ exit 0
+fi
+
+# Extract major.minor version only
+COMPILER_MAJOR_MINOR=$(echo "$COMPILER_VERSION" | cut -d'.' -f1,2)
+
+# Function to extract versions from a line
+extract_versions() {
+ local line="$1"
+ local is_msvc="$2"
+
+ # Extract the part between compiler name and "are/is tested in CI"
+ local version_part
+ version_part=$(echo "$line" | sed -E 's/^_[^_]+_ //; s/ (are|is) tested in CI.*//')
+
+ # Split by "and" and extract version numbers
+ local versions=()
+ if [[ "$is_msvc" == "true" ]]; then
+ # For MSVC, just extract numbers
+ while IFS= read -r version; do
+ version=$(echo "$version" | grep -oE '[0-9]+' | head -1)
+ [[ -n "$version" ]] && versions+=("$version")
+ done < <(echo "$version_part" | tr ',' '\n' | sed 's/ and /\n/g')
+ else
+ # For GCC/Clang, extract major.minor versions
+ while IFS= read -r version; do
+ version=$(echo "$version" | grep -oE '[0-9]+\.[0-9]+' | head -1)
+ [[ -n "$version" ]] && versions+=("$version")
+ done < <(echo "$version_part" | tr ',' '\n' | sed 's/ and /\n/g')
+ fi
+
+ echo "${versions[@]}"
+}
+
+# Parse the documentation for the expected versions
+EXPECTED_VERSIONS=()
+VERSION_FOUND=false
+
+case "$COMPILER_TYPE" in
+"GCC")
+ DOC_LINE=$(grep -E "^_GCC_ .+ (are|is) tested in CI" "$DOCS_FILE" | head -1)
+ if [[ -n "$DOC_LINE" ]]; then
+ # shellcheck disable=SC2207
+ EXPECTED_VERSIONS=($(extract_versions "$DOC_LINE" "false"))
+ fi
+ ;;
+"Clang")
+ DOC_LINE=$(grep -E "^_Clang_ .+ (are|is) tested in CI" "$DOCS_FILE" | head -1)
+ if [[ -n "$DOC_LINE" ]]; then
+ # shellcheck disable=SC2207
+ EXPECTED_VERSIONS=($(extract_versions "$DOC_LINE" "false"))
+ fi
+ ;;
+"MSVC")
+ # For MSVC, we only compare major version
+ DOC_LINE=$(grep -E "^_MSVC_ .+ (are|is) tested in CI" "$DOCS_FILE" | head -1)
+ if [[ -n "$DOC_LINE" ]]; then
+ # shellcheck disable=SC2207
+ EXPECTED_VERSIONS=($(extract_versions "$DOC_LINE" "true"))
+ fi
+ COMPILER_MAJOR_MINOR=$(echo "$COMPILER_VERSION" | cut -d'.' -f1)
+ ;;
+esac
+
+if [[ ${#EXPECTED_VERSIONS[@]} -eq 0 ]]; then
+ echo "::warning::Could not find expected version for $COMPILER_TYPE in $DOCS_FILE"
+ exit 0
+fi
+
+# Check if current version matches any expected version
+for expected in "${EXPECTED_VERSIONS[@]}"; do
+ if [[ "$COMPILER_MAJOR_MINOR" == "$expected" ]]; then
+ VERSION_FOUND=true
+ break
+ fi
+done
+
+# Report results
+if [[ "$VERSION_FOUND" == "false" ]]; then
+ EXPECTED_LIST=$(
+ IFS=', '
+ echo "${EXPECTED_VERSIONS[*]}"
+ )
+ echo "::warning::Compiler version mismatch for $COMPILER_TYPE: Documentation says $EXPECTED_LIST but found $COMPILER_MAJOR_MINOR (full version: $COMPILER_VERSION)"
+else
+ echo "✓ Compiler version matches: $COMPILER_TYPE $COMPILER_MAJOR_MINOR"
+fi
+
+exit 0