@@ -3,14 +3,101 @@ cmake_minimum_required (VERSION 3.29)
33# Enable C++ module dependency scanning
44set (CMAKE_CXX_SCAN_FOR_MODULES ON )
55
6+ # Check if VULKAN_SDK environment variable is set
7+ if (NOT DEFINED ENV{VULKAN_SDK})
8+ message (WARNING "VULKAN_SDK environment variable is not set. This may cause issues with finding Vulkan SDK." )
9+ endif ()
10+
611project (VulkanTutorial)
712
813list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR} /CMake" )
914
1015find_package (glfw3 REQUIRED)
1116find_package (glm REQUIRED)
17+
18+ # Try to find Vulkan
1219find_package (Vulkan REQUIRED)
20+
21+ # Check if Vulkan was found correctly
22+ if (NOT Vulkan_FOUND OR NOT EXISTS "${Vulkan_INCLUDE_DIR} " )
23+ message (WARNING "Vulkan SDK not found in expected location: ${Vulkan_INCLUDE_DIR} " )
24+
25+ # Try to find Vulkan in alternative locations
26+ if (DEFINED ENV{VULKAN_SDK})
27+ message (STATUS "Trying to find Vulkan SDK in VULKAN_SDK environment variable: $ENV{VULKAN_SDK} " )
28+ set (Vulkan_INCLUDE_DIR "$ENV{VULKAN_SDK} /include" )
29+ if (EXISTS "${Vulkan_INCLUDE_DIR} " )
30+ message (STATUS "Found Vulkan include directory at: ${Vulkan_INCLUDE_DIR} " )
31+
32+ # Update Vulkan library path if needed
33+ if (NOT EXISTS "${Vulkan_LIBRARY} " )
34+ if (CMAKE_SYSTEM_NAME STREQUAL "Windows" )
35+ set (Vulkan_LIBRARY "$ENV{VULKAN_SDK} /lib/vulkan-1.lib" )
36+ else ()
37+ set (Vulkan_LIBRARY "$ENV{VULKAN_SDK} /lib/libvulkan.so" )
38+ endif ()
39+ message (STATUS "Setting Vulkan library to: ${Vulkan_LIBRARY} " )
40+ endif ()
41+
42+ # If the Vulkan::Vulkan target already exists, update its properties
43+ if (TARGET Vulkan::Vulkan)
44+ message (STATUS "Updating Vulkan::Vulkan target properties" )
45+ set_target_properties (Vulkan::Vulkan PROPERTIES
46+ INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIR} "
47+ IMPORTED_LOCATION "${Vulkan_LIBRARY} "
48+ )
49+ else ()
50+ # Create the Vulkan::Vulkan target if it doesn't exist
51+ message (STATUS "Creating Vulkan::Vulkan target" )
52+ add_library (Vulkan::Vulkan UNKNOWN IMPORTED )
53+ set_target_properties (Vulkan::Vulkan PROPERTIES
54+ INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIR} "
55+ IMPORTED_LOCATION "${Vulkan_LIBRARY} "
56+ )
57+ endif ()
58+ else ()
59+ message (FATAL_ERROR "Vulkan include directory not found at: ${Vulkan_INCLUDE_DIR} " )
60+ endif ()
61+ else ()
62+ message (FATAL_ERROR "Vulkan SDK not found. Please install Vulkan SDK or set VULKAN_SDK environment variable." )
63+ endif ()
64+ endif ()
65+
1366find_package (VulkanHpp REQUIRED)
67+
68+ # Check if VulkanHpp_CPPM_DIR is set and exists
69+ if (NOT DEFINED VulkanHpp_CPPM_DIR OR NOT EXISTS "${VulkanHpp_CPPM_DIR} " )
70+ message (WARNING "VulkanHpp CPPM directory not found: ${VulkanHpp_CPPM_DIR} " )
71+
72+ # Try to find VulkanHpp in VULKAN_SDK
73+ if (DEFINED ENV{VULKAN_SDK})
74+ message (STATUS "Trying to find VulkanHpp in VULKAN_SDK environment variable: $ENV{VULKAN_SDK} " )
75+ set (VulkanHpp_CPPM_DIR "$ENV{VULKAN_SDK} /include" )
76+ if (EXISTS "${VulkanHpp_CPPM_DIR} " )
77+ message (STATUS "Found VulkanHpp CPPM directory at: ${VulkanHpp_CPPM_DIR} " )
78+
79+ # Check if vulkan.cppm exists
80+ if (NOT EXISTS "${VulkanHpp_CPPM_DIR} /vulkan/vulkan.cppm" )
81+ message (STATUS "vulkan.cppm not found, creating it" )
82+ file (MAKE_DIRECTORY "${VulkanHpp_CPPM_DIR} /vulkan" )
83+ file (WRITE "${VulkanHpp_CPPM_DIR} /vulkan/vulkan.cppm"
84+ "// Auto-generated vulkan.cppm file
85+ module;
86+ #include <vulkan/vulkan.hpp>
87+ export module vulkan;
88+ export namespace vk {
89+ using namespace VULKAN_HPP_NAMESPACE;
90+ }
91+ " )
92+ endif ()
93+ else ()
94+ message (FATAL_ERROR "VulkanHpp CPPM directory not found at: ${VulkanHpp_CPPM_DIR} " )
95+ endif ()
96+ else ()
97+ message (FATAL_ERROR "VulkanHpp CPPM directory not found and VULKAN_SDK environment variable is not set." )
98+ endif ()
99+ endif ()
100+
14101find_package (tinyobjloader REQUIRED)
15102find_package (TinyGLTF REQUIRED)
16103find_package (KTX REQUIRED)
@@ -26,13 +113,20 @@ target_include_directories(VulkanCppModule
26113 PRIVATE
27114 "${Vulkan_INCLUDE_DIR} "
28115)
116+
117+ # Check if Vulkan include directory exists
118+ if (NOT EXISTS "${Vulkan_INCLUDE_DIR} " )
119+ message (FATAL_ERROR "Vulkan include directory not found: ${Vulkan_INCLUDE_DIR} . Please install Vulkan SDK or set VULKAN_SDK environment variable." )
120+ endif ()
29121target_link_libraries (VulkanCppModule
30122 PUBLIC
31123 Vulkan::Vulkan
32124)
33125
34126set_target_properties (VulkanCppModule PROPERTIES CXX_STANDARD 20)
35127
128+ # VulkanHpp_CPPM_DIR is already checked above
129+
36130target_sources (VulkanCppModule
37131 PUBLIC
38132 FILE_SET cxx_modules TYPE CXX_MODULES
@@ -44,6 +138,7 @@ target_sources(VulkanCppModule
44138
45139
46140# Add the vulkan.cppm file directly as a source file
141+ # (Checks for existence are already done above)
47142target_sources (VulkanCppModule
48143 PRIVATE
49144 "${VulkanHpp_CPPM_DIR} /vulkan/vulkan.cppm"
0 commit comments