summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/FindWrapVulkan.cmake20
-rw-r--r--cmake/FindWrapVulkanHeaders.cmake23
-rw-r--r--src/gui/CMakeLists.txt2
-rw-r--r--src/gui/configure.cmake5
-rw-r--r--src/opengl/CMakeLists.txt2
-rw-r--r--util/cmake/helper.py2
6 files changed, 49 insertions, 5 deletions
diff --git a/cmake/FindWrapVulkan.cmake b/cmake/FindWrapVulkan.cmake
new file mode 100644
index 0000000000..38cf3ea417
--- /dev/null
+++ b/cmake/FindWrapVulkan.cmake
@@ -0,0 +1,20 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapVulkan::WrapVulkan)
+ set(WrapVulkan_FOUND ON)
+ return()
+endif()
+
+set(WrapVulkan_FOUND OFF)
+
+find_package(Vulkan ${WrapVulkan_FIND_VERSION} QUIET)
+
+if(Vulkan_FOUND)
+ set(WrapVulkan_FOUND ON)
+
+ add_library(WrapVulkan::WrapVulkan INTERFACE IMPORTED)
+ target_link_libraries(WrapVulkan::WrapVulkan INTERFACE Vulkan::Vulkan)
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WrapVulkan DEFAULT_MSG Vulkan_LIBRARY Vulkan_INCLUDE_DIR)
diff --git a/cmake/FindWrapVulkanHeaders.cmake b/cmake/FindWrapVulkanHeaders.cmake
new file mode 100644
index 0000000000..a079e07300
--- /dev/null
+++ b/cmake/FindWrapVulkanHeaders.cmake
@@ -0,0 +1,23 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapVulkanHeaders::WrapVulkanHeaders)
+ set(WrapVulkanHeaders_FOUND ON)
+ return()
+endif()
+
+set(WrapVulkanHeaders_FOUND OFF)
+
+find_package(Vulkan ${WrapVulkanHeaders_FIND_VERSION} QUIET)
+
+# We are interested only in include headers. The libraries might be missing, so we can't check the
+# _FOUND variable.
+if(Vulkan_INCLUDE_DIR)
+ set(WrapVulkanHeaders_FOUND ON)
+
+ add_library(WrapVulkanHeaders::WrapVulkanHeaders INTERFACE IMPORTED)
+ target_include_directories(WrapVulkanHeaders::WrapVulkanHeaders INTERFACE
+ ${Vulkan_INCLUDE_DIR})
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WrapVulkanHeaders DEFAULT_MSG Vulkan_INCLUDE_DIR)
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 5fe4d59d10..6efb2c3ff6 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -869,7 +869,7 @@ qt_internal_extend_target(Gui CONDITION QT_FEATURE_vulkan
vulkan/qvulkaninstance.cpp vulkan/qvulkaninstance.h
vulkan/qvulkanwindow.cpp vulkan/qvulkanwindow.h vulkan/qvulkanwindow_p.h
PUBLIC_LIBRARIES
- Vulkan::Vulkan_nolink
+ WrapVulkanHeaders::WrapVulkanHeaders
)
#### Keys ignored in scope 111:.:vulkan:vulkan/vulkan.pri:QT_FEATURE_vkgen:
diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake
index 20c5b9624b..67fc7fd25d 100644
--- a/src/gui/configure.cmake
+++ b/src/gui/configure.cmake
@@ -50,7 +50,7 @@ qt_find_package(Mtdev PROVIDED_TARGETS PkgConfig::Mtdev MODULE_NAME gui QMAKE_LI
qt_find_package(WrapOpenGL PROVIDED_TARGETS WrapOpenGL::WrapOpenGL MODULE_NAME gui QMAKE_LIB opengl)
qt_find_package(GLESv2 PROVIDED_TARGETS GLESv2::GLESv2 MODULE_NAME gui QMAKE_LIB opengl_es2)
qt_find_package(Tslib PROVIDED_TARGETS PkgConfig::Tslib MODULE_NAME gui QMAKE_LIB tslib)
-qt_find_package(Vulkan PROVIDED_TARGETS Vulkan::Vulkan MODULE_NAME gui QMAKE_LIB vulkan MARK_OPTIONAL) # special case
+qt_find_package(WrapVulkanHeaders PROVIDED_TARGETS WrapVulkanHeaders::WrapVulkanHeaders MODULE_NAME gui QMAKE_LIB vulkan MARK_OPTIONAL) # special case
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server MODULE_NAME gui QMAKE_LIB wayland_server)
endif()
@@ -751,7 +751,8 @@ qt_feature("vkgen" PRIVATE
)
qt_feature("vulkan" PUBLIC
LABEL "Vulkan"
- CONDITION QT_FEATURE_library AND QT_FEATURE_vkgen AND Vulkan_FOUND
+ AUTODETECT NOT QNX # FIXME: CI QNX toolchain is broken and finds host vulkan QTQAINFRA-4502
+ CONDITION QT_FEATURE_library AND QT_FEATURE_vkgen AND WrapVulkanHeaders_FOUND
)
qt_feature("vkkhrdisplay" PRIVATE
SECTION "Platform plugins"
diff --git a/src/opengl/CMakeLists.txt b/src/opengl/CMakeLists.txt
index a6e2e56561..5e5b661bc0 100644
--- a/src/opengl/CMakeLists.txt
+++ b/src/opengl/CMakeLists.txt
@@ -90,7 +90,7 @@ qt_internal_extend_target(OpenGL CONDITION QT_FEATURE_vulkan
SOURCES
qvkconvenience.cpp qvkconvenience_p.h
PUBLIC_LIBRARIES
- Vulkan::Vulkan_nolink
+ WrapVulkanHeaders::WrapVulkanHeaders
)
qt_internal_extend_target(OpenGL CONDITION QT_FEATURE_egl
diff --git a/util/cmake/helper.py b/util/cmake/helper.py
index 17725e325a..298e7cbf68 100644
--- a/util/cmake/helper.py
+++ b/util/cmake/helper.py
@@ -500,7 +500,7 @@ _library_map = [
LibraryMapping("tslib", "Tslib", "PkgConfig::Tslib"),
LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"),
LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"), # see also libudev!
- LibraryMapping("vulkan", "Vulkan", "Vulkan::Vulkan"),
+ LibraryMapping("vulkan", "WrapVulkanHeaders", "WrapVulkanHeaders::WrapVulkanHeaders"),
LibraryMapping("wayland_server", "Wayland", "Wayland::Server"), # used in qtbase/src/gui
LibraryMapping("wayland-server", "Wayland", "Wayland::Server"), # used in qtwayland
LibraryMapping("wayland-client", "Wayland", "Wayland::Client"),