From c4839afe758d3c8fb5c46792398509b4fee0a28a Mon Sep 17 00:00:00 2001 From: Juan Ramos Date: Thu, 10 Nov 2022 14:55:46 -0700 Subject: [PATCH] cmake: Use new VulkanHeaders cmake support --- CMakeLists.txt | 5 +- cmake/FindVulkanHeaders.cmake | 90 ------------------------------- cube/CMakeLists.txt | 2 +- icd/CMakeLists.txt | 4 +- vulkaninfo/CMakeLists.txt | 6 +-- vulkaninfo/macOS/vulkaninfo.cmake | 4 +- 6 files changed, 11 insertions(+), 100 deletions(-) delete mode 100644 cmake/FindVulkanHeaders.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 27acca862..e4ec4edd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,13 +85,11 @@ if(APPLE) endif() message(STATUS "Using find_package to locate Vulkan") find_package(Vulkan) -find_package(VulkanHeaders) +find_package(VulkanHeaders REQUIRED CONFIG) get_filename_component(Vulkan_LIBRARY_DIR ${Vulkan_LIBRARY} DIRECTORY) message(STATUS "Vulkan FOUND = ${Vulkan_FOUND}") message(STATUS "Vulkan Lib Dir = ${Vulkan_LIBRARY_DIR}") message(STATUS "Vulkan Lib = ${Vulkan_LIBRARY}") -message(STATUS "Vulkan Headers Include = ${VulkanHeaders_INCLUDE_DIR}") -message(STATUS "Vulkan Headers Registry = ${VulkanRegistry_DIR}") include(GNUInstallDirs) @@ -160,6 +158,7 @@ endif() # Optional codegen target if(PYTHONINTERP_FOUND) + get_target_property(VulkanRegistry_DIR Vulkan::Registry INTERFACE_INCLUDE_DIRECTORIES) add_custom_target(VulkanTools_generated_source COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/generate_source.py ${VulkanRegistry_DIR} --incremental diff --git a/cmake/FindVulkanHeaders.cmake b/cmake/FindVulkanHeaders.cmake deleted file mode 100644 index 6779beec2..000000000 --- a/cmake/FindVulkanHeaders.cmake +++ /dev/null @@ -1,90 +0,0 @@ -#.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 -# - -# Probe command-line arguments and the environment to see if they specify the -# Vulkan headers installation path. -if(NOT DEFINED VULKAN_HEADERS_INSTALL_DIR) - if (DEFINED ENV{VULKAN_HEADERS_INSTALL_DIR}) - set(VULKAN_HEADERS_INSTALL_DIR "$ENV{VULKAN_HEADERS_INSTALL_DIR}") - elseif(DEFINED ENV{VULKAN_SDK}) - set(VULKAN_HEADERS_INSTALL_DIR "$ENV{VULKAN_SDK}") - endif() -endif() - -if(DEFINED VULKAN_HEADERS_INSTALL_DIR) - # When CMAKE_FIND_ROOT_PATH_INCLUDE is set to ONLY, the HINTS in find_path() - # are re-rooted, which prevents VULKAN_HEADERS_INSTALL_DIR to work as - # expected. So use NO_CMAKE_FIND_ROOT_PATH to avoid it. - - # 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 - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) - find_path(VulkanRegistry_DIR - NAMES vk.xml - HINTS ${VULKAN_HEADERS_INSTALL_DIR}/share/vulkan/registry - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) -else() - # If VULKAN_HEADERS_INSTALL_DIR, or one of its variants was not specified, - # do a normal search without hints. - find_path(VulkanHeaders_INCLUDE_DIR NAMES vulkan/vulkan.h) - get_filename_component(VULKAN_REGISTRY_PATH_HINT ${VulkanHeaders_INCLUDE_DIR} DIRECTORY) - find_path(VulkanRegistry_DIR NAMES vk.xml HINTS ${VULKAN_REGISTRY_PATH_HINT}) -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) -set(FPHSA_NAME_MISMATCHED TRUE) -find_package_handle_standard_args(VulkanRegistry - DEFAULT_MSG - VulkanRegistry_DIR) -unset(FPHSA_NAME_MISMATCHED) - -mark_as_advanced(VulkanHeaders_INCLUDE_DIR VulkanRegistry_DIR) diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt index 48805b3ee..9db7d5ba4 100644 --- a/cube/CMakeLists.txt +++ b/cube/CMakeLists.txt @@ -15,7 +15,7 @@ # limitations under the License. # ~~~ -set(CUBE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/.. ${VulkanHeaders_INCLUDE_DIR}) +set(CUBE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/..) set(SCRIPTS_DIR "${PROJECT_SOURCE_DIR}/scripts") diff --git a/icd/CMakeLists.txt b/icd/CMakeLists.txt index 5daa9ab8e..ded0baaf8 100644 --- a/icd/CMakeLists.txt +++ b/icd/CMakeLists.txt @@ -110,6 +110,7 @@ if(WIN32) VERBATIM) set_target_properties(copy-${target}-def-file PROPERTIES FOLDER ${TOOLS_HELPER_FOLDER}) add_library(VkICD_${target} SHARED ${ARGN} VkICD_${target}.def) + target_link_libraries(VkICD_${target} PRIVATE Vulkan::Headers) if(INSTALL_ICD) install(TARGETS VkICD_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() @@ -117,6 +118,7 @@ if(WIN32) elseif(APPLE) macro(add_vk_icd target) add_library(VkICD_${target} SHARED ${ARGN}) + target_link_libraries(VkICD_${target} PRIVATE Vulkan::Headers) set_target_properties(VkICD_${target} PROPERTIES LINK_FLAGS "-Wl") if(INSTALL_ICD) install(TARGETS VkICD_${target} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) @@ -125,6 +127,7 @@ elseif(APPLE) else() macro(add_vk_icd target) add_library(VkICD_${target} SHARED ${ARGN}) + target_link_libraries(VkICD_${target} PRIVATE Vulkan::Headers) set_target_properties(VkICD_${target} PROPERTIES LINK_FLAGS "-Wl,-export-dynamic,-Bsymbolic,--exclude-libs,ALL") if((UNIX AND NOT APPLE) AND INSTALL_ICD) # i.e. Linux install(TARGETS VkICD_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -133,7 +136,6 @@ else() endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${VulkanHeaders_INCLUDE_DIR} ${WAYLAND_CLIENT_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_BINARY_DIR} diff --git a/vulkaninfo/CMakeLists.txt b/vulkaninfo/CMakeLists.txt index 47a15a9e1..84eea9568 100644 --- a/vulkaninfo/CMakeLists.txt +++ b/vulkaninfo/CMakeLists.txt @@ -99,11 +99,11 @@ 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 ${VulkanHeaders_INCLUDE_DIR}) -else() - target_include_directories(vulkaninfo PRIVATE ${VulkanHeaders_INCLUDE_DIR}) + target_include_directories(vulkaninfo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo) endif() +target_link_libraries(vulkaninfo Vulkan::Headers) + # Create vulkaninfo application bundle for MacOS if(APPLE) include(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.cmake) diff --git a/vulkaninfo/macOS/vulkaninfo.cmake b/vulkaninfo/macOS/vulkaninfo.cmake index 9614530ec..97830d0eb 100644 --- a/vulkaninfo/macOS/vulkaninfo.cmake +++ b/vulkaninfo/macOS/vulkaninfo.cmake @@ -34,8 +34,8 @@ set_target_properties(vulkaninfo-bundle MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist) # 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} ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${CMAKE_CURRENT_SOURCE_DIR}/generated ${CMAKE_BINARY_DIR}/vulkaninfo ${VulkanHeaders_INCLUDE_DIR}) +target_link_libraries(vulkaninfo-bundle ${Vulkan_LIBRARY} "-framework AppKit -framework QuartzCore" Vulkan::Headers) +target_include_directories(vulkaninfo-bundle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo ${CMAKE_CURRENT_SOURCE_DIR}/generated ${CMAKE_BINARY_DIR}/vulkaninfo) add_dependencies(vulkaninfo-bundle MoltenVK_icd-staging-json) set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/macOS/vulkaninfo.sh PROPERTIES MACOSX_PACKAGE_LOCATION "MacOS")