-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
99 lines (79 loc) · 2.95 KB
/
CMakeLists.txt
File metadata and controls
99 lines (79 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
cmake_minimum_required(VERSION 3.28)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(Project VERSION 0.0.1)
include(CMakeDeps.cmake)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
file(GLOB_RECURSE PROJECT_SOURCE_FILES CONFIGURE_DEPENDS "src/*.cpp")
add_executable(Project ${PROJECT_SOURCE_FILES})
target_sources(Project PRIVATE ${PROJECT_SOURCE_FILES})
target_link_libraries(Project PUBLIC
Vulkan::Vulkan
SDL3::SDL3
glm
spdlog
)
target_include_directories(Project PRIVATE ${tracy_SOURCE_DIR}/public/tracy)
target_sources(Project PRIVATE ${tracy_SOURCE_DIR}/public/TracyClient.cpp)
if(WIN32)
target_link_options(Project PRIVATE
$<$<NOT:$<CONFIG:Debug>>:LINKER:/SUBSYSTEM:WINDOWS LINKER:/ENTRY:mainCRTStartup>
)
endif()
if(UNIX)
target_link_libraries(Project PRIVATE m)
endif()
target_compile_definitions(Project PRIVATE
PROJECT_NAME="${CMAKE_PROJECT_NAME}"
PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR}
PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH}
PROJECT_VK_VERSION_MAJOR=1
PROJECT_VK_VERSION_MINOR=3
PROJECT_VK_VERSION_PATCH=204
$<$<CONFIG:Debug>:DEBUG_BUILD>
$<$<NOT:$<CONFIG:Debug>>:RELEASE_BUILD>
$<$<BOOL:${WIN32}>:OS_WINDOWS>
$<$<BOOL:${APPLE}>:OS_MACOS>
$<$<BOOL:${UNIX}>:OS_LINUX>
VULKAN_HPP_NO_EXCEPTIONS
VULKAN_HPP_NO_NODISCARD_WARNINGS
$<$<CONFIG:Debug>:TRACY_ENABLE>
$<$<CONFIG:Debug>:TRACY_ONLY_LOCALHOST>
)
target_precompile_headers(Project PRIVATE
<vulkan/vulkan.hpp>
<spdlog/spdlog.h>
)
set(COMPILED_SHADERS "")
set(PROJECT_SHADER_FOLDER "${PROJECT_SOURCE_DIR}/src/shaders")
file(GLOB_RECURSE SHADER_FILES CONFIGURE_DEPENDS "${PROJECT_SHADER_FOLDER}/*")
foreach(SHADER_FILE ${SHADER_FILES})
get_filename_component(SHADER_NAME ${SHADER_FILE} NAME)
get_filename_component(SHADER_DIR ${SHADER_FILE} DIRECTORY)
if (SHADER_DIR STREQUAL PROJECT_SHADER_FOLDER)
set(SHADER_OUTPUT "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/shaders/${SHADER_NAME}")
else()
string(REPLACE "${PROJECT_SHADER_FOLDER}/" "" SHADER_NESTED_FOLDERS ${SHADER_DIR})
set(SHADER_OUTPUT "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/shaders/${SHADER_NESTED_FOLDERS}/${SHADER_NAME}")
endif()
add_custom_command(
OUTPUT ${SHADER_OUTPUT}
COMMAND glslc ${SHADER_FILE} -o ${SHADER_OUTPUT}
DEPENDS ${SHADER_FILE}
)
list(APPEND COMPILED_SHADERS ${SHADER_OUTPUT})
endforeach()
add_custom_target(Shaders ALL DEPENDS ${COMPILED_SHADERS})
add_dependencies(Project Shaders)
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_BINARY_DIR}/compile_commands.json
${PROJECT_SOURCE_DIR}/compile_commands.json
)
add_custom_command(TARGET Project POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:SDL3::SDL3>
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<TARGET_FILE_NAME:SDL3::SDL3>
)