Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions .github/actions/setup-vulkan-sdk/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Setup Vulkan SDK
description: Configure shared Vulkan SDK setup for prebuild workflows.

inputs:
platform:
description: Build platform
required: true
arch:
description: Build architecture
required: true
version:
description: Optional Vulkan SDK version in x.y.z.n form, or latest
required: false

runs:
using: composite
steps:
- name: Resolve Vulkan SDK version
shell: bash
env:
INPUT_VERSION: ${{ inputs.version }}
run: |
CONFIG_PATH=".github/config/vulkan-sdk-version.txt"

if [ -n "${INPUT_VERSION:-}" ]; then
RESOLVED_VERSION="$INPUT_VERSION"
elif [ -f "$CONFIG_PATH" ]; then
RESOLVED_VERSION=$(tr -d '\r\n[:space:]' < "$CONFIG_PATH")
else
RESOLVED_VERSION="latest"
fi

if [ -z "$RESOLVED_VERSION" ]; then
echo "::error::Resolved Vulkan SDK version is empty"
exit 1
fi

if [ "$RESOLVED_VERSION" != "latest" ] && ! printf '%s' "$RESOLVED_VERSION" | rg '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' > /dev/null; then
echo "::error::Vulkan SDK version must be latest or use x.y.z.n format"
exit 1
fi

echo "VULKAN_VERSION=$RESOLVED_VERSION" >> "$GITHUB_ENV"

- name: Validate Linux ARM64 Vulkan cache settings
if: ${{ inputs.platform == 'linux' && inputs.arch == 'arm64' }}
shell: bash
run: |
if [ -z "${MODEL_S3_BUCKET:-}" ]; then
echo "::error::MODEL_S3_BUCKET is required for Linux ARM64 Vulkan cache"
exit 1
fi

- name: Install Vulkan SDK (Linux)
if: ${{ inputs.platform == 'linux' || inputs.platform == 'android' }}
shell: bash
run: |
if [ "$VULKAN_VERSION" = "latest" ]; then
VULKAN_URL="https://sdk.lunarg.com/sdk/download/latest/linux/vulkan_sdk.tar.xz"
else
VULKAN_URL="https://sdk.lunarg.com/sdk/download/${VULKAN_VERSION}/linux/vulkansdk-linux-x86_64-${VULKAN_VERSION}.tar.xz"
fi

sudo apt install -y xz-utils
wget -q -O /tmp/vulkansdk.tar.xz "$VULKAN_URL"
mkdir -p "$HOME/vulkan"
tar xf /tmp/vulkansdk.tar.xz --directory "$HOME/vulkan" --strip-components=1

- name: Setup Vulkan SDK path in Linux x64
if: ${{ (inputs.platform == 'linux' && inputs.arch == 'x64') || inputs.platform == 'android' }}
shell: bash
run: |
echo "VULKAN_SDK=$HOME/vulkan/x86_64" >> "$GITHUB_ENV"

- name: Setup Vulkan SDK path in Linux arm64
if: ${{ inputs.platform == 'linux' && inputs.arch == 'arm64' }}
shell: bash
run: |
echo "VULKAN_SDK=$HOME/vulkan/aarch64" >> "$GITHUB_ENV"

cd "$HOME/vulkan"

if [ "$VULKAN_VERSION" = "latest" ]; then
SDK_VERSION=$(grep -o 'sdk/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' README.txt | head -1 | sed 's|sdk/||')
else
SDK_VERSION="$VULKAN_VERSION"
fi

if [ -z "$SDK_VERSION" ]; then
echo "::error::Unable to determine Vulkan SDK version from README.txt"
exit 1
fi

S3_KEY="vulkan-sdk-cache/linux-arm64-${SDK_VERSION}.tar.gz"

echo "Vulkan SDK version: ${SDK_VERSION}"

if aws s3 cp "s3://${MODEL_S3_BUCKET}/${S3_KEY}" /tmp/vulkan-arm64-cache.tar.gz 2>/dev/null; then
echo "Found cached Vulkan SDK, extracting..."
tar xzf /tmp/vulkan-arm64-cache.tar.gz -C "$HOME/vulkan"
rm /tmp/vulkan-arm64-cache.tar.gz
else
echo "No cache found, building Vulkan SDK for ARM64..."
./vulkansdk --maxjobs

echo "Uploading compiled SDK to S3..."
tar czf /tmp/vulkan-arm64-cache.tar.gz aarch64
aws s3 cp /tmp/vulkan-arm64-cache.tar.gz "s3://${MODEL_S3_BUCKET}/${S3_KEY}"
rm /tmp/vulkan-arm64-cache.tar.gz
fi

- name: Export Vulkan SDK variables in Linux
if: ${{ inputs.platform == 'linux' || inputs.platform == 'android' }}
shell: bash
run: |
echo "PATH=$VULKAN_SDK/bin:$PATH" >> "$GITHUB_ENV"
echo "LD_LIBRARY_PATH=$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" >> "$GITHUB_ENV"
echo "VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d" >> "$GITHUB_ENV"
echo "PKG_CONFIG_PATH=$VULKAN_SDK/share/pkgconfig:$VULKAN_SDK/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" >> "$GITHUB_ENV"

- name: Install Vulkan SDK (Windows)
if: ${{ inputs.platform == 'win32' }}
shell: powershell
run: |
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

if ($env:VULKAN_VERSION -eq "latest") {
$url = "https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe"
} else {
$url = "https://sdk.lunarg.com/sdk/download/$env:VULKAN_VERSION/windows/vulkansdk-windows-X64-$env:VULKAN_VERSION.exe"
}
$out = "$env:RUNNER_TEMP\vulkan-sdk.exe"

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Write-Host "Downloading Vulkan SDK from $url to $out"
Start-BitsTransfer -Source $url -Destination $out

Write-Host "Installing Vulkan SDK..."
& $out --root "C:\VulkanSDK" --accept-licenses --default-answer --confirm-command install

"VULKAN_SDK=C:\VulkanSDK" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
"PATH=C:\VulkanSDK\Bin;$Env:PATH" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
1 change: 1 addition & 0 deletions .github/config/vulkan-sdk-version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1.4.341.1
79 changes: 7 additions & 72 deletions .github/workflows/prebuilds-lib-infer-diffusion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -248,78 +248,13 @@ jobs:
name: Install required packages linux
run: sudo apt-get install libxi-dev libxtst-dev libxrandr-dev

- if: ${{ startsWith(matrix.os, 'ubuntu-') }}
name: Install vulkan in linux
run: |
sudo apt install -y xz-utils
wget -q -O /tmp/vulkansdk.tar.xz https://sdk.lunarg.com/sdk/download/latest/linux/vulkan_sdk.tar.xz
cd ~
mkdir -p vulkan
cd vulkan
tar xf /tmp/vulkansdk.tar.xz --strip-components=1

- if: ${{ (matrix.platform == 'linux' && matrix.arch == 'x64') || (matrix.platform == 'android') }}
name: Setup vulkan sdk path in linux x64
run: |
VULKAN_SDK=~/vulkan/x86_64
echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV

- if: ${{ matrix.platform == 'linux' && matrix.arch == 'arm64' }}
name: Setup vulkan sdk path in linux arm64
run: |
VULKAN_SDK=~/vulkan/aarch64
echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV

cd ~/vulkan

SDK_VERSION=$(grep -o 'sdk/[0-9]*\.[0-9]*' README.txt | head -1 | sed 's|sdk/||')
S3_BUCKET="${{ secrets.MODEL_S3_BUCKET }}"
S3_KEY="vulkan-sdk-cache/linux-arm64-${SDK_VERSION}.tar.gz"

echo "Vulkan SDK version: ${SDK_VERSION}"

if aws s3 cp "s3://${S3_BUCKET}/${S3_KEY}" /tmp/vulkan-arm64-cache.tar.gz 2>/dev/null; then
echo "Found cached Vulkan SDK, extracting..."
tar xzf /tmp/vulkan-arm64-cache.tar.gz -C ~/vulkan
rm /tmp/vulkan-arm64-cache.tar.gz
else
echo "No cache found, building Vulkan SDK for ARM64..."
./vulkansdk --maxjobs

echo "Uploading compiled SDK to S3..."
tar czf /tmp/vulkan-arm64-cache.tar.gz aarch64
aws s3 cp /tmp/vulkan-arm64-cache.tar.gz "s3://${S3_BUCKET}/${S3_KEY}"
rm /tmp/vulkan-arm64-cache.tar.gz
fi

- if: ${{ startsWith(matrix.os, 'ubuntu-') }}
name: Export rest of vulkan sdk variables in linux
run: |
echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" >> $GITHUB_ENV
echo "VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$VULKAN_SDK/share/pkgconfig:$VULKAN_SDK/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" >> $GITHUB_ENV

- if: ${{ matrix.platform == 'win32' }}
name: Install Vulkan SDK (Windows)
shell: powershell
run: |
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

$url = "https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe"
$out = "$env:RUNNER_TEMP\vulkan-sdk.exe"

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Write-Host "Downloading Vulkan SDK from $url to $out"
Start-BitsTransfer -Source $url -Destination $out

Write-Host "Installing Vulkan SDK..."
& $out --root "C:\VulkanSDK" --accept-licenses --default-answer --confirm-command install

