aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Giessen <charles@lunarg.com>2023-08-19 14:08:34 -0600
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>2023-08-21 16:44:30 -0600
commit944f91b48811d072654d3a0db4f6d704c04fadbd (patch)
treee041cd769d4296f735fb20df58b611cfebb98095
parentc3b438e7901e7ee0d56d3ac39d7431091d82df3d (diff)
downloadusermoji-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.txt37
-rw-r--r--cmake/FindVulkan.cmake80
-rw-r--r--external/x64/lib/vulkan-1.libbin48602 -> 0 bytes
-rw-r--r--external/x86/lib/vulkan-1.libbin52334 -> 0 bytes
-rw-r--r--scripts/known_good.json4
-rw-r--r--tests/CMakeLists.txt15
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
deleted file mode 100644
index 3e23a7bc..00000000
--- a/external/x64/lib/vulkan-1.lib
+++ /dev/null
Binary files differ
diff --git a/external/x86/lib/vulkan-1.lib b/external/x86/lib/vulkan-1.lib
deleted file mode 100644
index 3caa7ba0..00000000
--- a/external/x86/lib/vulkan-1.lib
+++ /dev/null
Binary files differ
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")