# syntax=docker/dockerfile:1.7 ARG BASE_IMAGE=nvidia/cuda:12.6.3-devel-ubuntu22.04 FROM ${BASE_IMAGE} ARG TARGETARCH ARG XMAKE_VERSION=3.0.9 ARG RUST_VERSION=1.92.0 ARG RUSTUP_VERSION=1.28.2 LABEL org.opencontainers.image.title="CrossDesk Linux build environment" \ org.opencontainers.image.description="Ubuntu 22.04 build environment for CrossDesk" \ org.opencontainers.image.source="https://github.com/kunkundi/crossdesk" \ org.opencontainers.image.licenses="GPL-3.0-only" ENV DEBIAN_FRONTEND=noninteractive \ TZ=Etc/UTC \ LANG=C.UTF-8 \ LC_ALL=C.UTF-8 \ RUSTUP_HOME=/opt/rustup \ CARGO_HOME=/opt/cargo \ XMAKE_GLOBALDIR=/data \ XMAKE_ROOT=y \ CUDA_PATH=/usr/local/cuda \ PATH=/root/.local/bin:/opt/cargo/bin:/usr/local/bin:${PATH} SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN apt-get update \ && apt-get install -y --no-install-recommends \ autoconf \ automake \ binutils \ bison \ build-essential \ ca-certificates \ ccache \ cmake \ curl \ dbus \ dpkg-dev \ file \ flex \ gettext \ git \ libasound2-dev \ libdbus-1-dev \ libdrm-dev \ libegl1-mesa-dev \ libffi-dev \ libfontconfig1-dev \ libfreetype6-dev \ libgl1-mesa-dev \ libmount-dev \ libpulse-dev \ libreadline-dev \ libsndio-dev \ libssl-dev \ libtool \ libx11-dev \ libxcb-xfixes0-dev \ libxcb-randr0-dev \ libxcb-shape0-dev \ libxcb-shm0-dev \ libxcb-xinerama0-dev \ libxcb-xkb-dev \ libxcb-xtest0-dev \ libxcursor-dev \ libxext-dev \ libxfixes-dev \ libxft-dev \ libxi-dev \ libxinerama-dev \ libxkbcommon-dev \ libxrandr-dev \ libxrender-dev \ libxtst-dev \ libxv-dev \ make \ nasm \ ninja-build \ patch \ patchelf \ perl \ pkg-config \ python3 \ python3-pip \ unzip \ xutils-dev \ xz-utils \ yasm \ zip \ zlib1g-dev \ && rm -rf /var/lib/apt/lists/* RUN export GITHUB_ACTIONS=true \ && curl -fsSL https://xmake.io/shget.text \ | bash -s -- "v${XMAKE_VERSION}" \ && source ~/.xmake/profile \ && xmake --version | grep -F "v${XMAKE_VERSION}" RUN case "${TARGETARCH}" in \ amd64) \ rustup_arch="x86_64-unknown-linux-gnu"; \ rustup_sha256="20a06e644b0d9bd2fbdbfd52d42540bdde820ea7df86e92e533c073da0cdd43c" \ ;; \ arm64) \ rustup_arch="aarch64-unknown-linux-gnu"; \ rustup_sha256="e3853c5a252fca15252d07cb23a1bdd9377a8c6f3efa01531109281ae47f841c" \ ;; \ *) echo "Unsupported architecture: ${TARGETARCH}" >&2; exit 1 ;; \ esac \ && curl --proto '=https' --tlsv1.2 --fail --show-error --location \ "https://static.rust-lang.org/rustup/archive/${RUSTUP_VERSION}/${rustup_arch}/rustup-init" \ -o /tmp/rustup-init \ && echo "${rustup_sha256} /tmp/rustup-init" | sha256sum --check - \ && chmod 0755 /tmp/rustup-init \ && /tmp/rustup-init -y --no-modify-path --profile minimal \ --default-toolchain "${RUST_VERSION}" \ && rm -f /tmp/rustup-init \ && rustc --version \ && cargo --version WORKDIR /tmp/crossdesk-dependencies COPY xmake.lua ./xmake.lua COPY xmake ./xmake COPY thirdparty ./thirdparty COPY submodules/xmake.lua ./submodules/xmake.lua COPY submodules/minirtc/xmake.lua ./submodules/minirtc/xmake.lua COPY submodules/minirtc/thirdparty ./submodules/minirtc/thirdparty # Configure the real project manifests so the image cache stays aligned with # CrossDesk's exact dependency graph. Source files are intentionally excluded # from the Docker context; source-only changes therefore reuse this layer. RUN xmake repo -u --root \ && xmake f -m release --USE_CUDA=true --root -y \ && rm -rf /data/.xmake/cache /tmp/crossdesk-dependencies \ && mkdir -p /workspace WORKDIR /workspace COPY docker/linux-build/verify-build-image.sh \ /usr/local/bin/verify-crossdesk-build-image COPY docker/linux-build/verify-glibc-baseline.sh \ /usr/local/bin/verify-crossdesk-glibc-baseline RUN chmod 0755 \ /usr/local/bin/verify-crossdesk-build-image \ /usr/local/bin/verify-crossdesk-glibc-baseline \ && verify-crossdesk-build-image CMD ["bash"]