"VULKAN_SDK=C:\VulkanSDK" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
"PATH=C:\VulkanSDK\Bin;$Env:PATH" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Setup Vulkan SDK
uses: ./.github/actions/setup-vulkan-sdk
env:
MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }}
with:
platform: ${{ matrix.platform }}
arch: ${{ matrix.arch }}

- if: ${{ matrix.platform == 'android' }}
name: Configure runner for cross compilation - android
Expand Down
85 changes: 7 additions & 78 deletions .github/workflows/prebuilds-qvac-lib-infer-llamacpp-embed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -250,84 +250,13 @@ jobs:
name: Install required packages linux
run: sudo apt-get install libxi-dev libxtst-dev libxrandr-dev

- if: ${{ startsWith(matrix.os, 'ubuntu-') }}
name: Install vulkan in linux
run: |
sudo apt install xz-utils
# Get the latest vulkan sdk to be consistent with windows
wget -q -O /tmp/vulkansdk.tar.xz https://sdk.lunarg.com/sdk/download/latest/linux/vulkan_sdk.tar.xz
cd ~
mkdir vulkan
cd vulkan
tar xf /tmp/vulkansdk.tar.xz --strip-components=1

- if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'ubuntu-24.04' }}
name: Setup vulkan sdk path in linux x64
run: |
VULKAN_SDK=~/vulkan/x86_64
echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV

- if: ${{ matrix.os == 'ubuntu-22.04-arm' }}
name: Setup vulkan sdk path in linux arm64
run: |
VULKAN_SDK=~/vulkan/aarch64
echo "VULKAN_SDK=$VULKAN_SDK" >> $GITHUB_ENV

cd ~/vulkan

# Extract SDK major.minor version from README.txt (e.g., "1.4" from "1.4.341.0")
SDK_VERSION=$(grep -o 'sdk/[0-9]*\.[0-9]*' README.txt | head -1 | sed 's|sdk/||')
S3_BUCKET="${{ secrets.MODEL_S3_BUCKET }}"
S3_KEY="vulkan-sdk-cache/linux-arm64-${SDK_VERSION}.tar.gz"

echo "Vulkan SDK version: ${SDK_VERSION}"

# Try to download cached build from S3
if aws s3 cp "s3://${S3_BUCKET}/${S3_KEY}" /tmp/vulkan-arm64-cache.tar.gz 2>/dev/null; then
echo "Found cached Vulkan SDK, extracting..."
tar xzf /tmp/vulkan-arm64-cache.tar.gz -C ~/vulkan
rm /tmp/vulkan-arm64-cache.tar.gz
else
echo "No cache found, building Vulkan SDK for ARM64..."
./vulkansdk --maxjobs

# Upload the compiled SDK to S3 for future runs
echo "Uploading compiled SDK to S3..."
tar czf /tmp/vulkan-arm64-cache.tar.gz aarch64
aws s3 cp /tmp/vulkan-arm64-cache.tar.gz "s3://${S3_BUCKET}/${S3_KEY}"
rm /tmp/vulkan-arm64-cache.tar.gz
fi

- if: ${{ startsWith(matrix.os, 'ubuntu-') }}
name: Export rest of vulkan sdk variables in linux
run: |
echo "PATH=$VULKAN_SDK/bin:$PATH" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" >> $GITHUB_ENV
echo "VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$VULKAN_SDK/share/pkgconfig:$VULKAN_SDK/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" >> $GITHUB_ENV

- if: ${{ matrix.platform == 'win32' }}
name: Install Vulkan SDK (Windows)
shell: powershell
run: |
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

# Use a stable URL (latest) but download with BITS (more reliable than Invoke-WebRequest)
$url = "https://sdk.lunarg.com/sdk/download/latest/windows/vulkan-sdk.exe"
$out = "$env:RUNNER_TEMP\vulkan-sdk.exe"

# Some environments need TLS 1.2 explicitly
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Write-Host "Downloading Vulkan SDK from $url to $out"
Start-BitsTransfer -Source $url -Destination $out

Write-Host "Installing Vulkan SDK..."
& $out --root "C:\VulkanSDK" --accept-licenses --default-answer --confirm-command install

"VULKAN_SDK=C:\VulkanSDK" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
"PATH=C:\VulkanSDK\Bin;$Env:PATH" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Setup Vulkan SDK
uses: ./.github/actions/setup-vulkan-sdk
env:
MODEL_S3_BUCKET: ${{ secrets.MODEL_S3_BUCKET }}
with:
platform: ${{ matrix.platform }}
arch: ${{ matrix.arch }}

- if: ${{ matrix.platform == 'android' }}
name: Configure runner for cross compilation - android
Expand Down
Loading
Loading