cmake: Use FindVulkanHeaders to get vulkan includes
authorMark Lobodzinski <mark@lunarg.com>
Wed, 13 Jun 2018 17:03:46 +0000 (11:03 -0600)
committerMark Lobodzinski <mark@lunarg.com>
Thu, 14 Jun 2018 14:40:40 +0000 (08:40 -0600)
CMakeLists.txt
cmake/FindVulkanHeaders.cmake [new file with mode: 0644]
cube/CMakeLists.txt
icd/CMakeLists.txt
vulkaninfo/CMakeLists.txt
vulkaninfo/macOS/vulkaninfo.cmake

index f2a2981..e525687 100644 (file)
@@ -32,11 +32,13 @@ set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH};${VULKAN_HEADERS_INSTALL_DIR};${VULKA
                        $ENV{VULKAN_HEADERS_INSTALL_DIR};$ENV{VULKAN_LOADER_INSTALL_DIR})
 message(STATUS "Using find_package to locate Vulkan")
 find_package(Vulkan)
+find_package(VulkanHeaders)
 # "Vulkan::Vulkan" on macOS causes the framework to be linked to the app instead of an individual library
 set(LIBVK "Vulkan::Vulkan")
 message(STATUS "Vulkan FOUND = ${Vulkan_FOUND}")
-message(STATUS "Vulkan Include = ${Vulkan_INCLUDE_DIR}")
 message(STATUS "Vulkan Lib = ${Vulkan_LIBRARY}")
+message(STATUS "Vulkan Headers Include = ${VulkanHeaders_INCLUDE_DIR}")
+message(STATUS "Vulkan Headers Registry = ${VulkanRegistry_DIR}")
 
 # Install-related settings
 include(GNUInstallDirs)
diff --git a/cmake/FindVulkanHeaders.cmake b/cmake/FindVulkanHeaders.cmake
new file mode 100644 (file)
index 0000000..a1458fd
--- /dev/null
@@ -0,0 +1,69 @@
+#.rst:
+# FindVulkanHeaders
+# -----------------
+#
+# Try to find Vulkan Headers and Registry.
+#
+# This module is intended to be used by projects that build Vulkan
+# "system" components such as the loader and layers.
+# Vulkan applications should instead use the FindVulkan (or similar)
+# find module that locates the headers and the loader library.
+#
+# When using this find module to locate the headers and registry
+# in a Vulkan-Headers repository, the Vulkan-Headers repository
+# should be built with 'install' target and the following environment
+# or CMake variable set to the location of the install directory.
+#
+#    VULKAN_HEADERS_INSTALL_DIR
+#
+# IMPORTED Targets
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines no IMPORTED targets
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines the following variables::
+#
+#   VulkanHeaders_FOUND          - True if VulkanHeaders was found
+#   VulkanHeaders_INCLUDE_DIRS   - include directories for VulkanHeaders
+#
+#   VulkanRegistry_FOUND         - True if VulkanRegistry was found
+#   VulkanRegistry_DIRS          - directories for VulkanRegistry
+#
+# The module will also define two cache variables::
+#
+#   VulkanHeaders_INCLUDE_DIR    - the VulkanHeaders include directory
+#   VulkanRegistry_DIR           - the VulkanRegistry directory
+#
+
+# Use HINTS instead of PATH to search these locations before
+# searching system environment variables like $PATH that may
+# contain SDK directories.
+find_path(VulkanHeaders_INCLUDE_DIR
+    NAMES vulkan/vulkan.h
+    HINTS
+        ${VULKAN_HEADERS_INSTALL_DIR}/include
+        "$ENV{VULKAN_HEADERS_INSTALL_DIR}/include"
+        "$ENV{VULKAN_SDK}/include")
+
+if(VulkanHeaders_INCLUDE_DIR)
+   get_filename_component(VULKAN_REGISTRY_PATH_HINT ${VulkanHeaders_INCLUDE_DIR} DIRECTORY)
+   find_path(VulkanRegistry_DIR
+       NAMES vk.xml
+       HINTS "${VULKAN_REGISTRY_PATH_HINT}/share/vulkan/registry")
+endif()
+
+set(VulkanHeaders_INCLUDE_DIRS ${VulkanHeaders_INCLUDE_DIR})
+set(VulkanRegistry_DIRS ${VulkanRegistry_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(VulkanHeaders
+    DEFAULT_MSG
+    VulkanHeaders_INCLUDE_DIR)
+find_package_handle_standard_args(VulkanRegistry
+    DEFAULT_MSG
+    VulkanRegistry_DIR)
+
+mark_as_advanced(VulkanHeaders_INCLUDE_DIR VulkanRegistry_DIR)
index a2c3aba..5574a8b 100644 (file)
@@ -1,7 +1,7 @@
 set(CUBE_INCLUDE_DIRS
     ${CMAKE_CURRENT_BINARY_DIR}
     ${CMAKE_CURRENT_BINARY_DIR}/..
-    ${Vulkan_INCLUDE_DIR}
+    ${VulkanHeaders_INCLUDE_DIR}
 )
 
 find_package(PythonInterp 3 REQUIRED)
index a98b5cb..3c4d17a 100644 (file)
@@ -160,7 +160,7 @@ endif()
 
 include_directories(
     ${CMAKE_CURRENT_SOURCE_DIR}
-    ${Vulkan_INCLUDE_DIR}
+    ${VulkanHeaders_INCLUDE_DIR}
     ${CMAKE_CURRENT_BINARY_DIR}
     ${PROJECT_BINARY_DIR}
     ${CMAKE_BINARY_DIR}
index 0b39992..6f0af14 100644 (file)
@@ -24,7 +24,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
     if (BUILD_WSI_XLIB_SUPPORT)
         find_package(X11 REQUIRED)
     endif()
-    
+
     if (VULKANINFO_WSI_SELECTION STREQUAL "XCB")
         if (NOT BUILD_WSI_XCB_SUPPORT)
             message( FATAL_ERROR "Selected XCB for vulkaninfo build but not building Xcb support" )
@@ -45,7 +45,7 @@ endif()
 if(APPLE)
     # We do this so vulkaninfo is linked to an individual library and NOT a framework.
     target_link_libraries(vulkaninfo ${Vulkan_LIBRARY} "-framework AppKit -framework QuartzCore")
-    target_include_directories(vulkaninfo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${Vulkan_INCLUDE_DIR})
+    target_include_directories(vulkaninfo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${VulkanHeaders_INCLUDE_DIR})
 else()
     target_link_libraries(vulkaninfo ${LIBVK})
 endif()
index cea7711..7ed812e 100644 (file)
@@ -18,7 +18,7 @@ set_target_properties(vulkaninfo-bundle PROPERTIES
 )
 # We do this so vulkaninfo is linked to an individual library and NOT a framework.
 target_link_libraries(vulkaninfo-bundle ${Vulkan_LIBRARY} "-framework AppKit -framework QuartzCore")
-target_include_directories(vulkaninfo-bundle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${Vulkan_INCLUDE_DIR})
+target_include_directories(vulkaninfo-bundle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${VulkanHeaders_INCLUDE_DIR})
 add_dependencies(vulkaninfo-bundle MoltenVK_icd-staging-json)
 set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.sh PROPERTIES
     MACOSX_PACKAGE_LOCATION "MacOS"