diff options
| author | Charles Giessen <charles@lunarg.com> | 2023-08-19 14:08:34 -0600 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2023-08-21 16:44:30 -0600 |
| commit | 944f91b48811d072654d3a0db4f6d704c04fadbd (patch) | |
| tree | e041cd769d4296f735fb20df58b611cfebb98095 | |
| parent | c3b438e7901e7ee0d56d3ac39d7431091d82df3d (diff) | |
| download | usermoji-944f91b48811d072654d3a0db4f6d704c04fadbd.tar.xz | |
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.
| -rw-r--r-- | CMakeLists.txt | 37 | ||||
| -rw-r--r-- | cmake/FindVulkan.cmake | 80 | ||||
| -rw-r--r-- | external/x64/lib/vulkan-1.lib | bin | 48602 -> 0 bytes | |||
| -rw-r--r-- | external/x86/lib/vulkan-1.lib | bin | 52334 -> 0 bytes | |||
| -rw-r--r-- | scripts/known_good.json | 4 | ||||
| -rw-r--r-- | tests/CMakeLists.txt | 15 |
6 files changed, 23 insertions, 113 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 6525f513..57d05a39 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 846708e1..00000000 --- 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 Binary files differdeleted file mode 100644 index 3e23a7bc..00000000 --- a/external/x64/lib/vulkan-1.lib +++ /dev/null diff --git a/external/x86/lib/vulkan-1.lib b/external/x86/lib/vulkan-1.lib Binary files differdeleted file mode 100644 index 3caa7ba0..00000000 --- a/external/x86/lib/vulkan-1.lib +++ /dev/null diff --git a/scripts/known_good.json b/scripts/known_good.json index adbb34c1..52d78d07 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 481c68dd..66d9adc6 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_$<CONFIG>.h.in using binary_locations.h.in as a source file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/binary_locations_$<CONFIG>.h" INPUT "${CMAKE_CURRENT_SOURCE_DIR}/binary_locations.h.in") |
