cmake_minimum_required(VERSION 3.10.0) project(Boundard VERSION 0.1.0 LANGUAGES C CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_library(boundard STATIC src/boundard.cpp src/game.cpp src/scene.cpp src/render.cpp src/config.cpp src/engine.cpp ) target_include_directories(boundard PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_compile_features(boundard PUBLIC cxx_std_17) find_package(glfw3 REQUIRED) find_package(Vulkan REQUIRED) find_package(PNG REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(JSONCPP REQUIRED IMPORTED_TARGET jsoncpp) find_program(GLSLC_EXECUTABLE glslc REQUIRED) set(BOUNDARD_SHADER_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders") set(BOUNDARD_SHADER_SOURCES shaders/textured_quad.vert shaders/textured_quad.frag ) set(BOUNDARD_SHADER_BINARIES) foreach(shader IN LISTS BOUNDARD_SHADER_SOURCES) get_filename_component(shader_name "${shader}" NAME) set(shader_output "${BOUNDARD_SHADER_DIR}/${shader_name}.spv") add_custom_command( OUTPUT "${shader_output}" COMMAND ${CMAKE_COMMAND} -E make_directory "${BOUNDARD_SHADER_DIR}" COMMAND ${GLSLC_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/${shader}" -o "${shader_output}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${shader}" VERBATIM ) list(APPEND BOUNDARD_SHADER_BINARIES "${shader_output}") endforeach() add_custom_target(boundard_shaders DEPENDS ${BOUNDARD_SHADER_BINARIES}) add_dependencies(boundard boundard_shaders) target_compile_definitions(boundard PRIVATE BOUNDARD_SHADER_DIR="${BOUNDARD_SHADER_DIR}") target_link_libraries(boundard PUBLIC glfw Vulkan::Vulkan PNG::PNG PkgConfig::JSONCPP) add_executable(square_example examples/square/main.cpp) target_link_libraries(square_example PRIVATE boundard) add_executable(boundard_engine src/engine_main.cpp) target_link_libraries(boundard_engine PRIVATE boundard)