cmake_minimum_required(VERSION 3.27) cmake_policy(SET CMP0135 NEW) project(pke VERSION 0.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -pthread") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -s DNDEBUG") set(PKE_SOURCE_FILES src/main.cpp src/macros.hpp src/components.hpp src/components.cpp src/ecs.hpp src/ecs.cpp src/entities.hpp src/entities.cpp src/event.hpp src/event.cpp src/game.hpp src/game.cpp src/memory.hpp src/memory.cpp src/memory-allocator.hpp src/dynamic-array.hpp src/dynamic-array.cpp src/asset-manager.hpp src/asset-manager.cpp src/vendor/cgltf-include.hpp src/vendor/cgltf-include.cpp src/vendor/glm_include.hpp src/vendor/stb_image_include.hpp src/vendor/stb_image_include.cpp src/window.hpp src/window.cpp ) include(FetchContent) FetchContent_Declare( imguidocked URL https://github.com/ocornut/imgui/archive/762ec445e63a95c1545b18b28d528f8ce38a9afd.zip ) FetchContent_GetProperties(imguidocked) if(NOT imguidocked_POPULATED) FetchContent_Populate(imguidocked) endif() set(ImGuiDockedFiles ${imguidocked_SOURCE_DIR}/imconfig.h ${imguidocked_SOURCE_DIR}/imgui.cpp ${imguidocked_SOURCE_DIR}/imgui.h ${imguidocked_SOURCE_DIR}/imgui_demo.cpp ${imguidocked_SOURCE_DIR}/imgui_draw.cpp ${imguidocked_SOURCE_DIR}/imgui_internal.h ${imguidocked_SOURCE_DIR}/imgui_tables.cpp ${imguidocked_SOURCE_DIR}/imgui_widgets.cpp ${imguidocked_SOURCE_DIR}/imstb_rectpack.h ${imguidocked_SOURCE_DIR}/imstb_textedit.h ${imguidocked_SOURCE_DIR}/imstb_truetype.h ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.cpp ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.h ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.h ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.h ) add_library(imguidocked ${ImGuiDockedFiles}) target_include_directories(imguidocked PUBLIC ${imguidocked_SOURCE_DIR}) find_package(Vulkan REQUIRED) if (Vulkan_FOUND) message(STATUS "Vulkan found: " ${Vulkan_INCLUDE_DIR}) endif (Vulkan_FOUND) add_executable(pke ${PKE_SOURCE_FILES} ) if (Vulkan_FOUND) target_link_libraries(pke PUBLIC ${Vulkan_LIBRARIES}) target_include_directories(pke PUBLIC ${Vulkan_INCLUDE_DIR}) endif (Vulkan_FOUND) set(SHADER_OUTPUT_DIR ${PROJECT_BINARY_DIR}/assets/shaders) set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders) file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR}) set(SHADERS ${SHADER_DIR}/present.vert ${SHADER_DIR}/present.frag ) foreach(SHADER IN LISTS SHADERS) get_filename_component(FILENAME ${SHADER} NAME) message(STATUS "Before Shader Compile: ${FILENAME}") add_custom_command(OUTPUT ${SHADER_OUTPUT_DIR}/${FILENAME}.spv COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SHADER_OUTPUT_DIR}/${FILENAME}.spv DEPENDS ${SHADER} COMMENT "Compiling ${FILENAME}") list(APPEND SPV_SHADERS ${SHADER_OUTPUT_DIR}/${FILENAME}.spv) endforeach() add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) find_package(PkgConfig REQUIRED) pkg_search_module(GLFW REQUIRED glfw3) if (GLFW_FOUND) message(STATUS "GLFW found: " ${GLFW_INCLUDE_DIR}) target_link_libraries(pke PUBLIC ${GLFW_LIBRARIES}) target_include_directories(pke PUBLIC ${GLFW_INCLUDE_DIR}) endif (GLFW_FOUND) find_package(glm REQUIRED) if (glm_FOUND) message(STATUS "glm found: " ${glm_INCLUDE_DIR}) target_link_libraries(pke PUBLIC ${glm_LIBRARIES}) target_include_directories(pke PUBLIC ${glm_INCLUDE_DIR}) endif (glm_FOUND) FetchContent_Declare(stb URL https://github.com/nothings/stb/archive/5736b15f7ea0ffb08dd38af21067c314d6a3aae9.zip) FetchContent_MakeAvailable(stb) target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/stb-src") FetchContent_Declare(cgltf URL https://github.com/jkuhlmann/cgltf/archive/271614ce5fa8bed6daf3bc824d12a3a652ebdb15.zip) FetchContent_MakeAvailable(cgltf) target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/cgltf-src") target_include_directories(pke PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") target_link_libraries(pke PUBLIC imguidocked) add_dependencies(pke shaders)