47 lines
1.2 KiB
CMake
47 lines
1.2 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(stage ${src} NAME_WLE)
|
|
set(bin "${bin_dir}/${stage}.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)
|
|
target_compile_definitions(${target} INTERFACE
|
|
VERT_SHADER_SPV="${bin_dir}/vert.spv"
|
|
FRAG_SHADER_SPV="${bin_dir}/frag.spv")
|
|
add_dependencies(${target} ${target}-spirv)
|
|
endfunction()
|
|
|
|
add_shaders(shaders
|
|
vert.glsl
|
|
frag.glsl
|
|
)
|
|
|
|
add_executable(demo
|
|
gpu.c
|
|
linear_alg.c
|
|
main.c
|
|
)
|
|
configure_target(demo)
|
|
target_include_directories(demo PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
target_link_libraries(demo PRIVATE glfw m vulkan shaders)
|