VulkanSDL3/CMakeLists.txt

72 lines
2.3 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(vksdlproj VERSION 0.1.0 LANGUAGES C CXX)
SET(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE)
set(EXE_NAME project)
set(PROGRAM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/vulkanapp.cc)
option(SDL3_NONSYSTEM "Use SDL3 from folder in source tree" ON)
# Get our GLSL shaders
set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
set(SHADER_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR})
file(GLOB SHADERS ${SHADER_DIR}/*.vert
${SHADER_DIR}/*.frag
${SHADER_DIR}/*.comp
${SHADER_DIR}/*.geom
${SHADER_DIR}/*.tesc
${SHADER_DIR}/*.tese
${SHADER_DIR}/*.mesh
${SHADER_DIR}/*.task
${SHADER_DIR}/*.rgen
${SHADER_DIR}/*.rchit
${SHADER_DIR}/*.rmiss
)
# Find SDL3
if(SDL3_NONSYSTEM)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL ${CMAKE_CURRENT_BINARY_DIR}/SDL EXCLUDE_FROM_ALL)
else()
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared)
endif()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/vk-bootstrap)
find_package(Vulkan REQUIRED COMPONENTS glslc)
# Compile each shader
foreach(SHADER IN LISTS SHADERS)
get_filename_component(FILENAME ${SHADER} NAME)
add_custom_command(OUTPUT ${SHADER_BIN_DIR}/${FILENAME}.spv
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SHADER_BIN_DIR}/${FILENAME}.spv
DEPENDS ${SHADER}
COMMENT "Compiling Shader ${FILENAME}")
list(APPEND SPV_SHADERS ${SHADER_BIN_DIR}/${FILENAME}.spv)
endForeach()
# Shader target
add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS})
add_executable(${EXE_NAME} ${CMAKE_SOURCE_DIR}/src/main.cc ${PROGRAM_SOURCES} ${SHADERS})
set_target_properties(${EXE_NAME}
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS ON
)
target_include_directories(${EXE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include)
add_dependencies(${EXE_NAME} shaders)
if(CMAKE_COMPILER_IS_GNUCC)
target_compile_options(${EXE_NAME} PRIVATE -Wall -Wextra)
elseif(MSVC)
target_compile_options(${EXE_NAME} PRIVATE /W4)
endif()
# Linking
target_link_libraries(${EXE_NAME} PRIVATE SDL3::SDL3)
target_link_libraries(${EXE_NAME} PRIVATE Vulkan::Vulkan)
target_link_libraries(${EXE_NAME} PRIVATE vk-bootstrap::vk-bootstrap)