-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
72 lines (59 loc) · 1.8 KB
/
CMakeLists.txt
File metadata and controls
72 lines (59 loc) · 1.8 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
cmake_minimum_required(VERSION 3.20)
project(vkrt CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Vulkan REQUIRED)
find_program(GLSLC glslc HINTS $ENV{VULKAN_SDK}/bin /usr/bin /usr/local/bin)
if(GLSLC)
set(GLSL_COMPILER ${GLSLC})
set(GLSL_FLAGS --target-env=vulkan1.2)
set(GLSL_OUT_FLAG -o)
else()
find_program(GLSLANG glslangValidator HINTS $ENV{VULKAN_SDK}/bin /usr/bin)
if(NOT GLSLANG)
message(FATAL_ERROR "Neither glslc nor glslangValidator found. Install the Vulkan SDK.")
endif()
set(GLSL_COMPILER ${GLSLANG})
set(GLSL_FLAGS --target-env vulkan1.2 -V)
set(GLSL_OUT_FLAG -o)
message(STATUS "Using glslangValidator as shader compiler")
endif()
set(SHADER_SRC_DIR ${CMAKE_SOURCE_DIR}/shaders)
set(SHADER_BIN_DIR ${CMAKE_BINARY_DIR}/shaders)
file(MAKE_DIRECTORY ${SHADER_BIN_DIR})
set(SHADER_SOURCES
${SHADER_SRC_DIR}/raygen.rgen
${SHADER_SRC_DIR}/miss.rmiss
${SHADER_SRC_DIR}/closesthit.rchit
)
set(SHADER_SPIRV "")
foreach(SRC ${SHADER_SOURCES})
get_filename_component(NAME ${SRC} NAME)
set(SPV ${SHADER_BIN_DIR}/${NAME}.spv)
add_custom_command(
OUTPUT ${SPV}
COMMAND ${GLSL_COMPILER} ${GLSL_FLAGS} ${SRC} ${GLSL_OUT_FLAG} ${SPV}
DEPENDS ${SRC}
COMMENT "Compiling ${NAME}"
VERBATIM
)
list(APPEND SHADER_SPIRV ${SPV})
endforeach()
add_custom_target(shaders ALL DEPENDS ${SHADER_SPIRV})
add_executable(vkrt
src/main.cpp
src/Image.cpp
src/Renderer.cpp
)
add_dependencies(vkrt shaders)
target_include_directories(vkrt PRIVATE
${Vulkan_INCLUDE_DIRS}
src
)
target_compile_definitions(vkrt PRIVATE
SHADER_DIR="${SHADER_BIN_DIR}"
)
target_link_libraries(vkrt PRIVATE
${Vulkan_LIBRARIES}
)
target_compile_options(vkrt PRIVATE -Wall -Wextra -O2)