summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-05-24 14:10:34 (GMT)
committerKitware Robot <kwrobot@kitware.com>2022-05-24 14:10:46 (GMT)
commitf791cd23d408ff7af104d119898c4dd8e1e87688 (patch)
tree1dd0e97bd5baf3a1f1be66e2f1316ac3b01c9b66
parent60530da6f2d455b9344c9657166b30c9fe5f9ca3 (diff)
parentd9b4264cb848b61975fe7213183356961f0e0759 (diff)
downloadCMake-f791cd23d408ff7af104d119898c4dd8e1e87688.zip
CMake-f791cd23d408ff7af104d119898c4dd8e1e87688.tar.gz
CMake-f791cd23d408ff7af104d119898c4dd8e1e87688.tar.bz2
Merge topic 'findvulkan-moltenvk'
d9b4264cb8 FindVulkan: Add component for `MoltenVK` 10a6bb16bb FindVulkan: Mark test target with `cxx_std_11` to avoid AppleClang warnings Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7286
-rw-r--r--Modules/FindVulkan.cmake87
-rw-r--r--Tests/FindVulkan/Test/CMakeLists.txt23
-rw-r--r--Tests/FindVulkan/Test/main-MoltenVK.cxx16
3 files changed, 122 insertions, 4 deletions
diff --git a/Modules/FindVulkan.cmake b/Modules/FindVulkan.cmake
index 7a32c2f..8b322ed 100644
--- a/Modules/FindVulkan.cmake
+++ b/Modules/FindVulkan.cmake
@@ -17,6 +17,7 @@ Optional COMPONENTS
This module respects several optional COMPONENTS: ``glslc``,
``glslangValidator``, ``glslang``, ``shaderc_combined`` and ``SPIRV-Tools``.
+On macOS, an additional component ``MoltenVK`` is available.
There are corresponding import targets for each of these flags.
IMPORTED Targets
@@ -63,6 +64,12 @@ This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found:
Defined if SDK has the Khronos library to process SPIR-V modules
(SPIRV-Tools).
+``Vulkan::MoltenVK``
+ .. versionadded:: 3.24
+
+ Defined if SDK has the Khronos library which implement a subset of Vulkan API
+ over Apple Metal graphics framework. (MoltenVK).
+
Result Variables
^^^^^^^^^^^^^^^^
@@ -98,6 +105,10 @@ This module defines the following variables:
.. versionadded:: 3.24
True, if the SDK has the SPIRV-Tools library.
+``Vulkan_MoltenVK_FOUND``
+ .. versionadded:: 3.24
+
+ True, if the SDK has the MoltenVK library.
The module will also defines these cache variables:
@@ -121,6 +132,10 @@ The module will also defines these cache variables:
.. versionadded:: 3.24
Path to the SPIRV-Tools library.
+``Vulkan_MoltenVK_LIBRARY``
+ .. versionadded:: 3.24
+
+ Path to the MoltenVK library.
Hints
^^^^^
@@ -181,6 +196,28 @@ else()
"$ENV{VULKAN_SDK}/lib"
)
endif()
+if(APPLE AND DEFINED ENV{VULKAN_SDK})
+ cmake_path(SET _MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK")
+ if(EXISTS "${_MoltenVK_path}")
+ list(APPEND _Vulkan_hint_include_search_paths
+ "${_MoltenVK_path}/include"
+ )
+ if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ list(APPEND _Vulkan_hint_library_search_paths
+ "${_MoltenVK_path}/dylib/iOS"
+ )
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
+ list(APPEND _Vulkan_hint_library_search_paths
+ "${_MoltenVK_path}/dylib/tvOS"
+ )
+ else()
+ list(APPEND _Vulkan_hint_library_search_paths
+ "${_MoltenVK_path}/dylib/macOS"
+ )
+ endif()
+ endif()
+ unset(_MoltenVK_path)
+endif()
find_path(Vulkan_INCLUDE_DIR
NAMES vulkan/vulkan.h
@@ -323,6 +360,20 @@ if(SPIRV-Tools IN_LIST Vulkan_FIND_COMPONENTS)
${_Vulkan_hint_library_search_paths})
mark_as_advanced(Vulkan_SPIRV-Tools_DEBUG_LIBRARY)
endif()
+if(MoltenVK IN_LIST Vulkan_FIND_COMPONENTS)
+ find_library(Vulkan_MoltenVK_LIBRARY
+ NAMES MoltenVK
+ HINTS
+ ${_Vulkan_hint_library_search_paths})
+ mark_as_advanced(Vulkan_MoltenVK_LIBRARY)
+
+ find_path(Vulkan_MoltenVK_INCLUDE_DIR
+ NAMES MoltenVK/mvk_vulkan.h
+ HINTS
+ ${_Vulkan_hint_include_search_paths}
+ )
+ mark_as_advanced(Vulkan_MoltenVK_INCLUDE_DIR)
+endif()
if(Vulkan_GLSLC_EXECUTABLE)
set(Vulkan_glslc_FOUND TRUE)
@@ -387,6 +438,12 @@ _Vulkan_set_library_component_found(glslang
_Vulkan_set_library_component_found(shaderc_combined)
_Vulkan_set_library_component_found(SPIRV-Tools)
+if(Vulkan_MoltenVK_INCLUDE_DIR AND Vulkan_MoltenVK_LIBRARY)
+ set(Vulkan_MoltenVK_FOUND TRUE)
+else()
+ set(Vulkan_MoltenVK_FOUND FALSE)
+endif()
+
set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
@@ -409,6 +466,25 @@ if(Vulkan_INCLUDE_DIR)
endif()
endif()
+if(Vulkan_MoltenVK_FOUND)
+ set(Vulkan_MoltenVK_VERSION "")
+ if(Vulkan_MoltenVK_INCLUDE_DIR)
+ set(VK_MVK_MOLTENVK_H ${Vulkan_MoltenVK_INCLUDE_DIR}/MoltenVK/vk_mvk_moltenvk.h)
+ if(EXISTS ${VK_MVK_MOLTENVK_H})
+ file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MAJOR REGEX "^#define MVK_VERSION_MAJOR ")
+ string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MAJOR "${_Vulkan_MoltenVK_VERSION_MAJOR}")
+ file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MINOR REGEX "^#define MVK_VERSION_MINOR ")
+ string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MINOR "${_Vulkan_MoltenVK_VERSION_MINOR}")
+ file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_PATCH REGEX "^#define MVK_VERSION_PATCH ")
+ string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_PATCH "${_Vulkan_MoltenVK_VERSION_PATCH}")
+ set(Vulkan_MoltenVK_VERSION "${_Vulkan_MoltenVK_VERSION_MAJOR}.${_Vulkan_MoltenVK_VERSION_MINOR}.${_Vulkan_MoltenVK_VERSION_PATCH}")
+ unset(_Vulkan_MoltenVK_VERSION_MAJOR)
+ unset(_Vulkan_MoltenVK_VERSION_MINOR)
+ unset(_Vulkan_MoltenVK_VERSION_PATCH)
+ endif()
+ endif()
+endif()
+
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
find_package_handle_standard_args(Vulkan
REQUIRED_VARS
@@ -649,6 +725,17 @@ if(Vulkan_FOUND)
endif()
endif()
+if(Vulkan_MoltenVK_FOUND)
+ if(Vulkan_MoltenVK_LIBRARY AND NOT TARGET Vulkan::MoltenVK)
+ add_library(Vulkan::MoltenVK SHARED IMPORTED)
+ set_target_properties(Vulkan::MoltenVK
+ PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_MoltenVK_INCLUDE_DIR}"
+ IMPORTED_LOCATION "${Vulkan_MoltenVK_LIBRARY}"
+ )
+ endif()
+endif()
+
unset(_Vulkan_library_name)
unset(_Vulkan_hint_include_search_paths)
unset(_Vulkan_hint_executable_search_paths)
diff --git a/Tests/FindVulkan/Test/CMakeLists.txt b/Tests/FindVulkan/Test/CMakeLists.txt
index a492daa..42543ac 100644
--- a/Tests/FindVulkan/Test/CMakeLists.txt
+++ b/Tests/FindVulkan/Test/CMakeLists.txt
@@ -3,28 +3,37 @@ cmake_policy(SET CMP0091 NEW)
project(TestFindVulkan C CXX)
include(CTest)
+set(components
+ glslang
+ shaderc_combined
+ SPIRV-Tools
+)
+if(APPLE)
+ list(APPEND components MoltenVK)
+endif()
find_package(Vulkan REQUIRED
- COMPONENTS
- glslang
- shaderc_combined
- SPIRV-Tools)
+ COMPONENTS ${components})
add_executable(test_tgt main.c)
target_link_libraries(test_tgt Vulkan::Vulkan)
+target_compile_features(test_tgt PRIVATE cxx_std_11)
add_test(NAME test_tgt COMMAND test_tgt)
add_executable(test_var main.c)
target_include_directories(test_var PRIVATE ${Vulkan_INCLUDE_DIRS})
target_link_libraries(test_var PRIVATE ${Vulkan_LIBRARIES})
+target_compile_features(test_var PRIVATE cxx_std_11)
add_test(NAME test_var COMMAND test_var)
add_executable(test_tgt_dl main-dynamicVulkanLoading.cpp)
target_link_libraries(test_tgt_dl Vulkan::Headers ${CMAKE_DL_LIBS})
+target_compile_features(test_tgt_dl PRIVATE cxx_std_11)
add_test(NAME test_tgt_dl COMMAND test_tgt_dl)
add_executable(test_var_dl main-dynamicVulkanLoading.cpp)
target_include_directories(test_var_dl PRIVATE ${Vulkan_INCLUDE_DIRS})
target_link_libraries(test_var_dl ${CMAKE_DL_LIBS})
+target_compile_features(test_var_dl PRIVATE cxx_std_11)
add_test(NAME test_var_dl COMMAND test_var_dl)
add_executable(test_tgt_glslang main-glslang.cxx)
@@ -60,6 +69,12 @@ if(NOT SPIRV-Tools_debug_location)
MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
endif()
+if(APPLE)
+ add_executable(test_tgt_MoltenVK main-MoltenVK.cxx)
+ target_link_libraries(test_tgt_MoltenVK Vulkan::MoltenVK)
+ add_test(NAME test_tgt_MoltenVK COMMAND test_tgt_MoltenVK)
+endif()
+
if(Vulkan_GLSLC_EXECUTABLE)
add_test(NAME test_glslc
COMMAND ${CMAKE_COMMAND}
diff --git a/Tests/FindVulkan/Test/main-MoltenVK.cxx b/Tests/FindVulkan/Test/main-MoltenVK.cxx
new file mode 100644
index 0000000..3156979
--- /dev/null
+++ b/Tests/FindVulkan/Test/main-MoltenVK.cxx
@@ -0,0 +1,16 @@
+#include <iostream>
+
+#include <MoltenVK/vk_mvk_moltenvk.h>
+
+int main()
+{
+ char mvk_version[256];
+ char vk_version[256];
+ vkGetVersionStringsMVK(mvk_version, sizeof(mvk_version), vk_version,
+ sizeof(vk_version));
+
+ std::cout << "MoltenVK version: " << mvk_version << std::endl;
+ std::cout << "Vulkan version: " << vk_version << std::endl;
+
+ return 0;
+}