diff --git a/Dockerfile.in b/Dockerfile.in index 79ed9142c..781fa2753 100644 --- a/Dockerfile.in +++ b/Dockerfile.in @@ -18,7 +18,7 @@ ENV DPKG_INSTALL_LIST=${SOURCE_DIR}/debian/jellyfin-ffmpeg8.install ENV PATH=${TARGET_DIR}/bin:${PATH} ENV PKG_CONFIG_PATH=${TARGET_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH} ENV LD_LIBRARY_PATH=${TARGET_DIR}/lib:${TARGET_DIR}/lib/mfx:${TARGET_DIR}/lib/xorg:${LD_LIBRARY_PATH} -ENV LDFLAGS="-Wl,-rpath=${TARGET_DIR}/lib -L${TARGET_DIR}/lib -lm" +ENV LDFLAGS="-Wl,--disable-new-dtags -Wl,-rpath=${TARGET_DIR}/lib -L${TARGET_DIR}/lib -lm" ENV CXXFLAGS="-I${TARGET_DIR}/include $CXXFLAGS" ENV CPPFLAGS="-I${TARGET_DIR}/include $CPPFLAGS" ENV CFLAGS="-I${TARGET_DIR}/include $CFLAGS" @@ -28,13 +28,9 @@ ENV CMAKE_POLICY_VERSION_MINIMUM="3.5" RUN apt-get update \ && apt-get dist-upgrade -y \ && apt-get install -y apt-transport-https \ - curl ninja-build debhelper gnupg wget devscripts \ + curl ninja-build debhelper gnupg wget devscripts \ mmv equivs git nasm pkg-config subversion dh-autoreconf \ - libpciaccess-dev libwayland-dev libx11-dev libx11-xcb-dev \ - libxcb-dri2-0-dev libxcb-dri3-dev libxcb-present-dev \ - libxcb-shm0-dev libxcb-sync-dev libxshmfence-dev libxext-dev \ - libxfixes-dev libxcb1-dev libxrandr-dev libzstd-dev \ - libelf-dev python3-pip zip unzip tar flex bison gperf ragel \ + python3-pip zip unzip tar flex bison gperf ragel \ && apt-get clean autoclean -y \ && apt-get autoremove -y diff --git a/debian/control b/debian/control index d927ea585..2a036c863 100644 --- a/debian/control +++ b/debian/control @@ -17,16 +17,12 @@ Build-Depends: libgnutls28-dev | libgnutls-dev, # --enable-libbluray libbluray-dev, -# --enable-libdrm - libdrm-dev [!amd64], # --enable-gmp libgmp-dev, # --enable-libmp3lame libmp3lame-dev, # --enable-libopus libopus-dev, -# --enable-libtheora - libtheora-dev, # --enable-libvorbis libvorbis-dev, # --enable-libopenmpt diff --git a/debian/rules b/debian/rules index bbef52dfc..22c847034 100755 --- a/debian/rules +++ b/debian/rules @@ -14,8 +14,11 @@ CONFIG := --prefix=${TARGET_DIR} \ --disable-ffplay \ --disable-static \ --disable-libxcb \ - --disable-sdl2 \ + --disable-libxcb-shm \ + --disable-libxcb-xfixes \ + --disable-libxcb-shape \ --disable-xlib \ + --disable-sdl2 \ --enable-lto=auto \ --enable-gpl \ --enable-version3 \ @@ -46,6 +49,10 @@ CONFIG := --prefix=${TARGET_DIR} \ --enable-libzvbi \ --enable-libzimg \ --enable-libfdk-aac \ + --enable-libshaderc \ + --enable-libplacebo \ + --enable-vulkan \ + --enable-vaapi \ --enable-ffnvcodec \ --enable-cuda \ --enable-cuda-llvm \ @@ -54,10 +61,6 @@ CONFIG := --prefix=${TARGET_DIR} \ --enable-nvenc \ CONFIG_x86 := --arch=amd64 \ - --enable-libshaderc \ - --enable-libplacebo \ - --enable-vulkan \ - --enable-vaapi \ --enable-libvpl \ --enable-amf \ diff --git a/docker-build.sh b/docker-build.sh index 50d269a71..5f713ad19 100755 --- a/docker-build.sh +++ b/docker-build.sh @@ -177,6 +177,40 @@ prepare_extra_common() { popd popd + # OGG + pushd ${SOURCE_DIR} + git clone -b v1.3.6 --depth=1 https://github.com/xiph/ogg.git + pushd ogg + ./autogen.sh + ./configure \ + ${CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --disable-static \ + --enable-shared \ + --with-pic + make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/ogg + echo "ogg${TARGET_DIR}/lib/libogg.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd + popd + + # THEORA + pushd ${SOURCE_DIR} + git clone -b v1.2.0 --depth=1 https://github.com/xiph/theora.git + pushd theora + # autotools: relax autoconf requirement to 2.69 + wget -q -O - https://github.com/xiph/theora/commit/3ae2669.patch | git apply + ./autogen.sh + ./configure \ + ${CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --disable-{static,examples,extra-programs,oggtest,vorbistest,spec,doc} \ + --enable-shared \ + --with-pic + make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/theora + echo "theora${TARGET_DIR}/lib/libtheora{enc,dec}.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd + popd + # FFTW3 pushd ${SOURCE_DIR} mkdir fftw3 @@ -208,7 +242,7 @@ prepare_extra_common() { # CHROMAPRINT pushd ${SOURCE_DIR} - git clone --depth=1 https://github.com/acoustid/chromaprint.git + git clone -b v1.6.0 --depth=1 https://github.com/acoustid/chromaprint.git pushd chromaprint echo "Libs.private: -lfftw3f -lstdc++" >> libchromaprint.pc.cmake echo "Cflags.private: -DCHROMAPRINT_NODLL" >> libchromaprint.pc.cmake @@ -230,7 +264,7 @@ prepare_extra_common() { # ZIMG pushd ${SOURCE_DIR} - git clone --recursive --depth=1 https://github.com/sekrit-twc/zimg.git + git clone -b release-3.0.6 --recursive --depth=1 https://github.com/sekrit-twc/zimg.git pushd zimg ./autogen.sh ./configure --prefix=${TARGET_DIR} ${CROSS_OPT} @@ -300,6 +334,246 @@ prepare_extra_common() { make PREFIX=${TARGET_DIR} install popd popd + + # Install crossbuild dependencies + apt-get install -y lib{udev,pciaccess,zstd,elf,expat1}-dev:${ARCH} + + # LIBDRM + pushd ${SOURCE_DIR} + mkdir libdrm + pushd libdrm + libdrm_ver="libdrm-2.4.131" + libdrm_link="https://gitlab.freedesktop.org/mesa/libdrm/-/archive/${libdrm_ver}/libdrm-${libdrm_ver}.tar.gz" + wget ${libdrm_link} -O libdrm.tar.gz + tar xaf libdrm.tar.gz + meson setup libdrm-${libdrm_ver} drm_build \ + ${MESON_CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --libdir=lib \ + --buildtype=release \ + -D{udev,tests,install-test-programs}=false \ + -D{amdgpu,radeon,intel}=enabled \ + -D{etnaviv,valgrind,freedreno,vc4,vmwgfx,nouveau,man-pages}=disabled + meson configure drm_build + ninja -j$(nproc) -C drm_build install + cp -a ${TARGET_DIR}/lib/libdrm*.so* ${SOURCE_DIR}/libdrm + cp ${TARGET_DIR}/share/libdrm/*.ids ${SOURCE_DIR}/libdrm + echo "libdrm/libdrm*.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + echo "libdrm/*.ids usr/lib/jellyfin-ffmpeg/share/libdrm" >> ${DPKG_INSTALL_LIST} + popd + popd + + # LIBVA + pushd ${SOURCE_DIR} + git clone -b 2.24.1 --depth=1 https://github.com/intel/libva.git + pushd libva + if [ "${ARCH}" = "arm64" ]; then + libva_drv_arch_path="/usr/lib/aarch64-linux-gnu/dri" + else + libva_drv_arch_path="/usr/lib/x86_64-linux-gnu/dri" + fi + sed -i "s#secure_getenv(\"LIBVA_DRIVERS_PATH\")#\"/usr/lib/jellyfin-ffmpeg/lib/dri:${libva_drv_arch_path}:/usr/lib/dri:/usr/local/lib/dri\"#g" va/va.c + sed -i "s#secure_getenv(\"LIBVA_DRIVER_NAME\")#secure_getenv(\"LIBVA_DRIVER_NAME_JELLYFIN\")#g" va/va.c + ./autogen.sh + ./configure \ + ${CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --enable-drm \ + --disable-{glx,x11,wayland,docs} + make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/intel + echo "intel${TARGET_DIR}/lib/libva.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + echo "intel${TARGET_DIR}/lib/libva-drm.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd + popd + + # LIBVA-UTILS + pushd ${SOURCE_DIR} + git clone -b 2.24.0 --depth=1 https://github.com/intel/libva-utils.git + pushd libva-utils + ./autogen.sh + ./configure \ + ${CROSS_OPT} \ + --prefix=${TARGET_DIR} + make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/intel + echo "intel${TARGET_DIR}/bin/vainfo usr/lib/jellyfin-ffmpeg" >> ${DPKG_INSTALL_LIST} + popd + popd + + # Vulkan Headers + pushd ${SOURCE_DIR} + git clone -b v1.4.355 --depth=1 https://github.com/KhronosGroup/Vulkan-Headers.git + pushd Vulkan-Headers + mkdir build && pushd build + cmake \ + ${CMAKE_TOOLCHAIN_OPT} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} .. + make -j$(nproc) && make install + popd + popd + popd + + # Vulkan ICD Loader + pushd ${SOURCE_DIR} + git clone -b v1.4.355 --depth=1 https://github.com/KhronosGroup/Vulkan-Loader.git + pushd Vulkan-Loader + sed -i 's/memset(disable_struct, 0, sizeof.*);/& disable_struct->disable_all_implicit = 1;/' loader/loader_environment.c + mkdir build && pushd build + cmake \ + ${CMAKE_TOOLCHAIN_OPT} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} \ + -DVULKAN_HEADERS_INSTALL_DIR="${TARGET_DIR}" \ + -DCMAKE_INSTALL_SYSCONFDIR=${TARGET_DIR}/share \ + -DCMAKE_INSTALL_DATADIR=${TARGET_DIR}/share \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_TESTS=OFF \ + -DBUILD_WSI_{XCB,XLIB,XLIB_XRANDR,WAYLAND}_SUPPORT=OFF .. + make -j$(nproc) && make install + cp -a ${TARGET_DIR}/lib/libvulkan.so* ${SOURCE_DIR}/Vulkan-Loader + echo "Vulkan-Loader/libvulkan.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd + popd + popd + + # SHADERC + shaderc_ver="v2026.2" + pushd ${SOURCE_DIR} + git clone -b ${shaderc_ver} --depth=1 https://github.com/google/shaderc.git + pushd shaderc + ./utils/git-sync-deps + shaderc_conf=$(echo -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DSHADERC_SKIP_{TESTS,EXAMPLES,COPYRIGHT_CHECK}=ON \ + -DENABLE_EXCEPTIONS=ON \ + -DSPIRV_SKIP_EXECUTABLES=ON \ + -DSPIRV_TOOLS_BUILD_STATIC=ON \ + -DBUILD_SHARED_LIBS=OFF) + # Build native glslangValidator for crossbuild + if [ "${ARCH}" != "amd64" ]; then + mkdir glslang_build && pushd glslang_build + cmake $shaderc_conf \ + -DENABLE_GLSLANG_BINARIES=ON .. + ninja -j$(nproc) third_party/glslang/StandAlone/glslang + cp third_party/glslang/StandAlone/glslangValidator ${TARGET_DIR}/bin + popd + fi + # Build target shaderc + mkdir shaderc_build && pushd shaderc_build + cmake $shaderc_conf \ + ${CMAKE_TOOLCHAIN_OPT} \ + -DENABLE_GLSLANG_BINARIES=$([ "${ARCH}" = "amd64" ] && echo "ON" || echo "OFF") \ + -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} .. + ninja -j$(nproc) + ninja install + cp -a ${TARGET_DIR}/lib/libshaderc_shared.so* ${SOURCE_DIR}/shaderc + echo "shaderc/libshaderc_shared* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd + popd + popd + + # MESA + # Minimal libs for AMD VAAPI, AMD RADV and Intel ANV + if [[ ${LLVM_VER} -ge 15 ]]; then + if [[ "${ARCH}" = "amd64" && ${LLVMSPIRVLIB_VER} -ge 15 && ${LLVMSPIRVLIB_VER} -le 21 ]]; then + # Intel ANV requires llvmspirvlib >= 15 (and <= 21 in mesa 26.0) + mesa_vk_drv="amd,intel" + mesa_llvm_clc="enabled" + apt-get install -y {llvm-,libllvmspirvlib-,libclc-,libclang-,libclang-cpp}${LLVMSPIRVLIB_VER}-dev + else + mesa_vk_drv="amd" + mesa_llvm_clc="disabled" + fi + pushd ${SOURCE_DIR} + mkdir mesa + pushd mesa + mesa_ver="mesa-26.0.8" + mesa_link="https://gitlab.freedesktop.org/mesa/mesa/-/archive/${mesa_ver}/mesa-${mesa_ver}.tar.gz" + wget ${mesa_link} -O mesa.tar.gz + tar xaf mesa.tar.gz + # Enable VAAPI VPP alpha blending support + wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41090.patch | \ + patch -p1 -d mesa-${mesa_ver} + # Fix misc CSC issues in VAAPI VPP + wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42181.patch | \ + patch -p1 -d mesa-${mesa_ver} + # Fix setting VPE rotation with horizontal flip enabled + wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42408.patch | \ + sed 's#/mm/#/#g' | patch -p1 -d mesa-${mesa_ver} + # Fix setting chroma swizzle mode in VK Video on GFX9 + wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42763.patch | \ + patch -p1 -d mesa-${mesa_ver} + meson setup mesa-${mesa_ver} mesa_build \ + ${MESON_CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --libdir=lib \ + --buildtype=release \ + --wrap-mode=nofallback \ + -Db_ndebug=true \ + -Db_lto=false \ + -Dplatforms=[] \ + -Dgallium-drivers=radeonsi \ + -Dvulkan-drivers=${mesa_vk_drv} \ + -Dvulkan-layers=[] \ + -Dvulkan-manifest-per-architecture=true \ + -Degl=disabled \ + -Dgallium-{extra-hud,rusticl}=false \ + -Dgallium-mediafoundation=disabled \ + -Dgallium-va=enabled \ + -Dvideo-codecs=all \ + -Dgbm=disabled \ + -Dgles1=disabled \ + -Dgles2=disabled \ + -Dopengl=false \ + -Dglvnd=disabled \ + -Dglx=disabled \ + -Dlibunwind=disabled \ + -Dllvm=${mesa_llvm_clc} \ + -Damd-use-llvm=false \ + -Dlmsensors=disabled \ + -Dvalgrind=disabled \ + -Dtools=[] \ + -Dzstd=enabled \ + -Dmicrosoft-clc=disabled \ + -Dintel-elk=false + meson configure mesa_build + ninja -j$(nproc) -C mesa_build install + cp -a ${TARGET_DIR}/lib/libvulkan_*.so ${SOURCE_DIR}/mesa + # radeonsi_drv_video.so -> libgallium_drv_video.so is soft link + cp ${TARGET_DIR}/lib/dri/radeonsi_drv_video.so ${SOURCE_DIR}/mesa + echo "mesa/lib*.so usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + echo "mesa/radeonsi_drv_video.so usr/lib/jellyfin-ffmpeg/lib/dri" >> ${DPKG_INSTALL_LIST} + cp ${TARGET_DIR}/share/drirc.d/*.conf ${SOURCE_DIR}/mesa + echo "mesa/*defaults.conf usr/lib/jellyfin-ffmpeg/share/drirc.d" >> ${DPKG_INSTALL_LIST} + cp ${TARGET_DIR}/share/vulkan/icd.d/*.json ${SOURCE_DIR}/mesa + echo "mesa/*icd.*.json usr/lib/jellyfin-ffmpeg/share/vulkan/icd.d" >> ${DPKG_INSTALL_LIST} + popd + popd + fi + + # LIBPLACEBO + pushd ${SOURCE_DIR} + git clone -b v7.360.1 --recursive --depth=1 https://github.com/haasn/libplacebo.git + # Fix bit shift when importing P01x non-multiplane image + git -C libplacebo apply ${SOURCE_DIR}/builder/patches/libplacebo/*.patch + sed -i 's/env: python_env,//g' libplacebo/src/vulkan/meson.build + meson setup libplacebo placebo_build \ + ${MESON_CROSS_OPT} \ + --prefix=${TARGET_DIR} \ + --libdir=lib \ + --buildtype=release \ + --default-library=shared \ + -Dvulkan=enabled \ + -Dvk-proc-addr=enabled \ + -Dvulkan-registry=${TARGET_DIR}/share/vulkan/registry/vk.xml \ + -Dshaderc=enabled \ + -Dglslang=disabled \ + -D{demos,tests,bench,fuzz}=false + meson configure placebo_build + ninja -j$(nproc) -C placebo_build install + cp -a ${TARGET_DIR}/lib/libplacebo.so* ${SOURCE_DIR}/libplacebo + echo "libplacebo/libplacebo* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} + popd } # Prepare extra headers, libs and drivers for x86_64-linux-gnu @@ -320,58 +594,6 @@ prepare_extra_amd64() { popd popd - # LIBDRM - pushd ${SOURCE_DIR} - mkdir libdrm - pushd libdrm - libdrm_ver="libdrm-2.4.131" - libdrm_link="https://gitlab.freedesktop.org/mesa/libdrm/-/archive/${libdrm_ver}/libdrm-${libdrm_ver}.tar.gz" - wget ${libdrm_link} -O libdrm.tar.gz - tar xaf libdrm.tar.gz - meson setup libdrm-${libdrm_ver} drm_build \ - --prefix=${TARGET_DIR} \ - --libdir=lib \ - --buildtype=release \ - -D{udev,tests,install-test-programs}=false \ - -D{amdgpu,radeon,intel}=enabled \ - -D{valgrind,freedreno,vc4,vmwgfx,nouveau,man-pages}=disabled - meson configure drm_build - ninja -j$(nproc) -C drm_build install - cp -a ${TARGET_DIR}/lib/libdrm*.so* ${SOURCE_DIR}/libdrm - cp ${TARGET_DIR}/share/libdrm/*.ids ${SOURCE_DIR}/libdrm - echo "libdrm/libdrm*.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - echo "libdrm/*.ids usr/lib/jellyfin-ffmpeg/share/libdrm" >> ${DPKG_INSTALL_LIST} - popd - popd - - # LIBVA - pushd ${SOURCE_DIR} - git clone -b 2.24.1 --depth=1 https://github.com/intel/libva.git - pushd libva - sed -i 's|secure_getenv("LIBVA_DRIVERS_PATH")|"/usr/lib/jellyfin-ffmpeg/lib/dri:/usr/lib/x86_64-linux-gnu/dri:/usr/lib/dri:/usr/local/lib/dri"|g' va/va.c - sed -i 's|secure_getenv("LIBVA_DRIVER_NAME")|secure_getenv("LIBVA_DRIVER_NAME_JELLYFIN")|g' va/va.c - ./autogen.sh - ./configure \ - --prefix=${TARGET_DIR} \ - --enable-drm \ - --disable-{glx,x11,wayland,docs} - make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/intel - echo "intel${TARGET_DIR}/lib/libva.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - echo "intel${TARGET_DIR}/lib/libva-drm.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - popd - popd - - # LIBVA-UTILS - pushd ${SOURCE_DIR} - git clone -b 2.24.0 --depth=1 https://github.com/intel/libva-utils.git - pushd libva-utils - ./autogen.sh - ./configure --prefix=${TARGET_DIR} - make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/intel - echo "intel${TARGET_DIR}/bin/vainfo usr/lib/jellyfin-ffmpeg" >> ${DPKG_INSTALL_LIST} - popd - popd - # INTEL-VAAPI-DRIVER pushd ${SOURCE_DIR} git clone --depth=1 https://github.com/intel/intel-vaapi-driver.git @@ -492,169 +714,6 @@ prepare_extra_amd64() { popd popd popd - - # Vulkan Headers - pushd ${SOURCE_DIR} - git clone -b v1.4.355 --depth=1 https://github.com/KhronosGroup/Vulkan-Headers.git - pushd Vulkan-Headers - mkdir build && pushd build - cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} .. - make -j$(nproc) && make install - popd - popd - popd - - # Vulkan ICD Loader - pushd ${SOURCE_DIR} - git clone -b v1.4.355 --depth=1 https://github.com/KhronosGroup/Vulkan-Loader.git - pushd Vulkan-Loader - mkdir build && pushd build - cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} \ - -DVULKAN_HEADERS_INSTALL_DIR="${TARGET_DIR}" \ - -DCMAKE_INSTALL_SYSCONFDIR=${TARGET_DIR}/share \ - -DCMAKE_INSTALL_DATADIR=${TARGET_DIR}/share \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DBUILD_TESTS=OFF \ - -DBUILD_WSI_{XCB,XLIB,WAYLAND}_SUPPORT=ON .. - make -j$(nproc) && make install - cp -a ${TARGET_DIR}/lib/libvulkan.so* ${SOURCE_DIR}/Vulkan-Loader - echo "Vulkan-Loader/libvulkan.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - popd - popd - popd - - # SHADERC - shaderc_ver="v2026.2" - pushd ${SOURCE_DIR} - git clone -b ${shaderc_ver} --depth=1 https://github.com/google/shaderc.git - pushd shaderc - ./utils/git-sync-deps - mkdir build && pushd build - cmake \ - -GNinja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=${TARGET_DIR} \ - -DSHADERC_SKIP_{TESTS,EXAMPLES,COPYRIGHT_CHECK}=ON \ - -DENABLE_{GLSLANG_BINARIES,EXCEPTIONS}=ON \ - -DENABLE_CTEST=OFF \ - -DSPIRV_SKIP_EXECUTABLES=ON \ - -DSPIRV_TOOLS_BUILD_STATIC=ON \ - -DBUILD_SHARED_LIBS=OFF .. - ninja -j$(nproc) - ninja install - cp -a ${TARGET_DIR}/lib/libshaderc_shared.so* ${SOURCE_DIR}/shaderc - echo "shaderc/libshaderc_shared* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - popd - popd - popd - - # MESA - # Minimal libs for AMD VAAPI, AMD RADV and Intel ANV - if [[ ${LLVM_VER} -ge 15 ]]; then - if [[ ${LLVMSPIRVLIB_VER} -ge 15 && ${LLVMSPIRVLIB_VER} -le 21 ]]; then - # Intel ANV requires llvmspirvlib >= 15 (and <= 21 in mesa 26.0) - mesa_vk_drv="amd,intel" - mesa_llvm_clc="enabled" - apt-get install -y {llvm-,libllvmspirvlib-,libclc-,libclang-,libclang-cpp}${LLVMSPIRVLIB_VER}-dev libudev-dev - else - mesa_vk_drv="amd" - mesa_llvm_clc="disabled" - apt-get install -y libudev-dev - fi - pushd ${SOURCE_DIR} - mkdir mesa - pushd mesa - mesa_ver="mesa-26.0.8" - mesa_link="https://gitlab.freedesktop.org/mesa/mesa/-/archive/${mesa_ver}/mesa-${mesa_ver}.tar.gz" - wget ${mesa_link} -O mesa.tar.gz - tar xaf mesa.tar.gz - # Enable VAAPI VPP alpha blending support - wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41090.patch | \ - patch -p1 -d mesa-${mesa_ver} - # Fix misc CSC issues in VAAPI VPP - wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42181.patch | \ - patch -p1 -d mesa-${mesa_ver} - # Fix setting VPE rotation with horizontal flip enabled - wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42408.patch | \ - sed 's#/mm/#/#g' | patch -p1 -d mesa-${mesa_ver} - # Fix setting chroma swizzle mode in VK Video on GFX9 - wget -q -O - https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42763.patch | \ - patch -p1 -d mesa-${mesa_ver} - meson setup mesa-${mesa_ver} mesa_build \ - --prefix=${TARGET_DIR} \ - --libdir=lib \ - --buildtype=release \ - --wrap-mode=nofallback \ - -Db_ndebug=true \ - -Db_lto=false \ - -Dplatforms=x11 \ - -Dgallium-drivers=radeonsi \ - -Dvulkan-drivers=${mesa_vk_drv} \ - -Dvulkan-layers=device-select \ - -Dvulkan-manifest-per-architecture=true \ - -Degl=disabled \ - -Dgallium-{extra-hud,rusticl}=false \ - -Dgallium-mediafoundation=disabled \ - -Dgallium-va=enabled \ - -Dvideo-codecs=all \ - -Dgbm=disabled \ - -Dgles1=disabled \ - -Dgles2=disabled \ - -Dopengl=false \ - -Dglvnd=disabled \ - -Dglx=disabled \ - -Dlibunwind=disabled \ - -Dllvm=${mesa_llvm_clc} \ - -Damd-use-llvm=false \ - -Dlmsensors=disabled \ - -Dvalgrind=disabled \ - -Dtools=[] \ - -Dzstd=enabled \ - -Dmicrosoft-clc=disabled \ - -Dintel-elk=false - meson configure mesa_build - ninja -j$(nproc) -C mesa_build install - cp -a ${TARGET_DIR}/lib/libvulkan_*.so ${SOURCE_DIR}/mesa - cp -a ${TARGET_DIR}/lib/libVkLayer_MESA_device_select.so ${SOURCE_DIR}/mesa - # radeonsi_drv_video.so -> libgallium_drv_video.so is soft link - cp ${TARGET_DIR}/lib/dri/radeonsi_drv_video.so ${SOURCE_DIR}/mesa - echo "mesa/lib*.so usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - echo "mesa/radeonsi_drv_video.so usr/lib/jellyfin-ffmpeg/lib/dri" >> ${DPKG_INSTALL_LIST} - cp ${TARGET_DIR}/share/drirc.d/*.conf ${SOURCE_DIR}/mesa - echo "mesa/*defaults.conf usr/lib/jellyfin-ffmpeg/share/drirc.d" >> ${DPKG_INSTALL_LIST} - cp ${TARGET_DIR}/share/vulkan/{icd.d,implicit_layer.d}/*.json ${SOURCE_DIR}/mesa - echo "mesa/*icd.x86_64.json usr/lib/jellyfin-ffmpeg/share/vulkan/icd.d" >> ${DPKG_INSTALL_LIST} - echo "mesa/*device_select.json usr/lib/jellyfin-ffmpeg/share/vulkan/implicit_layer.d" >> ${DPKG_INSTALL_LIST} - popd - popd - fi - - # LIBPLACEBO - pushd ${SOURCE_DIR} - git clone -b v7.360.1 --recursive --depth=1 https://github.com/haasn/libplacebo.git - # Fix bit shift when importing P01x non-multiplane image - git -C libplacebo apply ${SOURCE_DIR}/builder/patches/libplacebo/*.patch - sed -i 's/env: python_env,//g' libplacebo/src/vulkan/meson.build - meson setup libplacebo placebo_build \ - --prefix=${TARGET_DIR} \ - --libdir=lib \ - --buildtype=release \ - --default-library=shared \ - -Dvulkan=enabled \ - -Dvk-proc-addr=enabled \ - -Dvulkan-registry=${TARGET_DIR}/share/vulkan/registry/vk.xml \ - -Dshaderc=enabled \ - -Dglslang=disabled \ - -D{demos,tests,bench,fuzz}=false - meson configure placebo_build - ninja -j$(nproc) -C placebo_build install - cp -a ${TARGET_DIR}/lib/libplacebo.so* ${SOURCE_DIR}/libplacebo - echo "libplacebo/libplacebo* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST} - popd } # Prepare extra headers, libs and drivers for {arm,aarch64}-linux-gnu* @@ -733,6 +792,8 @@ EOF for tool in {gcc,g++,gcc-ar,gcc-ranlib,gcc-nm}; do ln -sf "/usr/bin/aarch64-linux-gnu-$tool-${GCC_VER}" "/usr/bin/aarch64-linux-gnu-$tool" done + # Update pkgconfig search path + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/lib/aarch64-linux-gnu/pkgconfig } # Set the architecture-specific options