diff --git a/focal-aarch64/Dockerfile b/focal-aarch64/Dockerfile new file mode 100644 index 0000000..8a29691 --- /dev/null +++ b/focal-aarch64/Dockerfile @@ -0,0 +1,211 @@ +FROM arm64v8/ubuntu:20.04 +LABEL maintainer="kd-11" + +ENV LLVMVER=18 + +ENV CLANG_BINARY=clang-${LLVMVER} +ENV CLANGXX_BINARY=clang++-${LLVMVER} +ENV LLD_BINARY=lld-${LLVMVER} + +ENV GCCVER=13 +ENV GCC_BINARY=gcc-${GCCVER} +ENV GXX_BINARY=g++-${GCCVER} + +# Base packages +RUN \ + apt-get update -y && \ + apt-get install -y curl libcurl4-openssl-dev software-properties-common apt-transport-https && \ + curl -Lvs https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ + add-apt-repository -y "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-${LLVMVER} main" && \ + add-apt-repository -y ppa:ubuntu-toolchain-r/test && \ + apt-get -y install \ + build-essential \ + git \ + curl \ + libfreetype6 \ + xz-utils \ + openssl \ + file \ + \ + $GCC_BINARY \ + $GXX_BINARY \ + $CLANG_BINARY \ + $CLANGXX_BINARY \ + \ + libasound2-dev \ + libpulse-dev \ + libopenal-dev \ + libfreetype6-dev \ + libfontconfig-dev \ + zlib1g-dev \ + libedit-dev \ + libudev-dev \ + libevdev-dev \ + libssl-dev \ + libjack-dev \ + libsndio-dev \ + libcurl4-gnutls-dev \ + libusb-dev \ + libzstd-dev \ + libxrandr-dev \ + libglvnd-dev \ + libglu1-mesa-dev \ + libglu-dev \ + libv4l-dev \ + yasm \ + libgmp-dev \ + libmp3lame-dev \ + libopenjp2-7-dev \ + libjack-dev \ + libtheora-dev \ + libwebp-dev \ + libopus-dev \ + libvorbis-dev \ + libvpx-dev \ + libx264-dev \ + libxml2-dev \ + ocl-icd-opencl-dev + +# For QT build we need some unknown X11/XCB deps. Just install everything by prefix +RUN \ + apt -y install \ + libx11-* \ + libxcb-* \ + libxkb* + +RUN \ + curl -sSfLO http://http.us.debian.org/debian/pool/main/g/glew/libglew2.2_2.2.0-4+b1_arm64.deb && \ + curl -sSfLO http://http.us.debian.org/debian/pool/main/g/glew/libglew-dev_2.2.0-4+b1_arm64.deb && \ + dpkg -i ./*.deb && \ + rm ./*.deb + +# Setup newer CMake +ENV CMAKEVER=3.26.3 +RUN \ + curl -sSfLO https://github.com/Kitware/CMake/releases/download/v${CMAKEVER}/cmake-${CMAKEVER}-linux-aarch64.sh && \ + sh cmake-${CMAKEVER}-linux-aarch64.sh --prefix=/usr --skip-license && \ + rm ./cmake*.sh && \ + cmake --version + +# We gotta build our own version of Ninja as well +ENV NINJAVER=1.12.1 +RUN \ + curl -sSfL -o ninja.tar.gz https://github.com/ninja-build/ninja/archive/v${NINJAVER}.tar.gz && \ + tar -xf ninja.tar.gz && \ + cd ninja-* && \ + cmake -Bbuild-cmake -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY -H. && \ + cmake --build build-cmake && \ + cp ./build-cmake/ninja /usr/bin/ninja && \ + cd ../ && \ + rm -r ./ninja-* && \ + rm ./*.tar.gz + +ENV STATIC_LLVM_VER=18.1.8 +RUN \ + curl -sSfLO https://github.com/llvm/llvm-project/releases/download/llvmorg-${STATIC_LLVM_VER}/llvm-project-${STATIC_LLVM_VER}.src.tar.xz && \ + tar -xf llvm-*.tar.xz && \ + cd llvm-*/llvm && \ + mkdir build && cd build && \ + cmake .. -G Ninja -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY -DCMAKE_INSTALL_PREFIX=/opt/llvm \ + -DLLVM_ENABLE_CXX1Y=ON -DLLVM_TARGETS_TO_BUILD="AArch64" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_USE_INTEL_JITEVENTS=ON -DLLVM_USE_PERF=ON \ + -DLLVM_BUILD_RUNTIME=OFF -DLLVM_BUILD_TOOLS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_TOOLS=OFF \ + -DLLVM_INCLUDE_UTILS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DWITH_POLLY=OFF -DLLVM_ENABLE_Z3_SOLVER=OFF && \ + ninja && \ + ninja install && \ + cd ../../.. && \ + rm ./*.tar.xz && \ + rm -r llvm-* + +# Need to manually build vulkan headers and libvulkan +ENV VULKAN_HEADER_VER=1.3.268.0 +ENV VULKAN_LOADER_VER=1.3.268.0 +RUN \ + curl -sSfL -o Vulkan-Headers.tar.gz https://github.com/KhronosGroup/Vulkan-Headers/archive/vulkan-sdk-${VULKAN_HEADER_VER}.tar.gz && \ + tar -xf Vulkan-Headers*.tar.gz && \ + cd Vulkan-Headers* && \ + mkdir build && cd build && \ + cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$GCC_BINARY -DCMAKE_CXX_COMPILER=$GXX_BINARY \ + -DCMAKE_INSTALL_PREFIX=/usr && \ + ninja && \ + ninja install && \ + cd ../.. && \ + rm ./*.tar.gz && \ + rm -r ./Vulkan-Headers* +RUN \ + curl -sSfL -o Vulkan-Loader.tar.gz https://github.com/KhronosGroup/Vulkan-Loader/archive/vulkan-sdk-${VULKAN_LOADER_VER}.tar.gz && \ + tar -xf Vulkan-Loader.tar.gz && \ + cd Vulkan-Loader* && \ + mkdir build && cd build && \ + cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$GCC_BINARY -DCMAKE_CXX_COMPILER=$GXX_BINARY \ + -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_DATADIR=/share && \ + ninja && \ + ninja install && \ + cd ../.. && \ + rm ./*.tar.gz && \ + rm -r ./Vulkan-Loader* + +ENV FFMPEG_NV_CODEC_VER=12.1.14.0 +RUN \ + curl -sSfLO https://github.com/FFmpeg/nv-codec-headers/releases/download/n${FFMPEG_NV_CODEC_VER}/nv-codec-headers-${FFMPEG_NV_CODEC_VER}.tar.gz && \ + tar -xf ./nv-codec-headers-*.tar.gz && \ + cd nv-codec-headers-* && \ + make && \ + PREFIX=/usr make install && \ + cd ../.. && \ + rm ./*.tar.gz && \ + rm -r ./nv-codec-headers-* + +ENV FFMPEGVER=6.1.1 +RUN \ + curl -sSfLO https://ffmpeg.org/releases/ffmpeg-${FFMPEGVER}.tar.xz && \ + tar -xf ./ffmpeg-*.tar.xz && \ + cd ffmpeg-* && \ + CFLAGS=-Os CXXFLAGS=-Os ./configure \ + --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp \ + --enable-gpl \ + --enable-libfreetype --enable-libjack --enable-libmp3lame \ + --enable-libopenjpeg --enable-libopus --enable-libpulse \ + --enable-libtheora --enable-libv4l2 \ + --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libxcb --enable-libxml2 \ + --enable-nvdec --enable-nvenc --enable-ffnvcodec --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan && \ + make && \ + PREFIX=/usr make install && \ + cd ../.. && \ + rm ./*.tar.xz && \ + rm -r ./ffmpeg-* + +ENV QTVER=6.8.0 +RUN \ + curl -sSfL -o qt.tar.xz https://download.qt.io/official_releases/qt/${QTVER%.*}/$QTVER/single/qt-everywhere-src-${QTVER}.tar.xz && \ + tar -xf qt.tar.xz && \ + cd qt-everywhere-src-* && \ + mkdir build && cd build && \ + cmake ../ -G Ninja \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_C_COMPILER=$CLANG_BINARY \ + -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY \ + -DFEATURE_ffmpeg=ON \ + -DFEATURE_gstreamer=OFF \ + -DFEATURE_fontconfig=ON \ + -DFEATURE_system_freetype=ON \ + -DFEATURE_system_xcb_xinput=ON \ + -DFEATURE_openssl_linked=ON \ + -DFEATURE_gds=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr && \ + echo "Need to cleanup for latest GCC" && \ + sed -i 's/std::uint32_t/uint32_t/' ../qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp && \ + ninja && \ + ninja install && \ + cd ../../ && \ + rm -r ./qt-everywhere-src-* && \ + rm qt.tar.xz + +ENV SHELLCHECKVER=0.10.0 +RUN \ + curl -sSfL -o shellcheck.tar.gz https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECKVER}/shellcheck-v${SHELLCHECKVER}.linux.aarch64.tar.xz && \ + tar -xf shellcheck.tar.gz && \ + cd shellcheck* && \ + cp ./shellcheck /usr/bin/ && \ + cd .. && \ + rm -r ./shellcheck* && \ + shellcheck --version \ No newline at end of file diff --git a/focal/Dockerfile b/focal/Dockerfile index 632f1dd..0b37dce 100644 --- a/focal/Dockerfile +++ b/focal/Dockerfile @@ -48,7 +48,7 @@ RUN \ cmake --version # We gotta build our own version of Ninja as well -ENV NINJAVER=1.11.1 +ENV NINJAVER=1.12.1 RUN \ curl -sSfL -o ninja.tar.gz https://github.com/ninja-build/ninja/archive/v${NINJAVER}.tar.gz && \ tar -xf ninja.tar.gz && \ @@ -134,8 +134,7 @@ RUN \ rm ./*.tar.xz && \ rm -r ./ffmpeg-* -ENV QTVER=6.7.3 -ENV QTVERMIN=67 +ENV QTVER=6.8.0 RUN \ curl -sSfL -o qt.tar.xz https://mirrors.ocf.berkeley.edu/qt/official_releases/qt/${QTVER%.*}/$QTVER/single/qt-everywhere-src-${QTVER}.tar.xz && \ tar -xf qt.tar.xz && \ @@ -151,21 +150,6 @@ RUN \ rm -r ./qt-everywhere-src-* && \ rm qt.tar.xz -# We need to build a custom version of SDL2 as well -ENV SDL2VER=2.30.1 -RUN \ - curl -sSfL -o SDL2.tar.gz https://www.libsdl.org/release/SDL2-${SDL2VER}.tar.gz && \ - tar -xf SDL2.tar.gz && \ - cd SDL2* && \ - mkdir build && cd build && \ - cmake ../ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$CLANG_BINARY -DCMAKE_CXX_COMPILER=$CLANGXX_BINARY \ - -DCMAKE_INSTALL_PREFIX=/usr -DSDL_DLOPEN=ON -DARTS=OFF -DESD=OFF -DNAS=OFF -DALSA=ON -DPULSEAUDIO_SHARED=ON -DRPATH=OFF -DCLOCK_GETTIME=ON && \ - ninja && \ - ninja install && \ - cd ../.. && \ - rm ./*.tar.gz && \ - rm -r ./SDL2* - ENV SHELLCHECKVER=0.10.0 RUN \ curl -sSfL -o shellcheck.tar.gz https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECKVER}/shellcheck-v${SHELLCHECKVER}.linux.x86_64.tar.xz && \