FROM fedora:42
# Set frontend to noninteractive equivalent and TERM
#ENV TERM=xterm
# Note: Fedora doesn't use DEBIAN_FRONTEND, dnf handles non-interactive mode differently
# Install essential build tools and dependencies with cache mounts
# This single RUN command consolidates all system dependencies to optimize layer caching.
RUN --mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
dnf update -y && \
# Core build tools (equivalent to build-essential)
dnf install -y dnf-plugins-core @c-development @development-tools\
\
# --- Core Development & Build Tools ---
git git-lfs ninja-build meson pkgconf subversion \
autoconf automake bison libtool yasm patchelf wget tar \
cmake gcc-c++ patch rpm-build \
\
# --- System & Math Libraries ---
glibc glibc-devel libstdc++-devel kernel-devel \
gmp-devel fftw-devel tbb-devel tbb sse2neon-devel\
\
# --- Python Ecosystem ---
python3-devel python3-libs python3-pybind11 python3-numpy \
python3-requests python3-certifi python3-idna python3-urllib3 \
python3-charset-normalizer python3-zstandard python3-cattrs \
python3-cython python3-fastjsonschema \
\
# --- VFX & Rendering Core Libraries ---
alembic-devel usd usd-devel openvdb-devel opensubdiv-devel \
openshadinglanguage-devel \
OpenImageIO-utils openexr-devel imath-devel \
embree-devel openpgl-devel \
potrace-devel harfbuzz-devel \
# Added missing core VFX libraries
OpenColorIO-devel OpenImageIO-devel openCOLLADA-devel \
\
# --- Graphics, Windowing & Display (X11/Wayland) ---
wayland-devel wayland-protocols-devel libdecor-devel \
libX11-devel libXt-devel libXcursor-devel libXi-devel \
libXrandr-devel libxkbcommon-devel libXxf86vm-devel \
libXfixes-devel libXrender-devel libXinerama-devel \
fontconfig-devel dbus-devel xorg-x11-server-Xorg xorg-x11-xauth \
\
# --- GPU & Shading APIs (OpenGL/Vulkan) ---
mesa-libGL-devel mesa-libEGL-devel egl-wayland-devel \
mesa-dri-drivers mesa-libGLES-devel libepoxy-devel \
glew-devel glfw-devel openxr-devel libshaderc-devel \
vulkan-headers vulkan-loader-devel vulkan-devel \
\
# --- Image I/O & Formats ---
libjpeg-turbo-devel libpng-devel libtiff-devel \
openjpeg2-devel libwebp-devel libharu-devel \
\
# --- Audio & Multimedia ---
ffmpeg-free-devel libswresample-free-devel libavdevice-free-devel \
libavformat-free-devel libavfilter-free-devel libswscale-free-devel \
openal-soft-devel SDL2-devel libsndfile-devel \
jack-audio-connection-kit-devel gstreamer1-devel gstreamer1-plugins-base-devel \
pulseaudio-libs-devel \
\
# --- Utility & Helper Libraries ---
boost-devel pugixml-devel yaml-cpp-devel pystring-devel \
zlib-devel libzstd-devel openssl-devel openssl brotli-devel \
libdeflate-devel jemalloc-devel blosc-devel \
clang-devel llvm-devel clang clang-tools-extra \
ispc ispc-devel systemd-devel libusb1-devel \
# Added missing utility libraries from original request
dpkg-devel robin-map-devel \
\
# --- Miscellaneous Libraries ---
libspnav-devel avahi-devel libcanberra-devel \
webrtc-audio-processing-devel lilv-devel libebur128-devel \
libmysofa-devel libcap-devel hydra valgrind uhd-devel \
--skip-broken --skip-unavailable
# Clean up dnf cache to reduce image size
#&& dnf clean all
# Install Python packages with pip cache
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --upgrade pip && \
pip install numpy charset-normalizer urllib3 zstandard requests idna certifi alembic mako jinja2
WORKDIR /tmp
RUN echo "Cloning MaterialX" && \
git clone https://github.com/AcademySoftwareFoundation/MaterialX.git -b v1.39.4 --depth=1 /tmp/materialx && \
mkdir -p /tmp/materialx/build && cd /tmp/materialx/build && \
cmake .. -DCMAKE_BUILD_TYPE=Release -G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DMATERIALX_BUILD_GRAPH_EDITOR=OFF \
-DMATERIALX_BUILD_PYTHON=ON \
-DMATERIALX_BUILD_TESTS=OFF \
-DMATERIALX_BUILD_VIEWER=OFF \
-DMATERIALX_BUILD_RENDER=ON \
-DMATERIALX_INSTALL_PYTHON=OFF \
-DMATERIALX_BUILD_SHARED_LIBS=ON \
-DPYBIND11_FINDPYTHON=ON \
-DMATERIALX_PYTHON_EXECUTABLE=/usr/sbin/python3.11 \
-DMATERIALX_INSTALL_PYTHON=/usr/sbin/python3.11 \
-DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" \
&& cmake --build . && \
cmake --install . && rm -rf /tmp/materialx && \
echo "Done Installing MaterialX"
RUN git clone --depth=1 https://github.com/AngusJohnson/Clipper2 /tmp/clipper && \
mkdir -p /tmp/clipper/CPP/build && cd /tmp/clipper/CPP/build && \
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCLIPPER2_EXAMPLES=OFF \
-DCLIPPER2_TESTS=OFF && \
cmake --build . && cmake --install . && rm -rf /tmp/clipper
RUN echo "Building Manifold v3.2.1" && \
git clone https://github.com/elalish/manifold -b v3.2.1 --depth=1 /tmp/manifold && \
mkdir -p /tmp/manifold/build && cd /tmp/manifold/build && \
cmake .. \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DMANIFOLD_JSBIND=OFF\
-DMANIFOLD_CBIND=ON \
-DMANIFOLD_PYBIND=ON \
-DMANIFOLD_PAR=ON \
-DMANIFOLD_EXPORT=OFF \
-DMANIFOLD_DEBUG=OFF \
-DMANIFOLD_TEST=OFF \
-DMANIFOLD_DOWNLOADS=ON \
-DTBB_DIR=/usr/local \
-DTRACY_ENABLE=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DPython_EXECUTABLE=/usr/sbin/python3.11 \
-DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" && \
cmake --build . && cmake --install . && rm -rf /tmp/manifold && \
echo "Done Installing Manifold"
# Fix for SSL certificate issues by pointing standard ENV VARS to certifi's bundle.
# This resolves the CMake warning about not finding "certifi/cacert.pem".
RUN CERTIFI_PATH=$(python3.11 -c "import certifi; print(certifi.where())") && \
echo "export REQUESTS_CA_BUNDLE=${CERTIFI_PATH}" >> /etc/profile.d/certifi.sh && \
echo "export SSL_CERT_FILE=${CERTIFI_PATH}" >> /etc/profile.d/certifi.sh
# Create a non-root user for the build process for security
# and grant passwordless sudo privileges.
#RUN useradd --create-home --shell /bin/bash builder && \
# adduser builder sudo && \
# echo 'builder ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# Switch to the non-root user
#USER builder
WORKDIR /blender-git
# Copy the compile script into the container and make it executable
COPY --chown=builder:builder compile.sh /compile.sh
RUN chmod +x /compile.sh
# Set the entrypoint to our compile script
ENTRYPOINT ["/compile.sh"]
# syntax=docker/dockerfile:1.4
################################################################################
# Stage "builder" – installs build dependencies and builds core libraries
################################################################################
FROM python:3.11-bookworm AS builder
ENV DEBIAN_FRONTEND=noninteractive
#ENV TERM=xterm
# Install build tools & dependencies with cache mounts
RUN --mount=type=cache,target=/var/cache/apt \
--mount=type=cache,target=/var/lib/apt \
apt update && \
#apt install -y software-properties-common && apt update && \
apt install -y \
# Core build tools
# gcc-14 g++-14 \
build-essential git git-lfs ninja-build meson pkg-config subversion \
autoconf automake bison libtool yasm tcl patchelf wget tar libtbb-dev libpcre3-dev libpcre2-dev libpcre16-3 libpcrecpp0v5 \
python3.11-dev pybind11-dev alembic libpython3-dev libhpdf-dev libyaml-cpp-dev libsystemd-dev dpkg \
\
# System libraries
libc6 libstdc++6 libstdc++-11-dev libstdc++-12-dev libc6-dev linux-libc-dev libfftw3-dev opencollada-dev libimath-dev \
libusb-1.0-0-dev hydra libboost-all-dev libpugixml-dev clang clang-format libclang-dev llvm-dev robin-map-dev\
\
# Compression and crypto
zlib1g-dev libzstd-dev libssl-dev libssl3 openssl libbrotli-dev libdeflate-dev libclipper2 \
# Memory & testing
libjemalloc-dev valgrind libpystring-dev \
\
# Wayland / X11 / Display
libwayland-dev libx11-dev libxt-dev libxcursor-dev libxi-dev libxrandr-dev \
libxkbcommon-dev libxxf86vm-dev libxfixes-dev libxrender-dev xorg \
libxinerama-dev libfontconfig1-dev libdbus-1-dev xauth libuhd-dev\
# wayland-protocols \
\
# OpenGL / GLES / Vulkan stack
libepoxy-dev libvulkan-dev libshaderc-dev libshaderc1 glslang-dev glslang-tools spirv-headers spirv-tools spirv-cross libspirv-cross-c-shared-dev \
libgl1-mesa-dev libegl1-mesa-dev libegl-dev mesa-utils \
libgles-dev libgles1 libgles2 libgles2-mesa-dev \
libglfw3-dev libglew-dev opensubdiv-tools \
# libembree3-3 libembree-dev embree-tools
libopenxr-dev libopenxr-loader1 libopenxr-utils \
\
# Image I/O
libjpeg-dev libjpeg62-turbo-dev libpng-dev libtiff-dev libopenexr-dev libfreetype6-dev \
libopengl0 libopengl-dev libpotrace-dev libopenjp2-7-dev libwebp-dev\
# Audio / Multimedia
ffmpeg libswresample-dev libavdevice-dev libffado-dev libavformat-dev libavfilter-dev libopenal-dev libswscale-dev libsdl2-dev \
libsndfile1-dev libjack-jackd2-dev libgstreamer1.0-0 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-x gstreamer1.0-pulseaudio gstreamer1.0-alsa libspnav-dev libopenvdb-dev libopenvdb-ax-dev \
libpulse-dev gstreamer1.0-adapter-pulseeffects libavahi-client-dev libcanberra-dev libwebrtc-audio-processing-dev \
liblilv-dev libebur128-dev libmysofa-dev libcap-dev
#\
# Clean up
# && rm -rf /var/lib/apt/lists/* && apt -qq clean
# Install Python packages with pip cache
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --upgrade pip && \
pip install numpy charset-normalizer urllib3 zstandard requests idna certifi alembic mako jinja2
# Prepare build workspace
WORKDIR /tmp
# 1. SSE2NEON headers
RUN git clone --depth=1 https://github.com/DLTcollab/sse2neon.git sse2neon && \
mkdir -p /usr/local/include/sse2neon && \
cp sse2neon/sse2neon.h /usr/local/include/sse2neon/ && \
rm -rf sse2neon
# 2. CMake
RUN mkdir -p /opt/cmake && \
wget -q https://github.com/Kitware/CMake/releases/download/v4.1.2/cmake-4.1.2-linux-aarch64.sh \
-O cmake-install.sh && \
chmod +x cmake-install.sh && \
./cmake-install.sh --skip-license --prefix=/opt/cmake && \
ln -s /opt/cmake/bin/* /usr/local/bin/ && \
rm cmake-install.sh
# 3. Wayland-Protocols
RUN echo "Building Wayland-Protocols" && \
git clone -b 1.44 https://gitlab.freedesktop.org/wayland/wayland-protocols wayland && \
mkdir -p wayland/build && cd wayland/build && \
meson setup build .. --buildtype=release -Dprefix=/usr/local -Dtests=false && \
meson compile -C build && meson install -C build && rm -rf wayland
# 4. ISPC
RUN echo "Add ISPC" && mkdir -p /opt/ispc && \
wget -q https://github.com/ispc/ispc/releases/download/v1.28.2/ispc-v1.28.2-linux.aarch64.tar.gz \
-O ispc.tar.gz && \
tar -xzf ispc.tar.gz -C /opt/ispc --strip-components=1 && \
rm ispc.tar.gz
# 5. TBB
#RUN echo "Building TBB" && git clone --branch v2022.2.0 https://github.com/uxlfoundation/oneTBB tbb && \
# cd tbb && mkdir build && cd build && \
# cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
# -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
# -DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" .. && \
# cmake --build . && cmake --install . && rm -rf tbb
# 6. Vulkan-Headers
RUN echo "Add Vulkan Header" && git clone --depth=1 -b v1.3.296 https://github.com/KhronosGroup/Vulkan-Headers.git vulkan && \
cd vulkan && cmake -S . -B build -DVULKAN_HEADERS_ENABLE_TESTS=OFF && \
cmake --install build && rm -rf vulkan
FROM builder as openbuilder
# 7. OpenColorIO v2.5.0
RUN echo "Build OpenColorIO" && \
git clone --branch v2.5.0 --depth=1 https://github.com/AcademySoftwareFoundation/OpenColorIO ocio && \
mkdir -p ocio/build && cd ocio/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_SHARED_LIBS=ON -DBUILD_DOCS=OFF -DOCIO_INSTALL_EXT_PACKAGES=MISSING \
-DOCIO_BUILD_APPS=OFF -DOCIO_USE_OIIO_FOR_APPS=OFF -DOCIO_BUILD_PYTHON=ON \
-DOCIO_BUILD_OPENFX=OFF -DOCIO_BUILD_GPU_TESTS=OFF -DOCIO_USE_HEADLESS=OFF \
-DOCIO_BUILD_TESTS=OFF -DOCIO_USE_SIMD=ON -DOCIO_USE_SSE2=ON -DOCIO_BUILD_DOCS=OFF \
-DOCIO_WARNING_AS_ERROR=OFF && \
cmake --build . && cmake --install . && rm -rf ocio
# 8. OpenImageIO v3.0.6.1
RUN echo "Build OpenImageIO" && \
git clone --branch v3.0.6.1 --depth=1 https://github.com/AcademySoftwareFoundation/OpenImageIO oiio && \
mkdir -p oiio/build && cd oiio/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DUSE_OPENCOLORIO=ON -DUSE_WEBP=ON -DUSE_TBB=ON -DUSE_PYTHON=ON \
-DUSE_OPENJPEG=ON -DOpenColorIO_DIR=/usr/local -DOpenImageIO_BUILD_MISSING_DEPS=all \
-DBUILD_DOCS=OFF -DUSE_OPENVDB=OFF -DUSE_FREETYPE=OFF -DUSE_DCMTK=OFF \
-DUSE_LIBHEIF=OFF -DOIIO_BUILD_TESTS=OFF -DBUILD_TESTING=OFF \
-DSTOP_ON_WARNING=OFF -DUSE_QT=OFF -DUSE_GIF=OFF -DUSE_OPENCV=OFF \
-DUSE_FFMPEG=OFF -DUSE_PTEX=OFF -DUSE_LIBRAW=OFF -DUSE_JXL=OFF && \
cmake --build . && cmake --install . && rm -rf oiio
# 9. Intel OIDN v2.3.3
RUN echo "Build Image Denoiser Oidn" && \
wget -q https://github.com/RenderKit/oidn/releases/download/v2.3.3/oidn-2.3.3.src.tar.gz \
-O oidn.tar.gz && \
mkdir oidn && tar -xzf oidn.tar.gz -C oidn --strip-components=1 && \
rm oidn.tar.gz && cd oidn && mkdir build && cd build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release \
-DOIDN_APPS=OFF -DOIDN_DEVICE_HIP=OFF -DOIDN_DEVICE_CUDA=OFF \
-DOIDN_DEVICE_SYCL=OFF -DOIDN_DEVICE_METAL=OFF \
-DOIDN_INSTALL_DEPENDENCIES=ON -DCMAKE_INSTALL_PREFIX=/usr/local \
-DISPC_EXECUTABLE=/opt/ispc/bin/ispc && \
cmake --build . && cmake --install . && rm -rf oidn
################################################################################
# Stage "midbuilder" – adds MaterialX, OpenPGL, OpenSubdiv, Manifold, Embree4,
# Alembic and PipeWire
################################################################################
FROM openbuilder AS midbuilder
WORKDIR /tmp
# 10. MaterialX v1.39.4
RUN echo "Cloning MaterialX" && \
git clone -b v1.39.4 --depth=1 https://github.com/AcademySoftwareFoundation/MaterialX.git materialx && \
mkdir materialx/build && cd materialx/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DMATERIALX_BUILD_PYTHON=ON -DMATERIALX_BUILD_TESTS=OFF \
-DMATERIALX_BUILD_VIEWER=OFF -DMATERIALX_BUILD_GRAPH_EDITOR=OFF \
-DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" && \
cmake --build . && cmake --install . && rm -rf materialx
# 11. OpenPGL v0.7.1
RUN echo "Building OpenPGL" && \
git clone --branch v0.7.1 --single-branch https://github.com/RenderKit/openpgl openpgl && \
mkdir openpgl/build && cd openpgl/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENPGL_ISA_NEON=ON -DOPENPGL_BUILD_TOOLS=OFF \
-DOPENPGL_EF_IMAGE_SPACE_GUIDING_BUFFER=OFF \
-DOPENPGL_TBB_ROOT=/usr/local && \
cmake --build . && cmake --install . && rm -rf openpgl
# 12. OpenSubdiv
RUN echo "Building OpenSubdiv" && \
git clone --depth=1 https://github.com/PixarAnimationStudios/OpenSubdiv OpenSubdiv && \
mkdir OpenSubdiv/build && cd OpenSubdiv/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DTBB_ROOT=/usr/local \
-DNO_TBB=0 -DNO_OPENCL=0 -DNO_OPENGL=0 \
-DNO_OMP=1 -DNO_CUDA=1 \
-DNO_DOC=1 -DNO_EXAMPLES=1 -DNO_REGRESSION=1 -DNO_PTEX=1 \
-DOSD_PATCH_SHADER_SOURCE_MSL=0 -DOSD_PATCH_SHADER_SOURCE_GLSL=1 -DOSD_PATCH_SHADER_SOURCE_HLSL=1 \
&& \
cmake --build . && cmake --install . && rm -rf OpenSubdiv
# 13. Manifold v3.2.1
RUN echo "Building Manifold v3.2.1" && \
git clone -b v3.2.1 --single-branch https://github.com/elalish/manifold manifold && \
mkdir manifold/build && cd manifold/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DMANIFOLD_DEBUG=OFF \
-DMANIFOLD_STRICT=ON -DMANIFOLD_PAR=ON -DMANIFOLD_CBIND=ON \
-DMANIFOLD_PYBIND=ON -DMANIFOLD_DOWNLOADS=ON \
-DMANIFOLD_CROSS_SECTION=ON -DFETCHCONTENT_QUIET=ON \
-DMANIFOLD_USE_BUILTIN_TBB=OFF -DMANIFOLD_USE_BUILTIN_NANOBIND=OFF -DMANIFOLD_USE_BUILTIN_CLIPPER2=ON \
-DClipper2_DIR=/usr/lib/aarch64-linux-gnu/cmake/Clipper2 \
-DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" && \
cmake --build . && cmake --install . && rm -rf manifold
FROM midbuilder AS finalbuilder
# 14. Embree4 v4.4.0
RUN echo "Building Embree" && \
git clone --branch v4.4.0 --single-branch https://github.com/RenderKit/embree.git /tmp/embree && \
mkdir -p /tmp/embree/build && cd /tmp/embree/build && \
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow" \
-DEMBREE_TUTORIALS=OFF \
-DEMBREE_SYCL_SUPPORT=OFF \
-DEMBREE_ISPC_SUPPORT=ON \
-DEMBREE_ISPC_EXECUTABLE=/opt/ispc/bin/ispc \
-DEMBREE_TESTING_INSTALL_TESTS=OFF && \
make && make install && echo "Done Installing Embree4" && rm -rf /tmp/embree
# 15. Alembic v1.8.8
RUN git clone -b 1.8.8 --depth=1 https://github.com/alembic/alembic alembic && \
mkdir alembic/build && cd alembic/build && \
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local -DUSE_TESTS=OFF \
-DALEMBIC_DEBUG_WARNINGS_AS_ERRORS=OFF \
-DCMAKE_CXX_FLAGS="-O2 -fno-lto" && \
cmake --build . && cmake --install . && rm -rf alembic
################################################################################
# Stage “final” – uses midbuilder as base and compiles OpenUSD v25.08
################################################################################
# 16. PipeWire v1.4.8
RUN git clone --branch 1.4.8 --depth=1 https://github.com/PipeWire/pipewire pipewire && \
mkdir pipewire/build && cd pipewire/build && \
meson setup . .. --buildtype=release -Dprefix=/usr/local --backend=ninja \
-Dtests=disabled -Ddocs=disabled -Dexamples=disabled \
-Dinstalled_tests=disabled -Dlibcamera=disabled -Dcompress-offload=disabled \
-Djack=disabled -Decho-cancel-webrtc=disabled \
-Daudiotestsrc=disabled -Dsnap=disabled && \
meson compile -C . && meson install -C . && rm -rf pipewire
FROM finalbuilder AS final
# Symlink Embree4 headers for Embree3 references (OpenUSD requirement)
RUN ln -s /usr/local/include/embree4 /usr/local/include/embree3
WORKDIR /tmp
RUN git clone --branch v25.08 --depth=1 https://github.com/PixarAnimationStudios/OpenUSD/ OpenUSD && \
mkdir OpenUSD/build && cd OpenUSD/build
RUN python3 build_scripts/build_usd.py /usr/local \
--build-monolithic \
--usd-imaging \
--python \
--embree \
--materialx \
--opencolorio \
--openimageio \
--no-tests \
--no-usdview \
--no-tutorials \
--no-tools \
--no-docs \
--build-args USD,"-DCMAKE_CXX_FLAGS='-Wno-error=stringop-overflow' -DEMBREE_INCLUDE_DIR=/usr/local/include/embree4"
RUN rm -rf OpenUSD
# Common final steps
WORKDIR /blender-git
RUN useradd --create-home --shell /bin/bash builder && \
adduser builder sudo && \
echo 'builder ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
COPY --chown=builder:builder compile.sh /compile.sh
RUN chmod +x /compile.sh
ENTRYPOINT ["/compile.sh"]
Git has issue when working from inside docker
git config --global --add safe.directory /blender-git/blender
git config --global http.postBuffer 524288000
Also I suggest you to clone blender source outside the container then attach it
compile.sh
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
echo "-----System Setup-----"
git config --global --add safe.directory /blender-git/blender
#export MATERIALX_ROOT_DIR="/blender-git/materialx"
#export MATERIALX_INCLUDE_DIR="/blender-git/materialx"
#export MATERIALX_LIBRARY="/blender-git/materialx/lib/"
export WITH_CYCLES_DEVICE_CUDA="OFF"
export WITH_CYCLES_DEVICE_OPTIX="OFF"
export FFMPEG_ROOT_DIR=/usr
#export PATH="$PATH:/blender-git/materialx/lib/"
whereis python
ln -s /usr/local/lib/python3.11/site-packages/numpy/_core/include /usr/local/lib/python3.11/site-packages/numpy/core/include
#ln -s /usr/local/lib64/python3.11/site-packages/numpy/_core/include /usr/local/lib64/python3.11/site-packages/numpy/core/include
#ln -s /usr/local/lib/python3.11/site-packages/* /usr/local/lib64/python3.11/site-packages/
#mv /usr/local/lib/python3.11/site-packages/* /usr/local/lib64/python3.11/site-packages/ 2>/dev/null || true
echo "-------------------------------------------------------------"
#echo "1> Added Materialx Successfully"
#export EMBREE_ROOT_DIR="/usr/local"
#export PYTHON_NUMPY_INCLUDE_DIR=$(python3 -c "import numpy; print(numpy.get_include())")
#export SPACENAV_LIBRARY="/usr/lib/aarch64-linux-gnu/libspnav.so"
echo "------------Building Blender ARM64 Portable Build------------"
echo "--- Starting Blender ARM64 Portable Build ---"
if [ ! -d "/blender-git/blender" ] || [ -z "$(ls -A /blender-git/blender)" ]; then
echo "Cloning Blender source code into /blender-git/blender..."
git clone -b v4.5.3 --depth=1 https://projects.blender.org/blender/blender.git /blender-git/blender
#cd /blender-git/blender
#git checkout tags/v4.5.3 -b v4.5.3
else
echo "Blender source already exists. Checking out to tag v4.5.3..."
#cd /blender-git/blender
# git fetch --all --tags
#git checkout tags/v4.5.3 -b v4.5.3 || git checkout v4.5.3
fi
echo "--- Step 1: Ensuring Git LFS files ---"
cd /blender-git/blender
make update
echo "--- Step 2: Installing Linux dependencies ---"
echo "--- Step 3: Downloading pre-compiled libraries ---"
echo "--- Step 4: Configuring build ---"
make deps ninja BUILD_CMAKE_ARGS="-DWITH_CYCLES=OFF \
-DWITH_CYCLES_DEVICE_CUDA=OFF \
-DWITH_CYCLES_DEVICE_HIP=OFF \
-DWITH_CYCLES_DEVICE_OPTIX=OFF \
-DWITH_CYCLES_CUDA_BINARIES=OFF \
-DSSE2NEON_INCLUDE_DIR=/usr/local/include/sse2neon \
-DPYTHON_VERSION=3.11 \
-DWITH_INSTALL_PORTABLE=ON \
-DWITH_USD=ON -DWITH_MATERIALX=ON \
-DUSD_ROOT_DIR=/usr/local \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DTBB_DIR=/usr/local/lib64/cmake/TBB "
#-DPYTHON_EXECUTABLE=/usr/sbin/python3.11 \
#-DPYTHON_INCLUDE_DIR=/usr/include/python3.11 \
#-DPYTHON_LIBPATH=/usr/local/lib64/python3.11/site-packages \
#-DPYTHON_SSL_CERT_FILE=/usr/local/lib64/python3.11/site-packages/certifi/cacert.pem \
#-DNINJA_MAX_NUM_PARALLEL_COMPILE_JOBS=2 \
#-DNINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS=1 \
#-DNINJA_MAX_NUM_PARALLEL_LINK_JOBS=1"
#-DPYTHON_EXECUTABLE=/usr/sbin/python3.11
#-DSDL2_INCLUDE_DIRS=/usr/include/SDL2/ -DSSE2NEON_INCLUDE_DIR=/usr/local/include/sse2neon -DWITH_VULKAN_BACKEND=OFF
# -DPYTHON_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.11/site-packages/numpy/_core/include
# This fetches the libraries provided by the Blender Foundation
#make deps BUILD_CMAKE_ARGS=" -DWITH_CYCLES_CUDA_BINARIES=OFF -DWITH_CYCLES_DEVICE_CUDA=OFF -DWITH_CYCLES_DEVICE_OPTIX=OFF"
# Replace the make deps line with:
#make deps BUILD_CMAKE_ARGS=" -DWITH_CYCLES_CUDA_BINARIES=OFF -DWITH_CYCLES_DEVICE_CUDA=OFF -DWITH_CYCLES_DEVICE_OPTIX=OFF -DWITH_NVIDIA_DRIVER_API=OFF -DWITH_OPENSSL_SYSTEM=ON"
#/usr/local/lib64/python3.11/site-packages/numpy
# # Run CMake with flags to disable NVIDIA features and enable a portable build
# cmake ../blender \
# -DWITH_CYCLES_DEVICE_CUDA=OFF \
# -DWITH_CYCLES_DEVICE_OPTIX=OFF \
# -DWITH_CYCLES_CUDA_BINARIES=OFF \
# -DWITH_NVIDIA_DRIVER_API=OFF \
# -DCMAKE_BUILD_TYPE=Release \
# -DWITH_LIBS_PRECOMPILED=OFF \
# -DWITH_INSTALL_PORTABLE=ON
echo "--- Step 5: Compiling Blender ---"
#make -j$(nproc)
make -j2
echo "--- Step 6: Creating portable install package ---"
make install
echo "--- Build Complete! ---"
echo "Portable Blender is in 'blender-git/build_arm64/install'."
cmake --install .
echo "-------------------------------------------------------------"
echo "--- Build Complete! ---"
echo "Your portable Blender can be found in the 'blender-git/build_arm64/install' directory on your host machine."
Building a blender has two methods
make deps which downloads dependency source, then builds that (> 6 Gb)
make use system dependency
then lite and ninja and developer
Look for
blender-git/blender/build_files/build_environment/cmake/version.cmake
It includes details of all the deps’ names and the Git repository.
We are trying to recreate the issue again, and one more thing I require is the whole log, including Uboot, kernel, and all, which you can get from UART.