SDL_GPU1/CMakeLists.txt
2025-04-11 12:49:15 -04:00

75 lines
2.3 KiB
CMake

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 $<TARGET_FILE:SDL3::SDL3-shared> $<TARGET_FILE_DIR:${EXE_NAME}>
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)