cmake_minimum_required(VERSION 3.10) project(sdlgpu1 VERSION 0.1.0 LANGUAGES C CXX) SET(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) set(EXE_NAME ${CMAKE_PROJECT_NAME}) #set(PROGRAM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/vulkanapp.cc) # 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 ) option(SDL3_NONSYSTEM "Use SDL2 from folder in source tree" ON) if(SDL3_NONSYSTEM) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/SDL3 ${CMAKE_CURRENT_BINARY_DIR}/SDL3 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}/main.c ${SHADERS}) if(WIN32) add_custom_command( TARGET ${EXE_NAME} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy $ $ VERBATIM ) endif() 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)