From 608d65db5baf5b3fd8c13355ee4addc480ee3f40 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Fri, 27 Feb 2026 10:27:37 +0100 Subject: [PATCH] gallium/va: set up symlinks in build-dir Without this libva won't be able to find the driver without LIBVA_DRIVER_NAME trickery, because the driver has a generic name. But in the DRI case, even LIBVA_DRIVER_NAME won't do, because the driver name needs to end with "_drv_video.so", which it doesn't. So let's instead set up symlinks in the build-dir, like DRIL does. Part-of: --- meson.build | 2 ++ src/gallium/targets/dri/meson.build | 12 +++++++++++- src/gallium/targets/dril/meson.build | 1 - src/gallium/targets/va/meson.build | 13 ++++++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index 8998afae80e..f2b32e7fbe5 100644 --- a/meson.build +++ b/meson.build @@ -2099,6 +2099,8 @@ else prog_flex_cpp = prog_flex endif +prog_ln = find_program('ln', required : false) + _libunwind = get_option('libunwind') \ .require(not with_platform_android, error_message : 'Android requires the use of the backtrace library, not libunwind') if host_machine.system() == 'darwin' diff --git a/src/gallium/targets/dri/meson.build b/src/gallium/targets/dri/meson.build index 412239f7b43..c8ac8f7d510 100644 --- a/src/gallium/targets/dri/meson.build +++ b/src/gallium/targets/dri/meson.build @@ -75,7 +75,17 @@ if with_gallium_va [with_gallium_virgl, 'virtio_gpu'], [with_gallium_d3d12_video, 'd3d12']] if d[0] - va_drivers += '@0@_drv_video.so'.format(d[1]) + name = '@0@_drv_video.so'.format(d[1]) + va_drivers += name + + if prog_ln.found() + custom_target( + name, + output : name, + command : [prog_ln, '-sf', libgallium_dri.full_path(), '@OUTPUT@'], + build_by_default : true, + ) + endif endif endforeach diff --git a/src/gallium/targets/dril/meson.build b/src/gallium/targets/dril/meson.build index 62a816f44a6..0cd31d2fd10 100644 --- a/src/gallium/targets/dril/meson.build +++ b/src/gallium/targets/dril/meson.build @@ -131,7 +131,6 @@ foreach d : [[with_gallium_kmsro, [ endforeach # This only works on Unix-like oses, which is probably fine for dri -prog_ln = find_program('ln', required : false) if prog_ln.found() foreach d : dril_drivers custom_target( diff --git a/src/gallium/targets/va/meson.build b/src/gallium/targets/va/meson.build index 23e6035e359..af79433e4c1 100644 --- a/src/gallium/targets/va/meson.build +++ b/src/gallium/targets/va/meson.build @@ -92,7 +92,18 @@ else [with_gallium_virgl, 'virtio_gpu'], [with_gallium_d3d12_video, 'd3d12']] if d[0] - va_drivers += '@0@_drv_video.so'.format(d[1]) + name = '@0@_drv_video.so'.format(d[1]) + va_drivers += name + + if prog_ln.found() + custom_target( + name, + output : name, + command : [prog_ln, '-sf', libva_gallium.full_path(), '@OUTPUT@'], + build_by_default : true, + ) + endif + endif endforeach