Created
September 19, 2025 00:56
-
-
Save yeahdongcn/f57a37bfadcb0a607a6b0e5e710cbef2 to your computer and use it in GitHub Desktop.
VULKAN SDK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ARG UBUNTU_VERSION=22.04 | |
ARG DOCKERHUB_REGISTRY=docker.io/library | |
# ---------- Stage 1: Build Vulkan SDK ---------- | |
FROM --platform=linux/arm64 ${DOCKERHUB_REGISTRY}/ubuntu:${UBUNTU_VERSION} AS builder | |
ENV DEBIAN_FRONTEND=noninteractive | |
# Install build tools and dependencies | |
RUN apt update && apt install -y --no-install-recommends \ | |
build-essential cmake ninja-build git python3-pip curl pkg-config \ | |
libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev \ | |
ca-certificates && \ | |
apt clean && rm -rf /var/lib/apt/lists/* | |
WORKDIR /vulkan | |
ARG VULKAN_BRANCH=vulkan-sdk-1.4.321 | |
ARG SHADERC_COMMIT=a298b382ea7af052b549c08a799a56e9ec4bf471 | |
# Build Vulkan-Headers | |
RUN git clone --branch ${VULKAN_BRANCH} --depth 1 https://github.com/KhronosGroup/Vulkan-Headers.git && \ | |
cmake -S Vulkan-Headers -B Vulkan-Headers/build -DCMAKE_INSTALL_PREFIX=/opt/vulkan -DCMAKE_BUILD_TYPE=Release && \ | |
cmake --build Vulkan-Headers/build -j $(nproc) && \ | |
cmake --install Vulkan-Headers/build | |
# Build Vulkan-Loader | |
RUN git clone --branch ${VULKAN_BRANCH} --depth 1 https://github.com/KhronosGroup/Vulkan-Loader.git && \ | |
cmake -S Vulkan-Loader -B Vulkan-Loader/build \ | |
-DCMAKE_INSTALL_PREFIX=/opt/vulkan \ | |
-DVULKAN_HEADERS_INSTALL_DIR=/opt/vulkan \ | |
-DCMAKE_BUILD_TYPE=Release && \ | |
cmake --build Vulkan-Loader/build -j $(nproc) && \ | |
cmake --install Vulkan-Loader/build | |
# Build glslang (required by shaderc) | |
RUN git clone --branch ${VULKAN_BRANCH} --depth 1 https://github.com/KhronosGroup/glslang.git && \ | |
cd glslang && python3 update_glslang_sources.py && cd .. && \ | |
cmake -S glslang -B glslang/build -DCMAKE_INSTALL_PREFIX=/opt/vulkan -DCMAKE_BUILD_TYPE=Release && \ | |
cmake --build glslang/build -j $(nproc) && \ | |
cmake --install glslang/build | |
# Build shaderc and glslc | |
RUN git clone https://github.com/google/shaderc.git && \ | |
cd shaderc && git checkout ${SHADERC_COMMIT} && \ | |
python3 utils/git-sync-deps && cd .. && \ | |
cmake -S shaderc -B shaderc/build -G Ninja \ | |
-DCMAKE_INSTALL_PREFIX=/opt/vulkan \ | |
-DSHADERC_SKIP_TESTS=ON \ | |
-DCMAKE_BUILD_TYPE=Release && \ | |
cmake --build shaderc/build -j $(nproc) && \ | |
cmake --install shaderc/build | |
# ---------- Stage 2: Final Development Image ---------- | |
FROM ${DOCKERHUB_REGISTRY}/ubuntu:${UBUNTU_VERSION} | |
ENV DEBIAN_FRONTEND=noninteractive | |
# Install development dependencies | |
RUN apt update && apt install -y --no-install-recommends \ | |
libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev \ | |
build-essential ca-certificates ccache curl git libcurl4-openssl-dev \ | |
&& apt clean && rm -rf /var/lib/apt/lists/* | |
# Copy Vulkan SDK from builder stage | |
COPY --from=builder /opt/vulkan /opt/vulkan | |
# Set environment variables | |
ENV VULKAN_SDK=/opt/vulkan | |
ENV PATH=$VULKAN_SDK/bin:$PATH | |
ENV LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH | |
ENV CMAKE_PREFIX_PATH=$VULKAN_SDK:$CMAKE_PREFIX_PATH | |
ENV PKG_CONFIG_PATH=$VULKAN_SDK/lib/pkgconfig:$PKG_CONFIG_PATH | |
FROM --platform=linux/amd64 ${DOCKERHUB_REGISTRY}/ubuntu:${UBUNTU_VERSION} AS amd64 | |
ENV DEBIAN_FRONTEND=noninteractive | |
# Install development dependencies | |
RUN apt update && apt install -y --no-install-recommends \ | |
wget xz-utils \ | |
libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev \ | |
build-essential ca-certificates ccache curl git libcurl4-openssl-dev \ | |
&& apt clean && rm -rf /var/lib/apt/lists/* | |
# https://packages.lunarg.com/ | |
# Deprecation Notice: | |
# LunarG will discontinue updating the Ubuntu Packages to newer SDK releases after the month of May, 2025. | |
# The Linux tarball should be used instead to keep up to date with Vulkan SDK releases. | |
ARG VULKAN_VERSION=1.4.321.1 | |
RUN wget -qO /tmp/vulkan-sdk.tar.xz https://sdk.lunarg.com/sdk/download/${VULKAN_VERSION}/linux/vulkan-sdk-linux-x86_64-${VULKAN_VERSION}.tar.xz && \ | |
mkdir -p /opt/vulkan && \ | |
tar -xf /tmp/vulkan-sdk.tar.xz -C /tmp --strip-components=1 && \ | |
mv /tmp/x86_64/* /opt/vulkan/ && \ | |
rm -rf /tmp/* | |
# Set environment variables | |
ENV VULKAN_SDK=/opt/vulkan | |
ENV PATH=$VULKAN_SDK/bin:$PATH | |
ENV LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH | |
ENV CMAKE_PREFIX_PATH=$VULKAN_SDK:$CMAKE_PREFIX_PATH | |
ENV PKG_CONFIG_PATH=$VULKAN_SDK/lib/pkgconfig:$PKG_CONFIG_PATH |
Author
yeahdongcn
commented
Sep 19, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment