From 5de4b61691907da7aa5cfd4b606fc1bbc5c0dafc Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 27 May 2026 04:19:42 +0000 Subject: [PATCH] fix pkgconfig stuff --- externals/ffmpeg/CMakeLists.txt | 163 ++++++++++++++++---------------- 1 file changed, 84 insertions(+), 79 deletions(-) diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index 893cfbc73d..721acf2e5d 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -69,6 +69,9 @@ if (PLATFORM_PS4 OR PLATFORM_MANAGARM) --disable-vulkan --disable-libdrm) elseif (UNIX) + find_package(PkgConfig REQUIRED) + + # X11 is "optional", some distros may opt for a super-fully wayland install... find_package(X11) if(X11_FOUND) # Include X11 if possible, some APIs such as VDPAU heavily depend @@ -83,32 +86,38 @@ elseif (UNIX) X11 "${CMAKE_SYSROOT}/usr/lib/xorg/amd64/libdrm.so") else() - pkg_check_modules(LIBDRM libdrm) - if (LIBDRM_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES - ${LIBDRM_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS - ${LIBDRM_INCLUDE_DIRS}) - endif() + pkg_check_modules(LIBDRM libdrm REQUIRED) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBDRM_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBDRM_LDFLAGS}) endif() - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-libdrm) + list(APPEND FFmpeg_HWACCEL_FLAGS --enable-libdrm) endif() + + pkg_check_modules(LIBVA libva) if(LIBVA_FOUND) - pkg_check_modules(LIBVA-DRM libva-drm) - pkg_check_modules(LIBVA-X11 libva-x11) - list(APPEND FFmpeg_HWACCEL_LIBRARIES - ${LIBVA-DRM_LIBRARIES} - ${LIBVA-X11_LIBRARIES} - ${LIBVA_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA_LDFLAGS}) + + # Logically, they can only exist if libva itself exists + pkg_check_modules(LIBVA-DRM libva-drm REQUIRED) + pkg_check_modules(LIBVA-X11 libva-x11 REQUIRED) + if (LIBVA-DRM_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-DRM_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-DRM_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-DRM_LDFLAGS}) + endif() + if (LIBVA-X11_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-X11_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-X11_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-X11_LDFLAGS}) + endif() + list(APPEND FFmpeg_HWACCEL_FLAGS --enable-hwaccel=h264_vaapi --enable-hwaccel=vp8_vaapi --enable-hwaccel=vp9_vaapi) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS - ${LIBVA-DRM_INCLUDE_DIRS} - ${LIBVA-X11_INCLUDE_DIRS} - ${LIBVA_INCLUDE_DIRS}) message(STATUS "ffmpeg: va-api libraries version ${LIBVA_VERSION} found") else() list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) @@ -119,70 +128,66 @@ elseif (UNIX) message(WARNING "ffmpeg: X11 libraries not found, disabling VA-API...") endif() - find_package(PkgConfig) - if (PkgConfig_FOUND) - pkg_check_modules(LIBVA libva) - pkg_check_modules(CUDA cuda) - pkg_check_modules(FFNVCODEC ffnvcodec) - pkg_check_modules(VDPAU vdpau) - pkg_check_modules(VULKAN vulkan) - find_package(spirv-headers) + pkg_check_modules(CUDA cuda) + pkg_check_modules(FFNVCODEC ffnvcodec) + pkg_check_modules(VDPAU vdpau) + pkg_check_modules(VULKAN vulkan) + find_package(spirv-headers) - if (FFNVCODEC_FOUND) - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-cuvid - --enable-ffnvcodec - --enable-nvdec - --enable-hwaccel=h264_nvdec - --enable-hwaccel=vp8_nvdec - --enable-hwaccel=vp9_nvdec) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${FFNVCODEC_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${FFNVCODEC_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${FFNVCODEC_LDFLAGS}) - message(STATUS "ffmpeg: ffnvcodec libraries version ${FFNVCODEC_VERSION} found") - # ffnvenc could load CUDA libraries at the runtime using dlopen/dlsym or LoadLibrary/GetProcAddress - # here we handle the hard-linking scenario where CUDA is linked during compilation - if (CUDA_FOUND) - # This line causes build error if CUDA_INCLUDE_DIRS is anything but a single non-empty value - #list(APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I${CUDA_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDA_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDA_LDFLAGS}) - message(STATUS "ffmpeg: CUDA libraries version ${CUDA_VERSION} found, hard-linking will be performed") - endif(CUDA_FOUND) - endif() + if (FFNVCODEC_FOUND) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-cuvid + --enable-ffnvcodec + --enable-nvdec + --enable-hwaccel=h264_nvdec + --enable-hwaccel=vp8_nvdec + --enable-hwaccel=vp9_nvdec) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${FFNVCODEC_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${FFNVCODEC_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${FFNVCODEC_LDFLAGS}) + message(STATUS "ffmpeg: ffnvcodec libraries version ${FFNVCODEC_VERSION} found") + # ffnvenc could load CUDA libraries at the runtime using dlopen/dlsym or LoadLibrary/GetProcAddress + # here we handle the hard-linking scenario where CUDA is linked during compilation + if (CUDA_FOUND) + # This line causes build error if CUDA_INCLUDE_DIRS is anything but a single non-empty value + #list(APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I${CUDA_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDA_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDA_LDFLAGS}) + message(STATUS "ffmpeg: CUDA libraries version ${CUDA_VERSION} found, hard-linking will be performed") + endif(CUDA_FOUND) + endif() - if (VDPAU_FOUND AND NOT APPLE) - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-vdpau - --enable-hwaccel=h264_vdpau - --enable-hwaccel=vp9_vdpau) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS}) - message(STATUS "ffmpeg: vdpau libraries version ${VDPAU_VERSION} found") - else() - list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) - message(WARNING "ffmpeg: libvdpau-dev not found, disabling Video Decode and Presentation API for Unix (VDPAU)...") - endif() + if (VDPAU_FOUND AND NOT APPLE) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-vdpau + --enable-hwaccel=h264_vdpau + --enable-hwaccel=vp9_vdpau) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS}) + message(STATUS "ffmpeg: vdpau libraries version ${VDPAU_VERSION} found") + else() + list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) + message(WARNING "ffmpeg: libvdpau-dev not found, disabling Video Decode and Presentation API for Unix (VDPAU)...") + endif() - if (VULKAN_FOUND AND NOT APPLE) - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-vulkan - --enable-hwaccel=h264_vulkan - --enable-hwaccel=vp9_vulkan) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VULKAN_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VULKAN_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VULKAN_LDFLAGS}) - message(STATUS "ffmpeg: vulkan libraries version ${VULKAN_VERSION} found") - endif() + if (VULKAN_FOUND AND NOT APPLE) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-vulkan + --enable-hwaccel=h264_vulkan + --enable-hwaccel=vp9_vulkan) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VULKAN_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VULKAN_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VULKAN_LDFLAGS}) + message(STATUS "ffmpeg: vulkan libraries version ${VULKAN_VERSION} found") + endif() - if (SPIRV_HEADERS_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${SPIRV_HEADERS_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${SPIRV_HEADERS_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${SPIRV_HEADERS_LDFLAGS}) - message(STATUS "ffmpeg: spirv-headers libraries version ${SPIRV_HEADERS_VERSION} found") - endif() + if (SPIRV_HEADERS_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${SPIRV_HEADERS_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${SPIRV_HEADERS_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${SPIRV_HEADERS_LDFLAGS}) + message(STATUS "ffmpeg: spirv-headers libraries version ${SPIRV_HEADERS_VERSION} found") endif() endif()