radv: restrict exported symbols with static llvm
Like the gallium --version-script magic but for radv. The long term goal is to make LLVM support optional, remove it even, so let's keep the hunk in an if block. v2: fold if checks (Eric) v3 (Tomeu): Remove spaces within [] (Dylan) Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> (v1) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6203>
This commit is contained in:
@@ -148,6 +148,16 @@ if with_platform_android
|
||||
]
|
||||
endif
|
||||
|
||||
# When static linking LLVM, all its symbols are public API.
|
||||
# That may cause symbol collision, so explicitly demote everything.
|
||||
libvulkan_radeon_ld_args = []
|
||||
libvulkan_radeon_link_depends = []
|
||||
|
||||
if with_llvm and with_ld_version_script
|
||||
libvulkan_radeon_ld_args += ['-Wl,--version-script', join_paths(meson.current_source_dir(), 'vulkan.sym')]
|
||||
libvulkan_radeon_link_depends += files('vulkan.sym')
|
||||
endif
|
||||
|
||||
libvulkan_radeon = shared_library(
|
||||
'vulkan_radeon',
|
||||
[libradv_files, radv_entrypoints, radv_extensions_c, amd_vk_format_table_c, sha1_h],
|
||||
@@ -164,7 +174,10 @@ libvulkan_radeon = shared_library(
|
||||
],
|
||||
c_args : [no_override_init_args, radv_flags],
|
||||
cpp_args : [radv_flags],
|
||||
link_args : [ld_args_build_id, ld_args_bsymbolic, ld_args_gc_sections],
|
||||
link_args : [
|
||||
ld_args_build_id, ld_args_bsymbolic, ld_args_gc_sections, libvulkan_radeon_ld_args,
|
||||
],
|
||||
link_depends : [libvulkan_radeon_link_depends,],
|
||||
gnu_symbol_visibility : 'hidden',
|
||||
install : true,
|
||||
)
|
||||
|
11
src/amd/vulkan/vulkan.sym
Normal file
11
src/amd/vulkan/vulkan.sym
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
global:
|
||||
vk_icdGetInstanceProcAddr;
|
||||
vk_icdGetPhysicalDeviceProcAddr;
|
||||
vk_icdNegotiateLoaderICDInterfaceVersion;
|
||||
|
||||
local:
|
||||
# When static linking LLVM, all its symbols are public API.
|
||||
# That may cause symbol collision, so explicitly demote everything.
|
||||
*;
|
||||
};
|
Reference in New Issue
Block a user