summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt95
1 files changed, 95 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..6a1e883
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,95 @@
+
+cmake_minimum_required(VERSION 3.21)
+
+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
+)
+
+include(FetchContent)
+FetchContent_Declare(
+ imguidocked
+ URL https://github.com/ocornut/imgui/archive/a88e5be7f478233e74c72c72eabb1d5f1cb69bb5.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}/shaders)
+set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/graphics/shaders)
+file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR})
+set(SHADERS
+)
+
+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)
+
+target_include_directories(pke PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src")
+
+target_link_libraries(pke PUBLIC imguidocked)
+
+add_dependencies(pke shaders)