commit: 16bafc2180b7a6f3b1d9af982ce5b2e7c223fd5e Author: Alfred Wingate <parona <AT> protonmail <DOT> com> AuthorDate: Sun Aug 3 11:33:45 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Mon Aug 4 18:52:27 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=16bafc21
dev-util/vulkan-tools: fix cube build on wayland I feel a rebvump is warranted as the patch removes dlopens from the x11 path as well. Bug: https://bugs.gentoo.org/959725 Signed-off-by: Alfred Wingate <parona <AT> protonmail.com> Part-of: https://github.com/gentoo/gentoo/pull/43301 Closes: https://github.com/gentoo/gentoo/pull/43301 Signed-off-by: Sam James <sam <AT> gentoo.org> .../vulkan-tools-1.4.321-fix-cube-wayland.patch | 90 ++++++++++++++++++++++ .../vulkan-tools/vulkan-tools-1.4.321.0-r1.ebuild | 88 +++++++++++++++++++++ 2 files changed, 178 insertions(+) diff --git a/dev-util/vulkan-tools/files/vulkan-tools-1.4.321-fix-cube-wayland.patch b/dev-util/vulkan-tools/files/vulkan-tools-1.4.321-fix-cube-wayland.patch new file mode 100644 index 000000000000..024d81a7338e --- /dev/null +++ b/dev-util/vulkan-tools/files/vulkan-tools-1.4.321-fix-cube-wayland.patch @@ -0,0 +1,90 @@ +https://bugs.gentoo.org/959725 +https://github.com/KhronosGroup/Vulkan-Tools/issues/1130 +https://github.com/KhronosGroup/Vulkan-Tools/pull/1134 +https://github.com/KhronosGroup/Vulkan-Tools/commit/105d6c1fede00c3a9055e5a531ebf3d99bac406e + +From f546743016f5301c063f2c50af0ea43dd2485ef4 Mon Sep 17 00:00:00 2001 +From: Charles Giessen <[email protected]> +Date: Thu, 17 Jul 2025 09:56:40 -0500 +Subject: [PATCH] build: Remove pkg-config provided library names + +The library names of Xcb, Xlib, and Wayland do not need to be queried from pkg-config, +instead they can be hardcoded to use the fallback names. + +The intent of querying the library names was to prevent issues where the hardcoded name +was not the platform-appropriate name. But because <library>_LINK_LIBRARIES can have +more than one library name, the logic to assign <library>_LINK_LIBRARIES into a compile +definition breaks horribly. While it is possible to handle this in CMake, the dlopen code would +also have to handle it which is much more error prone. +--- a/cube/CMakeLists.txt ++++ b/cube/CMakeLists.txt +@@ -307,16 +307,6 @@ if (ANDROID) + return() + endif() + +-if (XCB_LINK_LIBRARIES) +- target_compile_definitions(vkcube PRIVATE "XCB_LIBRARY=\"${XCB_LINK_LIBRARIES}\"") +-endif() +-if (X11_LINK_LIBRARIES) +- target_compile_definitions(vkcube PRIVATE "XLIB_LIBRARY=\"${X11_LINK_LIBRARIES}\"") +-endif() +-if (WAYLAND_CLIENT_LINK_LIBRARIES) +- target_compile_definitions(vkcube PRIVATE "WAYLAND_LIBRARY=\"${WAYLAND_CLIENT_LINK_LIBRARIES}\"") +-endif() +- + # ---------------------------------------------------------------------------- + # vkcubepp + +@@ -360,16 +350,6 @@ target_include_directories(vkcubepp PRIVATE .) + target_compile_definitions(vkcubepp PRIVATE ${ENABLED_CUBE_PLATFORMS}) + target_link_libraries(vkcubepp ${CMAKE_DL_LIBS} Vulkan::Headers) + +-if (XCB_LINK_LIBRARIES ) +- target_compile_definitions(vkcubepp PUBLIC "XCB_LIBRARY=\"${XCB_LINK_LIBRARIES}\"") +-endif() +-if (X11_LINK_LIBRARIES) +- target_compile_definitions(vkcubepp PUBLIC "XLIB_LIBRARY=\"${X11_LINK_LIBRARIES}\"") +-endif() +-if (WAYLAND_CLIENT_LINK_LIBRARIES) +- target_compile_definitions(vkcubepp PUBLIC "WAYLAND_LIBRARY=\"${WAYLAND_CLIENT_LINK_LIBRARIES}\"") +-endif() +- + if(APPLE) + install( + TARGETS vkcubepp +--- a/cube/wayland_loader.h ++++ b/cube/wayland_loader.h +@@ -80,9 +80,6 @@ static PFN_wl_display_disconnect cube_wl_display_disconnect = NULL; + + static inline void *initialize_wayland() { + void *wayland_library = NULL; +-#if defined(WAYLAND_LIBRARY) +- wayland_library = dlopen(WAYLAND_LIBRARY, RTLD_NOW | RTLD_LOCAL); +-#endif + if (NULL == wayland_library) { + wayland_library = dlopen("libwayland-client.so.0", RTLD_NOW | RTLD_LOCAL); + } +--- a/cube/xcb_loader.h ++++ b/cube/xcb_loader.h +@@ -88,9 +88,6 @@ static PFN_xcb_screen_next cube_xcb_screen_next = NULL; + + void *initialize_xcb() { + void *xcb_library = NULL; +-#if defined(XCB_LIBRARY) +- xcb_library = dlopen(XCB_LIBRARY, RTLD_NOW | RTLD_LOCAL); +-#endif + if (NULL == xcb_library) { + xcb_library = dlopen("libxcb.so.1", RTLD_NOW | RTLD_LOCAL); + } +--- a/cube/xlib_loader.h ++++ b/cube/xlib_loader.h +@@ -72,9 +72,6 @@ static PFN_XFlush cube_XFlush = NULL; + + void* initialize_xlib() { + void* xlib_library = NULL; +-#if defined(XLIB_LIBRARY) +- xlib_library = dlopen(XLIB_LIBRARY, RTLD_NOW | RTLD_LOCAL); +-#endif + if (NULL == xlib_library) { + xlib_library = dlopen("libX11.so.6", RTLD_NOW | RTLD_LOCAL); + } diff --git a/dev-util/vulkan-tools/vulkan-tools-1.4.321.0-r1.ebuild b/dev-util/vulkan-tools/vulkan-tools-1.4.321.0-r1.ebuild new file mode 100644 index 000000000000..3322cc78ca08 --- /dev/null +++ b/dev-util/vulkan-tools/vulkan-tools-1.4.321.0-r1.ebuild @@ -0,0 +1,88 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MY_PN=Vulkan-Tools +PYTHON_COMPAT=( python3_{11..14} ) +inherit cmake-multilib python-any-r1 + +if [[ ${PV} == *9999* ]]; then + EGIT_REPO_URI="https://github.com/KhronosGroup/${MY_PN}.git" + EGIT_SUBMODULES=() + inherit git-r3 +else + SRC_URI="https://github.com/KhronosGroup/${MY_PN}/archive/vulkan-sdk-${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv" + S="${WORKDIR}"/${MY_PN}-vulkan-sdk-${PV} +fi + +DESCRIPTION="Official Vulkan Tools and Utilities for Windows, Linux, Android, and MacOS" +HOMEPAGE="https://github.com/KhronosGroup/Vulkan-Tools" + +LICENSE="Apache-2.0" +SLOT="0" +IUSE="cube wayland test X" +RESTRICT="!test? ( test )" + +BDEPEND="${PYTHON_DEPS} + cube? ( ~dev-util/glslang-${PV}:=[${MULTILIB_USEDEP}] ) +" +RDEPEND=" + wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] ) + X? ( + x11-libs/libX11[${MULTILIB_USEDEP}] + x11-libs/libxcb:=[${MULTILIB_USEDEP}] + ) +" +DEPEND="${RDEPEND} + ~dev-util/vulkan-headers-${PV} + X? ( x11-libs/libXrandr[${MULTILIB_USEDEP}] ) + test? ( ~media-libs/vulkan-loader-${PV}[${MULTILIB_USEDEP},wayland?,X?] ) +" + +PATCHES=( + "${FILESDIR}"/vulkan-tools-1.4.321-fix-cube-wayland.patch +) + +pkg_setup() { + MULTILIB_CHOST_TOOLS=( + /usr/bin/vulkaninfo + ) + + use cube && MULTILIB_CHOST_TOOLS+=( + /usr/bin/vkcube + /usr/bin/vkcubepp + ) + + python-any-r1_pkg_setup +} + +multilib_src_configure() { + local mycmakeargs=( + -DCMAKE_C_FLAGS="${CFLAGS} -DNDEBUG" + -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DNDEBUG -DGIT_BRANCH_NAME=\\\"gentoo\\\" -DGIT_TAG_INFO=\\\"${PV//./_}\\\"" + -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON + -DCMAKE_SKIP_RPATH=ON + -DBUILD_VULKANINFO=ON + -DBUILD_CUBE=$(usex cube) + -DBUILD_TESTS=$(usex test) + -DBUILD_WERROR=OFF + -DBUILD_WSI_WAYLAND_SUPPORT=$(usex wayland) + -DBUILD_WSI_XCB_SUPPORT=$(usex X) + -DBUILD_WSI_XLIB_SUPPORT=$(usex X) + -DVULKAN_HEADERS_INSTALL_DIR="${ESYSROOT}/usr" + ) + + cmake_src_configure +} + +pkg_postinst() { + if use cube; then + einfo "As of version 1.4.304.0, the window system for 'vkcube' and 'vkcubepp'" + einfo "can be selected at runtime using the '--wsi' runtime argument." + einfo "For example, Wayland can be selected using '--wsi wayland'." + einfo "As such, 'vkcube-wayland' has been removed and the runtime argument" + einfo "must be used instead. See 'vkcube --help' for more information." + fi +}
