From: Charles Giessen Date: Sat, 19 Aug 2023 20:08:34 +0000 (-0600) Subject: build: Use Vulkan-Loader on windows X-Git-Tag: upstream/1.3.268~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=944f91b48811d072654d3a0db4f6d704c04fadbd;p=platform%2Fupstream%2FVulkan-Tools.git build: Use Vulkan-Loader on windows Previously, the vulkan-1.lib file was checked into the tree, so that it wasn't a required build step for windows builds. This means that to use functions in new versions of vulkan, the vulkan-1.lib file would have to be updated, which is annoying. This commit makes the necessary changes to allow linking to the vulkan-1.lib built by Vulkan-Loader directly, as well as adding Vulkan-Loader as a dependency for windows builds. It was previously only built for linux & macOS. With the use of the Vulkan-Loader, the FindVulkan.cmake file could be removed, as well as the checked in vulkan-1.lib files, one each for x86 and x64. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6525f51..57d05a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,29 +53,6 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) # "Helper" targets that don't have interesting source code should set their FOLDER property to this set(TOOLS_HELPER_FOLDER "Helper Targets") -# ~~~ -# Find Vulkan Headers and Loader -# Search order: -# User-supplied CMAKE_PREFIX_PATH containing paths to the header and/or loader install dirs -# CMake options VULKAN_HEADERS_INSTALL_DIR and/or VULKAN_LOADER_INSTALL_DIR -# Env vars VULKAN_HEADERS_INSTALL_DIR and/or VULKAN_LOADER_INSTALL_DIR -# If on MacOS -# CMake option MOTLENVK_REPO_ROOT -# Env vars MOLTENVK_REPO_ROOT -# Fallback to FindVulkan operation using SDK install or system installed components. -# ~~~ -set(VULKAN_HEADERS_INSTALL_DIR "HEADERS-NOTFOUND" CACHE PATH "Absolute path to a Vulkan-Headers install directory") -set(VULKAN_LOADER_INSTALL_DIR "LOADER-NOTFOUND" CACHE PATH "Absolute path to a Vulkan-Loader install directory") -if(WIN32 AND "${VULKAN_LOADER_INSTALL_DIR}" STREQUAL "LOADER-NOTFOUND") - if(CMAKE_CL_64) - set(VULKAN_LOADER_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/x64") - else() - set(VULKAN_LOADER_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/x86") - endif() -endif() -set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH};${VULKAN_HEADERS_INSTALL_DIR};${VULKAN_LOADER_INSTALL_DIR}; - $ENV{VULKAN_HEADERS_INSTALL_DIR};$ENV{VULKAN_LOADER_INSTALL_DIR}) - if(APPLE) set(MOLTENVK_REPO_ROOT "MOLTENVK-NOTFOUND" CACHE PATH "Absolute path to a MoltenVK repo directory") if(NOT MOLTENVK_REPO_ROOT AND NOT DEFINED ENV{MOLTENVK_REPO_ROOT}) @@ -87,13 +64,15 @@ if(APPLE) endif() message(STATUS "Using MoltenVK repo location at ${MOLTENVK_REPO_ROOT}") endif() -message(STATUS "Using find_package to locate Vulkan") -find_package(Vulkan) + 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}") + +# Find and create the Vulkan::Vulkan library +find_library(Vulkan_LIBRARY NAMES vulkan vulkan-1) +add_library(Vulkan::Vulkan UNKNOWN IMPORTED) +set_target_properties(Vulkan::Vulkan PROPERTIES + IMPORTED_LOCATION ${Vulkan_LIBRARY}) +target_link_libraries(Vulkan::Vulkan INTERFACE Vulkan::Headers) include(GNUInstallDirs) diff --git a/cmake/FindVulkan.cmake b/cmake/FindVulkan.cmake deleted file mode 100644 index 846708e..0000000 --- a/cmake/FindVulkan.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# FindVulkan -# ---------- -# -# Try to find Vulkan -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``Vulkan::Vulkan``, if -# Vulkan has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables:: -# -# Vulkan_FOUND - True if Vulkan was found -# Vulkan_INCLUDE_DIRS - include directories for Vulkan -# Vulkan_LIBRARIES - link against this library to use Vulkan -# -# The module will also define two cache variables:: -# -# Vulkan_INCLUDE_DIR - the Vulkan include directory -# Vulkan_LIBRARY - the path to the Vulkan library -# - -if(WIN32) - find_path(Vulkan_INCLUDE_DIR - NAMES vulkan/vulkan.h - HINTS - "$ENV{VULKAN_SDK}/Include" - ) - - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - find_library(Vulkan_LIBRARY - NAMES vulkan-1 - HINTS - "$ENV{VULKAN_SDK}/Lib" - "$ENV{VULKAN_SDK}/Bin" - ) - elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) - find_library(Vulkan_LIBRARY - NAMES vulkan-1 - HINTS - "$ENV{VULKAN_SDK}/Lib32" - "$ENV{VULKAN_SDK}/Bin32" - NO_SYSTEM_ENVIRONMENT_PATH - ) - endif() -else() - find_path(Vulkan_INCLUDE_DIR - NAMES vulkan/vulkan.h - HINTS - "$ENV{VULKAN_SDK}/include") - find_library(Vulkan_LIBRARY - NAMES vulkan - HINTS - "$ENV{VULKAN_SDK}/lib") -endif() - -set(Vulkan_LIBRARIES ${Vulkan_LIBRARY}) -set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Vulkan - DEFAULT_MSG - Vulkan_LIBRARY Vulkan_INCLUDE_DIR) - -mark_as_advanced(Vulkan_INCLUDE_DIR Vulkan_LIBRARY) - -if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan) - add_library(Vulkan::Vulkan UNKNOWN IMPORTED) - set_target_properties(Vulkan::Vulkan PROPERTIES - IMPORTED_LOCATION "${Vulkan_LIBRARIES}" - INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}") -endif() diff --git a/external/x64/lib/vulkan-1.lib b/external/x64/lib/vulkan-1.lib deleted file mode 100644 index 3e23a7b..0000000 Binary files a/external/x64/lib/vulkan-1.lib and /dev/null differ diff --git a/external/x86/lib/vulkan-1.lib b/external/x86/lib/vulkan-1.lib deleted file mode 100644 index 3caa7ba..0000000 Binary files a/external/x86/lib/vulkan-1.lib and /dev/null differ diff --git a/scripts/known_good.json b/scripts/known_good.json index adbb34c..52d78d0 100644 --- a/scripts/known_good.json +++ b/scripts/known_good.json @@ -38,10 +38,6 @@ "var_name": "VULKAN_HEADERS_INSTALL_DIR", "repo_name": "Vulkan-Headers" } - ], - "build_platforms": [ - "linux", - "darwin" ] }, { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 481c68d..66d9adc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,6 +15,21 @@ # limitations under the License. # ~~~ +# On Windows, We only need the .lib to build the repo, but to run tests we need the .dll. +# Thus, we have to fixup the Vulkan::Vulkan target to contain the correct details. +if (WIN32) + list(APPEND CMAKE_PROGRAM_PATH ${VULKAN_LOADER_INSTALL_DIR}) + + find_program(Vulkan_LIBRARY_DLL NAMES vulkan-1.dll) + find_library(Vulkan_LIBRARY_IMPLIB NAMES vulkan-1) + + # Change Vulkan::Vulkan's location to vulkan-1.dll and set the IMPLIB to vulkan-1.lib + set_target_properties(Vulkan::Vulkan PROPERTIES + IMPORTED_LOCATION ${Vulkan_LIBRARY_DLL}) + set_target_properties(Vulkan::Vulkan PROPERTIES + IMPORTED_IMPLIB ${Vulkan_LIBRARY_IMPLIB}) +endif() + # setup binary_locations_$.h.in using binary_locations.h.in as a source file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/binary_locations_$.h" INPUT "${CMAKE_CURRENT_SOURCE_DIR}/binary_locations.h.in")