Files
gpu-renderer/CMakeLists.txt
T

52 lines
1.4 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(renderer LANGUAGES C)
macro(configure_target target)
set_property(TARGET ${target} PROPERTY C_STANDARD 23)
set_property(TARGET ${target} PROPERTY C_EXTENSIONS OFF)
target_compile_options(${target} PRIVATE -Wall -Wextra -pedantic)
endmacro()
find_program(glslc glslc)
function(add_shaders target)
set(bin_dir "${CMAKE_CURRENT_BINARY_DIR}/${target}")
foreach(src ${ARGN})
get_filename_component(name ${src} NAME_WLE)
string(REGEX MATCH "(vert|frag)$" stage "${name}")
set(bin "${bin_dir}/${name}.spv")
list(APPEND bins ${bin})
add_custom_command(
OUTPUT ${bin}
COMMAND ${glslc} -fshader-stage=${stage}
${CMAKE_CURRENT_SOURCE_DIR}/${src} -o ${bin}
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${src}"
)
endforeach()
add_custom_target(${target}-spirv DEPENDS ${bins})
add_library(${target} INTERFACE)
add_dependencies(${target} ${target}-spirv)
endfunction()
add_shaders(shaders
model-vert.glsl
default-frag.glsl
)
target_compile_definitions(shaders INTERFACE
MODEL_VERT_SHADER_SPV="${CMAKE_CURRENT_BINARY_DIR}/shaders/model-vert.spv"
FRAG_SHADER_SPV="${CMAKE_CURRENT_BINARY_DIR}/shaders/default-frag.spv")
add_executable(demo
animation.c
gpu.c
linear_alg.c
main.c
model.c
model_format_glb.c
model_format_utah.c
)
configure_target(demo)
target_include_directories(demo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(demo PRIVATE glfw m vulkan shaders)