dri: Let dril handle the DRI driver link farm
xserver's loader will look for drivers this way, but there's no reason we need to keep hurting ourselves like that. Co-authored-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Acked-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28378>
This commit is contained in:
@@ -23,7 +23,7 @@ if with_ld_dynamic_list
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
libgallium_dri = shared_library(
|
libgallium_dri = shared_library(
|
||||||
'gallium_dri',
|
'gallium',
|
||||||
files('dri_target.c'),
|
files('dri_target.c'),
|
||||||
include_directories : [
|
include_directories : [
|
||||||
inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util, inc_gallium_drivers,
|
inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util, inc_gallium_drivers,
|
||||||
@@ -50,93 +50,3 @@ libgallium_dri = shared_library(
|
|||||||
install_dir : dri_drivers_path,
|
install_dir : dri_drivers_path,
|
||||||
name_suffix : 'so',
|
name_suffix : 'so',
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach d : [[with_gallium_kmsro, [
|
|
||||||
'armada-drm_dri.so',
|
|
||||||
'exynos_dri.so',
|
|
||||||
'gm12u320_dri.so',
|
|
||||||
'hdlcd_dri.so',
|
|
||||||
'hx8357d_dri.so',
|
|
||||||
'ili9163_dri.so',
|
|
||||||
'ili9225_dri.so',
|
|
||||||
'ili9341_dri.so',
|
|
||||||
'ili9486_dri.so',
|
|
||||||
'imx-drm_dri.so',
|
|
||||||
'imx-dcss_dri.so',
|
|
||||||
'imx-lcdif_dri.so',
|
|
||||||
'ingenic-drm_dri.so',
|
|
||||||
'kirin_dri.so',
|
|
||||||
'komeda_dri.so',
|
|
||||||
'mali-dp_dri.so',
|
|
||||||
'mcde_dri.so',
|
|
||||||
'mediatek_dri.so',
|
|
||||||
'meson_dri.so',
|
|
||||||
'mi0283qt_dri.so',
|
|
||||||
'mxsfb-drm_dri.so',
|
|
||||||
'panel-mipi-dbi_dri.so',
|
|
||||||
'pl111_dri.so',
|
|
||||||
'rcar-du_dri.so',
|
|
||||||
'repaper_dri.so',
|
|
||||||
'rockchip_dri.so',
|
|
||||||
'rzg2l-du_dri.so',
|
|
||||||
'ssd130x_dri.so',
|
|
||||||
'st7586_dri.so',
|
|
||||||
'st7735r_dri.so',
|
|
||||||
'sti_dri.so',
|
|
||||||
'stm_dri.so',
|
|
||||||
'sun4i-drm_dri.so',
|
|
||||||
'udl_dri.so',
|
|
||||||
'vkms_dri.so',
|
|
||||||
'zynqmp-dpsub_dri.so',
|
|
||||||
]],
|
|
||||||
[with_gallium_radeonsi, 'radeonsi_dri.so'],
|
|
||||||
[with_gallium_nouveau, 'nouveau_dri.so'],
|
|
||||||
[with_gallium_freedreno, ['msm_dri.so', 'kgsl_dri.so']],
|
|
||||||
[with_gallium_softpipe, 'swrast_dri.so'],
|
|
||||||
[with_gallium_softpipe and with_gallium_drisw_kms, 'kms_swrast_dri.so'],
|
|
||||||
[with_gallium_v3d, 'v3d_dri.so'],
|
|
||||||
[with_gallium_vc4, 'vc4_dri.so'],
|
|
||||||
[with_gallium_panfrost, ['panfrost_dri.so', 'panthor_dri.so']],
|
|
||||||
[with_gallium_etnaviv, 'etnaviv_dri.so'],
|
|
||||||
[with_gallium_tegra, 'tegra_dri.so'],
|
|
||||||
[with_gallium_crocus, 'crocus_dri.so'],
|
|
||||||
[with_gallium_iris, 'iris_dri.so'],
|
|
||||||
[with_gallium_i915, 'i915_dri.so'],
|
|
||||||
[with_gallium_r300, 'r300_dri.so'],
|
|
||||||
[with_gallium_r600, 'r600_dri.so'],
|
|
||||||
[with_gallium_svga, 'vmwgfx_dri.so'],
|
|
||||||
[with_gallium_virgl or
|
|
||||||
(with_gallium_freedreno and freedreno_kmds.contains('virtio')),
|
|
||||||
'virtio_gpu_dri.so'],
|
|
||||||
[with_gallium_lima, 'lima_dri.so'],
|
|
||||||
[with_gallium_zink, 'zink_dri.so'],
|
|
||||||
[with_gallium_d3d12, 'd3d12_dri.so'],
|
|
||||||
[with_gallium_asahi, 'asahi_dri.so']]
|
|
||||||
if d[0]
|
|
||||||
gallium_dri_drivers += d[1]
|
|
||||||
endif
|
|
||||||
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()
|
|
||||||
devenv.set('LIBGL_DRIVERS_PATH', meson.current_build_dir())
|
|
||||||
|
|
||||||
foreach d : gallium_dri_drivers
|
|
||||||
custom_target(
|
|
||||||
'devenv_@0@'.format(d),
|
|
||||||
input : libgallium_dri,
|
|
||||||
output : d,
|
|
||||||
command : [prog_ln, '-f', '@INPUT@', '@OUTPUT@'],
|
|
||||||
build_by_default : true,
|
|
||||||
)
|
|
||||||
endforeach
|
|
||||||
endif
|
|
||||||
|
|
||||||
meson.add_install_script(
|
|
||||||
install_megadrivers_py.full_path(),
|
|
||||||
libgallium_dri.full_path(),
|
|
||||||
dri_drivers_path,
|
|
||||||
gallium_dri_drivers,
|
|
||||||
install_tag : 'runtime',
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -61,3 +61,92 @@ dril_dri = shared_library(
|
|||||||
install_dir : dri_drivers_path,
|
install_dir : dri_drivers_path,
|
||||||
name_suffix : 'so',
|
name_suffix : 'so',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
foreach d : [[with_gallium_kmsro, [
|
||||||
|
'armada-drm_dri.so',
|
||||||
|
'exynos_dri.so',
|
||||||
|
'gm12u320_dri.so',
|
||||||
|
'hdlcd_dri.so',
|
||||||
|
'hx8357d_dri.so',
|
||||||
|
'ili9163_dri.so',
|
||||||
|
'ili9225_dri.so',
|
||||||
|
'ili9341_dri.so',
|
||||||
|
'ili9486_dri.so',
|
||||||
|
'imx-drm_dri.so',
|
||||||
|
'imx-dcss_dri.so',
|
||||||
|
'imx-lcdif_dri.so',
|
||||||
|
'ingenic-drm_dri.so',
|
||||||
|
'kirin_dri.so',
|
||||||
|
'komeda_dri.so',
|
||||||
|
'mali-dp_dri.so',
|
||||||
|
'mcde_dri.so',
|
||||||
|
'mediatek_dri.so',
|
||||||
|
'meson_dri.so',
|
||||||
|
'mi0283qt_dri.so',
|
||||||
|
'mxsfb-drm_dri.so',
|
||||||
|
'panel-mipi-dbi_dri.so',
|
||||||
|
'pl111_dri.so',
|
||||||
|
'rcar-du_dri.so',
|
||||||
|
'repaper_dri.so',
|
||||||
|
'rockchip_dri.so',
|
||||||
|
'rzg2l-du_dri.so',
|
||||||
|
'ssd130x_dri.so',
|
||||||
|
'st7586_dri.so',
|
||||||
|
'st7735r_dri.so',
|
||||||
|
'sti_dri.so',
|
||||||
|
'stm_dri.so',
|
||||||
|
'sun4i-drm_dri.so',
|
||||||
|
'udl_dri.so',
|
||||||
|
'vkms_dri.so',
|
||||||
|
'zynqmp-dpsub_dri.so',
|
||||||
|
]],
|
||||||
|
[with_gallium_radeonsi, 'radeonsi_dri.so'],
|
||||||
|
[with_gallium_nouveau, 'nouveau_dri.so'],
|
||||||
|
[with_gallium_freedreno, ['msm_dri.so', 'kgsl_dri.so']],
|
||||||
|
[with_gallium_softpipe, 'swrast_dri.so'],
|
||||||
|
[with_gallium_softpipe and with_gallium_drisw_kms, 'kms_swrast_dri.so'],
|
||||||
|
[with_gallium_v3d, 'v3d_dri.so'],
|
||||||
|
[with_gallium_vc4, 'vc4_dri.so'],
|
||||||
|
[with_gallium_panfrost, ['panfrost_dri.so', 'panthor_dri.so']],
|
||||||
|
[with_gallium_etnaviv, 'etnaviv_dri.so'],
|
||||||
|
[with_gallium_tegra, 'tegra_dri.so'],
|
||||||
|
[with_gallium_crocus, 'crocus_dri.so'],
|
||||||
|
[with_gallium_iris, 'iris_dri.so'],
|
||||||
|
[with_gallium_i915, 'i915_dri.so'],
|
||||||
|
[with_gallium_r300, 'r300_dri.so'],
|
||||||
|
[with_gallium_r600, 'r600_dri.so'],
|
||||||
|
[with_gallium_svga, 'vmwgfx_dri.so'],
|
||||||
|
[with_gallium_virgl or
|
||||||
|
(with_gallium_freedreno and freedreno_kmds.contains('virtio')),
|
||||||
|
'virtio_gpu_dri.so'],
|
||||||
|
[with_gallium_lima, 'lima_dri.so'],
|
||||||
|
[with_gallium_d3d12, 'd3d12_dri.so'],
|
||||||
|
[with_gallium_asahi, 'asahi_dri.so']]
|
||||||
|
if d[0]
|
||||||
|
dril_drivers += d[1]
|
||||||
|
endif
|
||||||
|
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()
|
||||||
|
devenv.set('LIBGL_DRIVERS_PATH', meson.current_build_dir())
|
||||||
|
|
||||||
|
foreach d : dril_drivers
|
||||||
|
custom_target(
|
||||||
|
'devenv_@0@'.format(d),
|
||||||
|
input : dril_dri,
|
||||||
|
output : d,
|
||||||
|
command : [prog_ln, '-f', '@INPUT@', '@OUTPUT@'],
|
||||||
|
build_by_default : true,
|
||||||
|
)
|
||||||
|
endforeach
|
||||||
|
endif
|
||||||
|
|
||||||
|
meson.add_install_script(
|
||||||
|
install_megadrivers_py.full_path(),
|
||||||
|
dril_dri.full_path(),
|
||||||
|
dri_drivers_path,
|
||||||
|
dril_drivers,
|
||||||
|
install_tag : 'runtime',
|
||||||
|
)
|
||||||
|
|||||||
+1
-1
@@ -883,7 +883,7 @@ loader_open_driver(const char *driver_name,
|
|||||||
const struct __DRIextensionRec **extensions = NULL;
|
const struct __DRIextensionRec **extensions = NULL;
|
||||||
const struct __DRIextensionRec **(*get_extensions)(void);
|
const struct __DRIextensionRec **(*get_extensions)(void);
|
||||||
|
|
||||||
void *driver = loader_open_driver_lib(driver_name, "_dri", search_path_vars,
|
void *driver = loader_open_driver_lib("libgallium", "", search_path_vars,
|
||||||
DEFAULT_DRIVER_DIR, !driver_name_is_inferred);
|
DEFAULT_DRIVER_DIR, !driver_name_is_inferred);
|
||||||
|
|
||||||
if (!driver)
|
if (!driver)
|
||||||
|
|||||||
Reference in New Issue
Block a user