From 07b032719ddf7bf8542e43fb74c9c7d749236f4f Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 15 Sep 2025 22:20:18 +0200 Subject: [PATCH] Dockerfile: WIP --- .dockerignore | 4 ++ Dockerfile | 102 ++++++++++++++++++++++++++++++++++++++++++++ Dockerfile.el9 | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 219 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Dockerfile.el9 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..1bc025ad --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +build* +cmake-build* +node_modules +frontend/node_modules \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..59c757e7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,102 @@ +FROM nvidia/cuda:13.0.1-devel-rockylinux8 +LABEL authors="leonarski_f" + +# Update base and install common utilities +RUN dnf -y update && \ + dnf -y install --enablerepo=devel \ + dnf-plugins-core \ + epel-release \ + git \ + which \ + ca-certificates \ + wget \ + tar \ + xz \ + make \ + cmake \ + gcc-toolset-13 \ + gcc-toolset-13-gcc \ + gcc-toolset-13-gcc-c++ \ + gcc-toolset-13-gdb \ + rpm-build \ + rpmdevtools \ + numactl-devel \ + openssl-devel \ + redhat-rpm-config \ + ninja-build \ + libxcb-devel \ + xcb-util-wm-devel \ + xcb-util-image-devel \ + xcb-util-keysyms-devel \ + xcb-util-renderutil-devel \ + libxkbcommon-devel \ + libX11-devel \ + libXext-devel \ + libXrender-devel \ + libXi-devel \ + libXrandr-devel \ + libXcursor-devel \ + libXfixes-devel \ + libXinerama-devel \ + mesa-libGL-devel \ + mesa-libEGL-devel \ + dbus-devel \ + zlib-devel \ + glib2-devel \ + fontconfig-devel \ + openssl-static \ + zlib-static \ + freetype-devel && \ + dnf clean all && rm -rf /var/cache/dnf + +# Install a recent Node.js (NodeSource). Change NODE_MAJOR if you want another major version. +ARG NODE_MAJOR=22 +RUN curl -fsSL https://rpm.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \ + dnf -y install nodejs && \ + dnf clean all && rm -rf /var/cache/dnf && \ + node --version && npm --version && (corepack enable || true) + +ARG EIGEN_TAG=3.4.0 +RUN git clone --depth 1 --branch ${EIGEN_TAG} https://gitlab.com/libeigen/eigen.git /opt/eigen-3.4 + +# Make GCC/G++ 13 the default for builds +ENV GCC_TOOLSET_ROOT=/opt/rh/gcc-toolset-13/root +ENV PATH=${GCC_TOOLSET_ROOT}/usr/bin:${PATH} +ENV CC=${GCC_TOOLSET_ROOT}/usr/bin/gcc +ENV CXX=${GCC_TOOLSET_ROOT}/usr/bin/g++ + +ARG QT_VERSION=6.9.0 +ARG QT_PREFIX=/opt/qt-${QT_VERSION}-static +RUN set -eux; \ + cd /tmp; \ + curl -LO https://download.qt.io/official_releases/qt/6.9/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz; \ + tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz; \ + mkdir -p qt-everywhere-src-${QT_VERSION}/build && cd qt-everywhere-src-${QT_VERSION}/build; \ + cmake -G Ninja \ + -DQT_BUILD_SUBMODULES="qtbase;qtshadertools;qtdeclarative;qtcharts" \ + -DBUILD_SHARED_LIBS=OFF \ + -DQT_BUILD_TESTS=OFF \ + -DQT_BUILD_EXAMPLES=OFF \ + -DQT_FEATURE_dbus=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${QT_PREFIX} \ + -DCMAKE_C_COMPILER=${CC} \ + -DCMAKE_CXX_COMPILER=${CXX} \ + -DQT_FEATURE_openssl=ON \ + -DQT_FEATURE_openssl_linked=ON \ + -DOPENSSL_USE_STATIC_LIBS=TRUE \ + ..; \ + cmake --build . -j"$(nproc)"; \ + cmake --install .; \ + cd /; rm -rf /tmp/qt-everywhere-src-${QT_VERSION} /tmp/qt-everywhere-src-${QT_VERSION}.tar.xz + +ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen-3.4 + +# Set workdir for your project +WORKDIR /workspace + +# Copy your project (expects a top-level CMakeLists.txt) +COPY . /workspace + +# Default entrypoint prints tool versions and hints. +CMD ["/bin/bash", "-l"] diff --git a/Dockerfile.el9 b/Dockerfile.el9 new file mode 100644 index 00000000..5d7d7dcf --- /dev/null +++ b/Dockerfile.el9 @@ -0,0 +1,113 @@ +FROM nvidia/cuda:13.0.1-devel-rockylinux9 +LABEL authors="leonarski_f" + +# Update base, enable CRB (RHEL/Rocky 9), and install toolchain + Qt deps +RUN dnf -y update && \ + dnf -y install \ + 'dnf-command(config-manager)' && \ + dnf config-manager --set-enabled crb && \ + dnf -y install --enablerepo=devel \ + dnf-plugins-core \ + epel-release \ + git \ + which \ + ca-certificates \ + wget \ + tar \ + xz \ + make \ + cmake \ + gcc-toolset-13 \ + gcc-toolset-13-gcc \ + gcc-toolset-13-gcc-c++ \ + gcc-toolset-13-gdb \ + rpm-build \ + rpmdevtools \ + numactl-devel \ + openssl-devel \ + redhat-rpm-config \ + ninja-build \ + # Qt build prerequisites + python3 \ + perl \ + pkgconf-pkg-config \ + # GUI/Widgets/Charts/DBus deps + libxcb-devel \ + xcb-util-wm-devel \ + xcb-util-image-devel \ + xcb-util-keysyms-devel \ + xcb-util-renderutil-devel \ + libxkbcommon-devel \ + libX11-devel \ + libXext-devel \ + libXrender-devel \ + libXi-devel \ + libXrandr-devel \ + libXcursor-devel \ + libXfixes-devel \ + libXinerama-devel \ + mesa-libGL-devel \ + mesa-libEGL-devel \ + dbus-devel \ + zlib-devel \ + glib2-devel \ + openssl-static \ + zlib-static \ + fontconfig-devel \ + freetype-devel && \ + dnf clean all && rm -rf /var/cache/dnf + +# Install a recent Node.js (NodeSource). Change NODE_MAJOR if you want another major version. +ARG NODE_MAJOR=22 +RUN curl -fsSL https://rpm.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \ + dnf -y install nodejs && \ + dnf clean all && rm -rf /var/cache/dnf && \ + node --version && npm --version && (corepack enable || true) + +# Header-only Eigen (clone a specific tag) +ARG EIGEN_TAG=3.4.0 +RUN git clone --depth 1 --branch ${EIGEN_TAG} https://gitlab.com/libeigen/eigen.git /opt/eigen-3.4 + +# Make GCC/G++ 13 the default for builds +ENV GCC_TOOLSET_ROOT=/opt/rh/gcc-toolset-13/root +ENV PATH=${GCC_TOOLSET_ROOT}/usr/bin:${PATH} +ENV CC=${GCC_TOOLSET_ROOT}/usr/bin/gcc +ENV CXX=${GCC_TOOLSET_ROOT}/usr/bin/g++ + +# Build and install static Qt 6.9 with Core, Gui, Widgets, Charts, DBus +ARG QT_VERSION=6.9.0 +ARG QT_PREFIX=/opt/qt-${QT_VERSION}-static +RUN set -eux; \ + cd /tmp; \ + curl -LO https://download.qt.io/official_releases/qt/6.9/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz; \ + tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz; \ + mkdir -p qt-everywhere-src-${QT_VERSION}/build && cd qt-everywhere-src-${QT_VERSION}/build; \ + cmake -G Ninja \ + -DQT_BUILD_SUBMODULES="qtbase;qtshadertools;qtdeclarative;qtcharts" \ + -DBUILD_SHARED_LIBS=OFF \ + -DQT_BUILD_TESTS=OFF \ + -DQT_BUILD_EXAMPLES=OFF \ + -DQT_FEATURE_dbus=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${QT_PREFIX} \ + -DCMAKE_C_COMPILER=${CC} \ + -DCMAKE_CXX_COMPILER=${CXX} \ + -DQT_FEATURE_openssl=ON \ + -DQT_FEATURE_openssl_linked=ON \ + -DOPENSSL_USE_STATIC_LIBS=TRUE \ + ..; \ + cmake --build . -j"$(nproc)"; \ + cmake --install .; \ + cd /; rm -rf /tmp/qt-everywhere-src-${QT_VERSION} /tmp/qt-everywhere-src-${QT_VERSION}.tar.xz + +# Make Qt and Eigen discoverable by CMake +ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen-3.4 + +# Set workdir for your project +WORKDIR /workspace + +# Copy your project (expects a top-level CMakeLists.txt) +COPY . /workspace + +# Default entrypoint: interactive shell +CMD ["/bin/bash", "-l"]