diff options
-rw-r--r-- | src/CMakeLists.txt | 26 | ||||
-rw-r--r-- | src/client/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/client/configure.cmake | 200 | ||||
-rw-r--r-- | src/client/qtwaylandclientglobal_p.h | 2 | ||||
-rw-r--r-- | src/compositor/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/compositor/configure.cmake | 160 | ||||
-rw-r--r-- | src/compositor/global/qtwaylandcompositorglobal_p.h | 1 | ||||
-rw-r--r-- | src/configure.cmake | 249 | ||||
-rw-r--r-- | src/global/README | 9 | ||||
-rw-r--r-- | sync.profile | 1 |
10 files changed, 267 insertions, 385 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d970fcf5..6787e9cb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,30 +11,8 @@ configure the module on targets that are missing dependencies.") return() endif() -# We conditionally add_subdirectory(client) based on a feature that is defined -# in client/configure.cmake, so we need this hack to make sure the feature is -# defined on this level as well. -# TODO: when we remove configure.json support and stop generating -# configure.cmake, we should move the features up one level and deduplicate the -# features shared with the compositor. -qt_feature_module_begin( - NO_MODULE - PUBLIC_FILE "qtwayland-client-config.h" - PRIVATE_FILE "qtwayland-client-config_p.h" -) -include("${CMAKE_CURRENT_SOURCE_DIR}/client/configure.cmake") -qt_feature_module_end(NO_MODULE) - -# Similar hack as above, but for the compositor -qt_feature_module_begin( - NO_MODULE - PUBLIC_FILE "qtwayland-compositor-config.h" - PRIVATE_FILE "qtwayland-compositor-config_p.h" -) -include("${CMAKE_CURRENT_SOURCE_DIR}/compositor/configure.cmake") -qt_feature_module_end(NO_MODULE) -# special case end - +# See global/README for a description of the following module. +qt_internal_add_module(WaylandGlobalPrivate INTERNAL_MODULE HEADER_MODULE) add_subdirectory(qtwaylandscanner) # special case begin diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 1e1b8389..c4656286 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -58,6 +58,7 @@ qt_internal_add_module(WaylandClient LIBRARIES Qt::CorePrivate Qt::GuiPrivate + Qt::WaylandGlobalPrivate PUBLIC_LIBRARIES Qt::Core Qt::Gui @@ -65,6 +66,7 @@ qt_internal_add_module(WaylandClient PRIVATE_MODULE_INTERFACE Qt::CorePrivate Qt::GuiPrivate + Qt::WaylandGlobalPrivate ) qt6_generate_wayland_protocol_client_sources(WaylandClient diff --git a/src/client/configure.cmake b/src/client/configure.cmake index 11612d11..c90204d0 100644 --- a/src/client/configure.cmake +++ b/src/client/configure.cmake @@ -1,167 +1,15 @@ - - #### Inputs #### Libraries -if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) - qt_find_package(Wayland PROVIDED_TARGETS Wayland::Client MODULE_NAME waylandclient QMAKE_LIB wayland-client) -endif() -if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) - qt_find_package(Wayland PROVIDED_TARGETS Wayland::Cursor MODULE_NAME waylandclient QMAKE_LIB wayland-cursor) -endif() -qt_add_qmake_lib_dependency(wayland-cursor wayland-client) -if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) - qt_find_package(Wayland PROVIDED_TARGETS Wayland::Egl MODULE_NAME waylandclient QMAKE_LIB wayland-egl) -endif() -qt_find_package(XComposite PROVIDED_TARGETS PkgConfig::XComposite MODULE_NAME waylandclient QMAKE_LIB xcomposite) -# special case begin -# X11 is not a public dependency of QtGui anymore, so we need to find it manually in a shared build. -# In a static build the dependency is still propagated, so check for the target existence to prevent -# the 'Attempt to promote imported target "X11::X11" to global scope' issue. -if(NOT TARGET X11::X11) - qt_find_package(X11 PROVIDED_TARGETS X11::X11 MODULE_NAME gui QMAKE_LIB xlib) -endif() -# Same for XKB. -if(NOT TARGET XKB::XKB) - qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL) -endif() -# special case end #### Tests -# drm-egl-server -qt_config_compile_test(drm_egl_server - LABEL "DRM EGL Server" - LIBRARIES - EGL::EGL - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_MESA_drm_image -return 0; -#else -#error Requires EGL_MESA_drm_image to be defined -return 1; -#endif - /* END TEST: */ - return 0; -} -") - -# libhybris-egl-server -qt_config_compile_test(libhybris_egl_server - LABEL "libhybris EGL Server" - LIBRARIES - EGL::EGL - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> -#include <hybris/eglplatformcommon/hybris_nativebufferext.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_HYBRIS_native_buffer -return 0; -#else -#error Requires EGL_HYBRIS_native_buffer to be defined -return 1; -#endif - /* END TEST: */ - return 0; -} -") - -# dmabuf-server-buffer -qt_config_compile_test(dmabuf_server_buffer - LABEL "Linux dma-buf Buffer Sharing" - LIBRARIES - EGL::EGL - Libdrm::Libdrm - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> -#include <drm_fourcc.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_LINUX_DMA_BUF_EXT -return 0; -#else -#error Requires EGL_LINUX_DMA_BUF_EXT -return 1; -#endif - /* END TEST: */ - return 0; -} -") - -# vulkan-server-buffer -qt_config_compile_test(vulkan_server_buffer - LABEL "Vulkan Buffer Sharing" - CODE -"#define VK_USE_PLATFORM_WAYLAND_KHR 1 -#include <vulkan/vulkan.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -VkExportMemoryAllocateInfoKHR exportAllocInfo = {}; -exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR; -exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR; -return 0; - /* END TEST: */ - return 0; -} -") - -# egl_1_5-wayland -qt_config_compile_test(egl_1_5_wayland - LABEL "EGL 1.5 with Wayland Platform" - LIBRARIES - EGL::EGL - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> -#include <wayland-client.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr); - /* END TEST: */ - return 0; -} -") - - #### Features -qt_feature("wayland-client" PRIVATE - LABEL "Qt Wayland Client" - CONDITION NOT WIN32 AND Wayland_FOUND AND Wayland_FOUND AND WaylandScanner_FOUND -) -qt_feature("wayland-datadevice" PRIVATE - CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard -) qt_feature("wayland-client-primary-selection" PRIVATE LABEL "primary-selection clipboard" CONDITION QT_FEATURE_clipboard @@ -186,53 +34,6 @@ qt_feature("egl-extension-platform-wayland" PRIVATE LABEL "EGL wayland platform extension" CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_egl_1_5_wayland ) -qt_feature("wayland-egl" PRIVATE - LABEL "EGL" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND Wayland_FOUND AND ( NOT QNX OR QT_FEATURE_egl_extension_platform_wayland ) -) -qt_feature("wayland-brcm" PRIVATE - LABEL "Raspberry Pi" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_eglfs_brcm -) -qt_feature("xcomposite-egl" PRIVATE - LABEL "XComposite EGL" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND QT_FEATURE_xlib AND XComposite_FOUND AND QT_FEATURE_egl_x11 -) -qt_feature("xcomposite-glx" PRIVATE - LABEL "XComposite GLX" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 AND QT_FEATURE_xlib AND XComposite_FOUND -) -qt_feature("wayland-drm-egl-server-buffer" PRIVATE - LABEL "DRM EGL" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_drm_egl_server AND ( NOT QNX OR QT_FEATURE_egl_extension_platform_wayland ) -) -qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE - LABEL "libhybris EGL" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_libhybris_egl_server -) -qt_feature("wayland-dmabuf-server-buffer" PRIVATE - LABEL "Linux dma-buf server buffer integration" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer -) -qt_feature("wayland-vulkan-server-buffer" PRIVATE - LABEL "Vulkan-based server buffer integration" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_vulkan AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer -) -qt_feature("wayland-shm-emulation-server-buffer" PRIVATE - LABEL "Shm emulation server buffer integration" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl -) -qt_configure_add_summary_section(NAME "Qt Wayland Drivers") -qt_configure_add_summary_entry(ARGS "wayland-egl") -qt_configure_add_summary_entry(ARGS "wayland-brcm") -qt_configure_add_summary_entry(ARGS "xcomposite-egl") -qt_configure_add_summary_entry(ARGS "xcomposite-glx") -qt_configure_add_summary_entry(ARGS "wayland-drm-egl-server-buffer") -qt_configure_add_summary_entry(ARGS "wayland-libhybris-egl-server-buffer") -qt_configure_add_summary_entry(ARGS "wayland-dmabuf-server-buffer") -qt_configure_add_summary_entry(ARGS "wayland-vulkan-server-buffer") -qt_configure_add_summary_entry(ARGS "wayland-shm-emulation-server-buffer") -qt_configure_end_summary_section() # end of "Qt Wayland Drivers" section qt_configure_add_summary_section(NAME "Qt Wayland Client Shell Integrations") qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell") qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell-v5") @@ -240,4 +41,3 @@ qt_configure_add_summary_entry(ARGS "wayland-client-xdg-shell-v6") qt_configure_add_summary_entry(ARGS "wayland-client-ivi-shell") qt_configure_add_summary_entry(ARGS "wayland-client-wl-shell") qt_configure_end_summary_section() # end of "Qt Wayland Client Shell Integrations" section -qt_configure_add_summary_entry(ARGS "wayland-client") diff --git a/src/client/qtwaylandclientglobal_p.h b/src/client/qtwaylandclientglobal_p.h index f2106d0b..1a0840b6 100644 --- a/src/client/qtwaylandclientglobal_p.h +++ b/src/client/qtwaylandclientglobal_p.h @@ -51,9 +51,9 @@ // We mean it. // +#include <QtWaylandGlobal/private/qtwaylandglobal-config_p.h> #include <QtWaylandClient/qtwaylandclientglobal.h> #include <QtGui/private/qtguiglobal_p.h> #include <QtWaylandClient/private/qtwaylandclient-config_p.h> #endif //QWAYLANDCLIENTGLOBAL_P_H - diff --git a/src/compositor/CMakeLists.txt b/src/compositor/CMakeLists.txt index e956c3b6..7bc1d070 100644 --- a/src/compositor/CMakeLists.txt +++ b/src/compositor/CMakeLists.txt @@ -60,6 +60,7 @@ qt_internal_add_module(WaylandCompositor LIBRARIES Qt::CorePrivate Qt::GuiPrivate + Qt::WaylandGlobalPrivate PUBLIC_LIBRARIES Qt::Core Qt::Gui @@ -67,6 +68,7 @@ qt_internal_add_module(WaylandCompositor PRIVATE_MODULE_INTERFACE Qt::CorePrivate Qt::GuiPrivate + Qt::WaylandGlobalPrivate ) # Resources: diff --git a/src/compositor/configure.cmake b/src/compositor/configure.cmake index 9c5864e3..3f33ed38 100644 --- a/src/compositor/configure.cmake +++ b/src/compositor/configure.cmake @@ -1,5 +1,3 @@ - - #### Inputs @@ -7,106 +5,13 @@ #### Libraries if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) - qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server MODULE_NAME waylandcompositor QMAKE_LIB wayland-server) -endif() -if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) - qt_find_package(Wayland PROVIDED_TARGETS Wayland::Egl MODULE_NAME waylandcompositor QMAKE_LIB wayland-egl) -endif() -if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS) qt_find_package(Waylandkms PROVIDED_TARGETS PkgConfig::Waylandkms MODULE_NAME waylandcompositor QMAKE_LIB wayland-kms) endif() -qt_find_package(XComposite PROVIDED_TARGETS PkgConfig::XComposite MODULE_NAME waylandcompositor QMAKE_LIB xcomposite) # special case begin -# X11 is not a public dependency of QtGui anymore, so we need to find it manually in a shared build. -# In a static build the dependency is still propagated, so check for the target existence to prevent -# the 'Attempt to promote imported target "X11::X11" to global scope' issue. -if(NOT TARGET X11::X11) - qt_find_package(X11 PROVIDED_TARGETS X11::X11 MODULE_NAME gui QMAKE_LIB xlib) -endif() -# Same for XKB. -if(NOT TARGET XKB::XKB) - qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL) -endif() #### Tests -# drm-egl-server -qt_config_compile_test(drm_egl_server - LIBRARIES - EGL::EGL - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_MESA_drm_image -return 0; -#else -#error Requires EGL_MESA_drm_image to be defined -return 1; -#endif - /* END TEST: */ - return 0; -} -") - -# libhybris-egl-server -qt_config_compile_test(libhybris_egl_server - LIBRARIES - EGL::EGL - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> -#include <hybris/eglplatformcommon/hybris_nativebufferext.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_HYBRIS_native_buffer -return 0; -#else -#error Requires EGL_HYBRIS_native_buffer to be defined -return 1; -#endif - /* END TEST: */ - return 0; -} -") - -# dmabuf-server-buffer -qt_config_compile_test(dmabuf_server_buffer - LABEL "Linux dma-buf Buffer Sharing" - LIBRARIES - EGL::EGL - Libdrm::Libdrm - CODE -" -#include <EGL/egl.h> -#include <EGL/eglext.h> -#include <drm_fourcc.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -#ifdef EGL_LINUX_DMA_BUF_EXT -return 0; -#else -#error Requires EGL_LINUX_DMA_BUF_EXT -return 1; -#endif - /* END TEST: */ - return 0; -} -") - # dmabuf-client-buffer qt_config_compile_test(dmabuf_client_buffer LABEL "Linux Client dma-buf Buffer Sharing" @@ -138,77 +43,13 @@ return 0; } ") -# vulkan-server-buffer -qt_config_compile_test(vulkan_server_buffer - LABEL "Vulkan Buffer Sharing" - CODE -"#define VK_USE_PLATFORM_WAYLAND_KHR 1 -#include <vulkan/vulkan.h> - -int main(int argc, char **argv) -{ - (void)argc; (void)argv; - /* BEGIN TEST: */ -VkExportMemoryAllocateInfoKHR exportAllocInfo = {}; -exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR; -exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR; -return 0; - /* END TEST: */ - return 0; -} -") - - #### Features -qt_feature("wayland-server" PRIVATE - LABEL "Qt Wayland Compositor" - CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND -) -qt_feature("wayland-datadevice" PRIVATE - CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard -) -qt_feature("wayland-egl" PRIVATE - LABEL "EGL" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND Wayland_FOUND -) -qt_feature("wayland-brcm" PRIVATE - LABEL "Raspberry Pi" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_eglfs_brcm -) -qt_feature("xcomposite-egl" PRIVATE - LABEL "XComposite EGL" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_egl AND QT_FEATURE_opengl AND XComposite_FOUND -) -qt_feature("xcomposite-glx" PRIVATE - LABEL "XComposite EGL" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 AND QT_FEATURE_xlib AND XComposite_FOUND -) -qt_feature("wayland-drm-egl-server-buffer" PRIVATE - LABEL "DRM EGL" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_drm_egl_server -) -qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE - LABEL "libhybris EGL" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_libhybris_egl_server -) -qt_feature("wayland-dmabuf-server-buffer" PRIVATE - LABEL "Linux dma-buf server buffer integration" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer -) qt_feature("wayland-dmabuf-client-buffer" PRIVATE LABEL "Linux dma-buf client buffer integration" CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_dmabuf_client_buffer ) -qt_feature("wayland-vulkan-server-buffer" PRIVATE - LABEL "Vulkan-based server buffer integration" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_vulkan AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer -) -qt_feature("wayland-shm-emulation-server-buffer" PRIVATE - LABEL "Shm emulation server buffer" - CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_opengl -) qt_feature("wayland-layer-integration-vsp2" PRIVATE LABEL "VSP2 hardware layer integration" CONDITION QT_FEATURE_wayland_server AND QT_FEATURE_eglfs_vsp2 AND Waylandkms_FOUND @@ -218,7 +59,6 @@ qt_feature("wayland-compositor-quick" PUBLIC PURPOSE "Allows QtWayland compositor types to be used with QtQuick" CONDITION QT_FEATURE_wayland_server AND TARGET Qt::Quick ) -qt_configure_add_summary_entry(ARGS "wayland-server") qt_configure_add_summary_section(NAME "Qt Wayland Compositor Layer Plugins") qt_configure_add_summary_entry(ARGS "wayland-layer-integration-vsp2") qt_configure_end_summary_section() # end of "Qt Wayland Compositor Layer Plugins" section diff --git a/src/compositor/global/qtwaylandcompositorglobal_p.h b/src/compositor/global/qtwaylandcompositorglobal_p.h index 11a4a3d7..102e738e 100644 --- a/src/compositor/global/qtwaylandcompositorglobal_p.h +++ b/src/compositor/global/qtwaylandcompositorglobal_p.h @@ -41,6 +41,7 @@ // We mean it. // +#include <QtWaylandGlobal/private/qtwaylandglobal-config_p.h> #include <QtWaylandCompositor/qtwaylandcompositorglobal.h> #include <QtGui/private/qtguiglobal_p.h> #include <QtWaylandCompositor/private/qtwaylandcompositor-config_p.h> diff --git a/src/configure.cmake b/src/configure.cmake new file mode 100644 index 00000000..6939fbe9 --- /dev/null +++ b/src/configure.cmake @@ -0,0 +1,249 @@ +# configure.cmake for the QtWaylandGlobalPrivate module + +#### Inputs + + + +#### Libraries + +if(LINUX OR QT_FIND_ALL_PACKAGES_ALWAYS) + # waylandclient libraries + qt_find_package(Wayland + PROVIDED_TARGETS Wayland::Client + MODULE_NAME waylandclient + QMAKE_LIB wayland-client) + qt_find_package(Wayland + PROVIDED_TARGETS Wayland::Cursor + MODULE_NAME waylandclient + QMAKE_LIB wayland-cursor) + qt_add_qmake_lib_dependency(wayland-cursor wayland-client) + qt_find_package(Wayland + PROVIDED_TARGETS Wayland::Egl + MODULE_NAME waylandclient + QMAKE_LIB wayland-egl) + qt_find_package(XComposite + PROVIDED_TARGETS PkgConfig::XComposite + MODULE_NAME waylandclient QMAKE_LIB xcomposite) + + # waylandcompositor libraries + qt_find_package(Wayland + PROVIDED_TARGETS Wayland::Server + MODULE_NAME waylandcompositor + QMAKE_LIB wayland-server) + qt_find_package(Wayland + PROVIDED_TARGETS Wayland::Egl + MODULE_NAME waylandcompositor + QMAKE_LIB wayland-egl) + qt_find_package(XComposite + PROVIDED_TARGETS PkgConfig::XComposite + MODULE_NAME waylandcompositor QMAKE_LIB xcomposite) + + # X11 is not a public dependency of QtGui anymore, so we need to find it manually in a shared build. + # In a static build the dependency is still propagated, so check for the target existence to prevent + # the 'Attempt to promote imported target "X11::X11" to global scope' issue. + if(NOT TARGET X11::X11) + qt_find_package(X11 PROVIDED_TARGETS X11::X11 MODULE_NAME gui QMAKE_LIB xlib) + endif() + # Same for XKB. + if(NOT TARGET XKB::XKB) + qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL) + endif() +endif() + + +#### Tests + +# drm-egl-server +qt_config_compile_test(drm_egl_server + LABEL "DRM EGL Server" + LIBRARIES + EGL::EGL + CODE + " +#include <EGL/egl.h> +#include <EGL/eglext.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +#ifdef EGL_MESA_drm_image +return 0; +#else +#error Requires EGL_MESA_drm_image to be defined +return 1; +#endif + /* END TEST: */ + return 0; +} +") + +# libhybris-egl-server +qt_config_compile_test(libhybris_egl_server + LABEL "libhybris EGL Server" + LIBRARIES + EGL::EGL + CODE + " +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <hybris/eglplatformcommon/hybris_nativebufferext.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +#ifdef EGL_HYBRIS_native_buffer +return 0; +#else +#error Requires EGL_HYBRIS_native_buffer to be defined +return 1; +#endif + /* END TEST: */ + return 0; +} +") + +# dmabuf-server-buffer +qt_config_compile_test(dmabuf_server_buffer + LABEL "Linux dma-buf Buffer Sharing" + LIBRARIES + EGL::EGL + Libdrm::Libdrm + CODE + " +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <drm_fourcc.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +#ifdef EGL_LINUX_DMA_BUF_EXT +return 0; +#else +#error Requires EGL_LINUX_DMA_BUF_EXT +return 1; +#endif + /* END TEST: */ + return 0; +} +") + +# vulkan-server-buffer +qt_config_compile_test(vulkan_server_buffer + LABEL "Vulkan Buffer Sharing" + CODE + "#define VK_USE_PLATFORM_WAYLAND_KHR 1 +#include <vulkan/vulkan.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +VkExportMemoryAllocateInfoKHR exportAllocInfo = {}; +exportAllocInfo.sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR; +exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR; +return 0; + /* END TEST: */ + return 0; +} +") + +# egl_1_5-wayland +qt_config_compile_test(egl_1_5_wayland + LABEL "EGL 1.5 with Wayland Platform" + LIBRARIES + EGL::EGL + CODE + " +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <wayland-client.h> + +int main(int argc, char **argv) +{ + (void)argc; (void)argv; + /* BEGIN TEST: */ +eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr); + /* END TEST: */ + return 0; +} +") + + +#### Features + +qt_feature("wayland-client" PRIVATE + LABEL "Qt Wayland Client" + CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND +) +qt_feature("wayland-server" PRIVATE + LABEL "Qt Wayland Compositor" + CONDITION NOT WIN32 AND Wayland_FOUND AND WaylandScanner_FOUND +) +qt_feature("wayland-egl" PRIVATE + LABEL "EGL" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) + AND QT_FEATURE_opengl AND QT_FEATURE_egl + AND (NOT QNX OR QT_FEATURE_egl_extension_platform_wayland) +) +qt_feature("wayland-brcm" PRIVATE + LABEL "Raspberry Pi" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_eglfs_brcm +) +qt_feature("wayland-drm-egl-server-buffer" PRIVATE + LABEL "DRM EGL" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl + AND QT_FEATURE_egl AND TEST_drm_egl_server + AND (NOT QNX OR QT_FEATURE_egl_extension_platform_wayland) +) +qt_feature("wayland-libhybris-egl-server-buffer" PRIVATE + LABEL "libhybris EGL" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl + AND QT_FEATURE_egl AND TEST_libhybris_egl_server +) +qt_feature("wayland-dmabuf-server-buffer" PRIVATE + LABEL "Linux dma-buf server buffer integration" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl + AND QT_FEATURE_egl AND TEST_dmabuf_server_buffer +) +qt_feature("wayland-shm-emulation-server-buffer" PRIVATE + LABEL "Shm emulation server buffer integration" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_opengl +) +qt_feature("wayland-vulkan-server-buffer" PRIVATE + LABEL "Vulkan-based server buffer integration" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) AND QT_FEATURE_vulkan + AND QT_FEATURE_opengl AND QT_FEATURE_egl AND TEST_vulkan_server_buffer +) +qt_feature("wayland-datadevice" PRIVATE + CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard +) +qt_feature("xcomposite-egl" PRIVATE + LABEL "XComposite EGL" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) + AND QT_FEATURE_opengl AND QT_FEATURE_egl AND QT_FEATURE_xlib + AND XComposite_FOUND AND QT_FEATURE_egl_x11 +) +qt_feature("xcomposite-glx" PRIVATE + LABEL "XComposite GLX" + CONDITION (QT_FEATURE_wayland_client OR QT_FEATURE_wayland_server) + AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 + AND QT_FEATURE_xlib AND XComposite_FOUND +) + +qt_configure_add_summary_entry(ARGS "wayland-client") +qt_configure_add_summary_entry(ARGS "wayland-server") +qt_configure_add_summary_section(NAME "Qt Wayland Drivers") +qt_configure_add_summary_entry(ARGS "wayland-egl") +qt_configure_add_summary_entry(ARGS "wayland-brcm") +qt_configure_add_summary_entry(ARGS "wayland-drm-egl-server-buffer") +qt_configure_add_summary_entry(ARGS "wayland-libhybris-egl-server-buffer") +qt_configure_add_summary_entry(ARGS "wayland-dmabuf-server-buffer") +qt_configure_add_summary_entry(ARGS "wayland-shm-emulation-server-buffer") +qt_configure_add_summary_entry(ARGS "wayland-vulkan-server-buffer") +qt_configure_add_summary_entry(ARGS "xcomposite-egl") +qt_configure_add_summary_entry(ARGS "xcomposite-glx") +qt_configure_end_summary_section() # end of "Qt Wayland Drivers" section diff --git a/src/global/README b/src/global/README new file mode 100644 index 00000000..9b045d4d --- /dev/null +++ b/src/global/README @@ -0,0 +1,9 @@ +The WaylandGlobalPrivate module is a module that contains configure +features, shared by the modules of the qtwayland repository. + +The actual definition of this module is in src/CMakeLists.txt, +because we need to have the qt_find_package calls in a directory scope +above src/client and src/compositor. + +This file here mostly exists to make the otherwise empty src/global +directory known to git. diff --git a/sync.profile b/sync.profile index 1a88e443..67026fa7 100644 --- a/sync.profile +++ b/sync.profile @@ -1,4 +1,5 @@ %modules = ( # path to module name map + "QtWaylandGlobal" => "$basedir/src/global", "QtWaylandCompositor" => "$basedir/src/compositor", "QtWaylandClient" => "$basedir/src/client", "QtWaylandEglClientHwIntegration" => "$basedir/src/hardwareintegration/client/wayland-egl", |