Skip to content

Commit d1f0404

Browse files
committed
Improve cmake more
1 parent f529634 commit d1f0404

5 files changed

Lines changed: 33 additions & 22 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
/.idea/
2+
/build/
23
/cmake-build-*/
34
/out/

CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.30)
1+
cmake_minimum_required(VERSION 3.21)
22
project(Luna C CXX)
33

44
set(LUNA_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "The root directory of the project")
@@ -36,7 +36,7 @@ else ()
3636
set(RELEASE_FLAGS ${COMMON_FLAGS} ${RELEASE_FLAGS} -O3 -DNDEBUG)
3737
endif ()
3838

39-
findVulkan()
39+
findDependencies()
4040

4141
add_library(Luna STATIC
4242
src/luna/core/Buffer.cpp
@@ -85,9 +85,9 @@ add_library(Luna STATIC
8585
include/luna/lunaTypes.h
8686
)
8787
target_compile_options(Luna PRIVATE $<IF:$<CONFIG:Debug>,${DEBUG_FLAGS},${RELEASE_FLAGS}>)
88-
target_link_libraries(Luna PUBLIC LunaDependencies)
89-
target_include_directories(Luna PUBLIC ${LUNA_SOURCE_DIR}/include)
90-
target_include_directories(Luna PRIVATE ${LUNA_SOURCE_DIR}/src/headers)
88+
target_link_libraries(Luna PUBLIC _LunaInternalLibrary_Dependencies)
89+
target_include_directories(Luna PUBLIC ${LUNA_SOURCE_DIR}/include)
90+
target_include_directories(Luna PRIVATE ${LUNA_SOURCE_DIR}/src/headers)
9191

9292
if (LUNA_EXAMPLES)
9393
add_subdirectory(example)

cmake/findPackages.cmake

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,37 @@ include(FetchContent)
22
include(CheckIncludeFile)
33
include(${LUNA_SOURCE_DIR}/cmake/utils.cmake)
44

5-
function(findVulkan)
6-
set(VOLK_PULL_IN_VULKAN OFF)
7-
makePackageAvailable(https://github.com/zeux/volk.git vulkan-sdk-1.4.*.* Vulkan COMPONENTS volk)
8-
set(VOLK_VERSION ${_LUNA_PACKAGE_LATEST_RELEASE_VERSION})
9-
if (NOT Vulkan_volk_FOUND)
10-
makePackageAvailable(https://github.com/KhronosGroup/Vulkan-Headers.git vulkan-sdk-1.4.*.* Headers)
11-
ensureVersionsMatch("Volk" VOLK_VERSION "Vulkan Headers" _LUNA_PACKAGE_LATEST_RELEASE_VERSION)
12-
else ()
13-
add_library(volk::volk ALIAS Vulkan::volk)
14-
endif ()
15-
5+
function(findDependencies)
166
disableOptions(SPIRV_REFLECT_EXECUTABLE SPIRV_REFLECT_INSTALL INSTALL_GTEST)
177
set(SPIRV_REFLECT_STATIC_LIB ON)
188
makePackageAvailable(https://github.com/KhronosGroup/SPIRV-Reflect.git vulkan-sdk-1.4.*.* SPIRV-Reflect)
19-
ensureVersionsMatch("Volk" VOLK_VERSION "SPIRV-Reflect" _LUNA_PACKAGE_LATEST_RELEASE_VERSION)
9+
set(SPIRV_REFLECT_VERSION ${_LUNA_PACKAGE_LATEST_RELEASE_VERSION})
2010

2111
makePackageAvailable(https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git v3.*.* VulkanMemoryAllocator CONFIG)
2212

23-
add_library(LunaDependencies INTERFACE)
24-
target_link_libraries(LunaDependencies INTERFACE volk::volk GPUOpen::VulkanMemoryAllocator spirv-reflect-static)
25-
target_compile_options(LunaDependencies INTERFACE $<$<BOOL:${LUNA_DEFINE_VK_NO_PROTOTYPES}>:$<IF:$<OR:$<COMPILE_LANG_AND_ID:C,MSVC>,$<COMPILE_LANG_AND_ID:CXX,MSVC>>,/DVK_NO_PROTOTYPES,-DVK_NO_PROTOTYPES>>)
13+
find_package(Vulkan COMPONENTS volk QUIET)
14+
if (Vulkan_INCLUDE_DIRS STREQUAL "Vulkan_INCLUDE_DIR-NOTFOUND") # Unable to find Vulkan headers
15+
makePackageAvailable(https://github.com/KhronosGroup/Vulkan-Headers.git vulkan-sdk-1.4.*.* Headers)
16+
set(HEADERS_VERSION ${_LUNA_PACKAGE_LATEST_RELEASE_VERSION})
17+
ensureVersionsMatch("SPIRV-Reflect" SPIRV_REFLECT_VERSION "Vulkan headers" HEADERS_VERSION)
18+
set(Vulkan_INCLUDE_DIR ${VULKAN_HEADERS_SOURCE_DIR}/include)
19+
find_package(Vulkan COMPONENTS volk QUIET) # This is kept to check if volk is installed on the system
20+
endif ()
21+
if (Vulkan_FOUND) # Able to find Volk
22+
add_library(_LunaInternalLibrary_volk INTERFACE)
23+
target_link_libraries(_LunaInternalLibrary_volk INTERFACE Vulkan::volk)
24+
add_library(volk::volk_headers ALIAS _LunaInternalLibrary_volk)
25+
else () # No Vulkan installation
26+
set(VOLK_HEADERS_ONLY ON)
27+
set(VULKAN_HEADERS_INSTALL_DIR ${Vulkan_INCLUDE_DIR}/../)
28+
makePackageAvailable(https://github.com/zeux/volk.git vulkan-sdk-1.4.*.* volk)
29+
set(VOLK_VERSION ${_LUNA_PACKAGE_LATEST_RELEASE_VERSION})
30+
ensureVersionsMatch("Volk" VOLK_VERSION "SPIRV-Reflect" SPIRV_REFLECT_VERSION)
31+
endif ()
32+
33+
add_library(_LunaInternalLibrary_Dependencies INTERFACE)
34+
target_link_libraries(_LunaInternalLibrary_Dependencies INTERFACE volk::volk_headers spirv-reflect-static GPUOpen::VulkanMemoryAllocator)
35+
target_compile_options(_LunaInternalLibrary_Dependencies INTERFACE $<$<BOOL:${LUNA_DEFINE_VK_NO_PROTOTYPES}>:$<IF:$<OR:$<COMPILE_LANG_AND_ID:C,MSVC>,$<COMPILE_LANG_AND_ID:CXX,MSVC>>,/DVK_NO_PROTOTYPES,-DVK_NO_PROTOTYPES>>)
2636
endfunction()
2737

2838
function(findSDL3)

cmake/utils.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ macro(disableOptions)
1313
endmacro()
1414

1515
macro(ensureVersionsMatch packageOne packageOneVersion packageTwo packageTwoVersion)
16-
if (NOT ${packageOneVersion} STREQUAL ${packageTwoVersion})
16+
if (NOT (${packageOneVersion} STREQUAL ${packageTwoVersion}))
1717
message(AUTHOR_WARNING "${packageOne} version ${${packageOneVersion}} does not match ${packageTwo} version ${${packageTwoVersion}}!")
1818
endif ()
1919
endmacro()

example/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.30)
1+
cmake_minimum_required(VERSION 3.21)
22
project(examples C)
33

44
include(${LUNA_SOURCE_DIR}/cmake/options.cmake)

0 commit comments

Comments
 (0)