From 2f916f2be6ef4f6ffcbcd7edbcee06546d0da519 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Tue, 1 Feb 2022 12:44:25 -0800 Subject: [PATCH] meson: add support for `meson devenv` with vulkan Meson devenv is a feature added in meson 0.58 (thus the features is version guarded) that allows creating a shell environment with environment variables automatically setup for running the project inside the build dir. Some variables (such as LD_LIBRARY_PATH and PATH) are set automatically, others must be added by the project. For vulkan is is relativley simple, we create a new, uninstalled, icd file for each driver and set the VK_ICD_FILENAMES variable appropriately. This can be used with: ```sh meson devenv -C $builddir ``` then, vulkan applications will automatically use the uninstall vulkan driver, no need to install. Reviewed-by: Adam Jackson Part-of: --- meson.build | 6 ++++++ src/broadcom/vulkan/meson.build | 18 ++++++++++++++++++ src/freedreno/vulkan/meson.build | 18 ++++++++++++++++++ src/gallium/targets/lavapipe/meson.build | 18 ++++++++++++++++++ src/intel/vulkan/meson.build | 18 ++++++++++++++++++ src/panfrost/vulkan/meson.build | 18 ++++++++++++++++++ src/virtio/vulkan/meson.build | 18 ++++++++++++++++++ 7 files changed, 114 insertions(+) diff --git a/meson.build b/meson.build index bca6b1f5c41..961ca8ecc6b 100644 --- a/meson.build +++ b/meson.build @@ -2167,10 +2167,16 @@ endif # as GCC LTO drops them. See: https://bugs.freedesktop.org/show_bug.cgi?id=109391 gcc_lto_quirk = (cc.get_id() == 'gcc') ? ['-fno-lto'] : [] +devenv = environment() + subdir('include') subdir('bin') subdir('src') +if meson.version().version_compare('>= 0.58') + meson.add_devenv(devenv) +endif + lines = ['', 'prefix: ' + get_option('prefix'), 'libdir: ' + get_option('libdir'), diff --git a/src/broadcom/vulkan/meson.build b/src/broadcom/vulkan/meson.build index f86598ee95e..161c109f76a 100644 --- a/src/broadcom/vulkan/meson.build +++ b/src/broadcom/vulkan/meson.build @@ -165,3 +165,21 @@ broadcom_icd = custom_target( install_dir : with_vulkan_icd_dir, install : true, ) + +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'broadcom_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'broadcom_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.3', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_broadcom.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif diff --git a/src/freedreno/vulkan/meson.build b/src/freedreno/vulkan/meson.build index abd34c2e965..e948c88d336 100644 --- a/src/freedreno/vulkan/meson.build +++ b/src/freedreno/vulkan/meson.build @@ -181,3 +181,21 @@ freedreno_icd = custom_target( install_dir : with_vulkan_icd_dir, install : true, ) + +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'freedreno_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'freedreno_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.1', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_freedreno.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif diff --git a/src/gallium/targets/lavapipe/meson.build b/src/gallium/targets/lavapipe/meson.build index 164811833d4..f2b363099ae 100644 --- a/src/gallium/targets/lavapipe/meson.build +++ b/src/gallium/targets/lavapipe/meson.build @@ -40,3 +40,21 @@ lvp_icd = custom_target( install_dir : with_vulkan_icd_dir, install : true, ) + +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'lvp_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'lvp_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.1', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_lvp.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif diff --git a/src/intel/vulkan/meson.build b/src/intel/vulkan/meson.build index 59e5e0e9db1..dff91c889fc 100644 --- a/src/intel/vulkan/meson.build +++ b/src/intel/vulkan/meson.build @@ -49,6 +49,24 @@ intel_icd = custom_target( install : true, ) +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'intel_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'intel_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.3', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_intel.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif + libanv_per_hw_ver_libs = [] anv_per_hw_ver_files = files( 'genX_blorp_exec.c', diff --git a/src/panfrost/vulkan/meson.build b/src/panfrost/vulkan/meson.build index 971ca85101d..2471fd4641a 100644 --- a/src/panfrost/vulkan/meson.build +++ b/src/panfrost/vulkan/meson.build @@ -154,3 +154,21 @@ panfrost_icd = custom_target( install_dir : with_vulkan_icd_dir, install : true, ) + +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'panfrost_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'panfrost_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.1', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_panfrost.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif diff --git a/src/virtio/vulkan/meson.build b/src/virtio/vulkan/meson.build index adeb51e8e42..712a466c1b4 100644 --- a/src/virtio/vulkan/meson.build +++ b/src/virtio/vulkan/meson.build @@ -30,6 +30,24 @@ virtio_icd = custom_target( install : true, ) +if meson.version().version_compare('>= 0.58') + _dev_icdname = 'virtio_devenv_icd.@0@.json'.format(host_machine.cpu()) + custom_target( + 'virtio_devenv_icd', + input : [vk_icd_gen, vk_api_xml], + output : _dev_icdname, + command : [ + prog_python, '@INPUT0@', + '--api-version', '1.2', '--xml', '@INPUT1@', + '--lib-path', meson.current_build_dir() / 'libvulkan_virtio.so', + '--out', '@OUTPUT@', + ], + build_by_default : true, + ) + + devenv.append('VK_ICD_FILENAMES', meson.current_build_dir() / _dev_icdname) +endif + libvn_files = files( 'vn_buffer.c', 'vn_command_buffer.c',