cmake_minimum_required(VERSION 3.10) project(vksdlproj VERSION 0.2.0 LANGUAGES C CXX) #set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) #set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) set(EXE_NAME sdl3vkgame) set(PROGRAM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/vk_app.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() 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() if(WIN32) add_custom_command( TARGET ${EXE_NAME} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy $ $ VERBATIM ) endif() # Linking target_link_libraries(${EXE_NAME} PRIVATE SDL3::SDL3) target_link_libraries(${EXE_NAME} PRIVATE Vulkan::Vulkan) # TODO: change this to Vulkna::Headers and use loader