From 649e7f76fe1b60727e542671c2531d2df1a8ae69 Mon Sep 17 00:00:00 2001 From: Piotr Krygier Date: Thu, 16 Mar 2023 11:54:15 +0100 Subject: [PATCH] Change build system to CMake According to my own documentation, the project tree should look entirely different. Also, it should use CMake instead of Make. This commit introduces changes that will make my project tree to adhere to my own documentation. --- CMakeLists.txt | 33 ++++++++++++ Graphics/CMakeLists.txt | 51 +++++++++++++++++++ {include => Graphics/include}/vulkanBase.hpp | 0 {include => Graphics/include}/window.hpp | 0 {shaders => Graphics/shaders}/shader.frag | 0 {shaders => Graphics/shaders}/shader.vert | 0 {include => Graphics/src}/localeVulkan.hpp | 0 {include => Graphics/src}/localeWindow.hpp | 0 {src => Graphics/src}/vulkanBase.cpp | 17 ++++--- {src => Graphics/src}/window.cpp | 0 Makefile | 45 ---------------- RedScarfEngine/CMakeLists.txt | 8 +++ {src => RedScarfEngine/src}/main.cpp | 0 Utilities/CMakeLists.txt | 8 +++ .../include}/localization.hpp | 0 {include => Utilities/include}/logger.hpp | 0 {src => Utilities/src}/logger.cpp | 0 17 files changed, 109 insertions(+), 53 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 Graphics/CMakeLists.txt rename {include => Graphics/include}/vulkanBase.hpp (100%) rename {include => Graphics/include}/window.hpp (100%) rename {shaders => Graphics/shaders}/shader.frag (100%) rename {shaders => Graphics/shaders}/shader.vert (100%) rename {include => Graphics/src}/localeVulkan.hpp (100%) rename {include => Graphics/src}/localeWindow.hpp (100%) rename {src => Graphics/src}/vulkanBase.cpp (99%) rename {src => Graphics/src}/window.cpp (100%) delete mode 100644 Makefile create mode 100644 RedScarfEngine/CMakeLists.txt rename {src => RedScarfEngine/src}/main.cpp (100%) create mode 100644 Utilities/CMakeLists.txt rename {include => Utilities/include}/localization.hpp (100%) rename {include => Utilities/include}/logger.hpp (100%) rename {src => Utilities/src}/logger.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..eeb953e3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.11) +project("RedScarfEngine" + VERSION 0.0.1 + DESCRIPTION "Vulkan based 3D engine" + LANGUAGES CXX) + + +# make sure c++ 20 is set +set(CMAKE_CXX_STANDARD 20)# turn on the dynamic depends for ninja +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) +# Enable C++ modules +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "3c375311-a3c9-4396-a187-3227ef642046") + +# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +# include(gcc_modules.cmake) +# endif() + +# string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE +# " " +# " -MT -MD -MF " +# " ${flags_to_scan_deps} -fdep-file= -fdep-output=" +# ) + +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc") +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG +# "${compiler_flags_for_module_map} -fmodule-mapper=") + + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +add_subdirectory(RedScarfEngine) +add_subdirectory(Utilities) +add_subdirectory(Graphics) \ No newline at end of file diff --git a/Graphics/CMakeLists.txt b/Graphics/CMakeLists.txt new file mode 100644 index 00000000..3109ec6c --- /dev/null +++ b/Graphics/CMakeLists.txt @@ -0,0 +1,51 @@ +add_library(rse_graphics) + +find_package(Vulkan REQUIRED) +find_package(glfw3 REQUIRED) +find_package(glm REQUIRED) + +find_package(Vulkan COMPONENTS glslc) +find_program(glslc_executable NAMES glslc HINTS Vulkan::glslc) + +function(compile_shader) + cmake_parse_arguments(PARSE_ARGV 1 arg "" "ENV;FORMAT" "SOURCES") + foreach(source ${arg_SOURCES}) + add_custom_command( + OUTPUT ${source}.${arg_FORMAT} + DEPENDS ${source} + DEPFILE ${source}.d + COMMAND + ${glslc_executable} + -o ${source}.${arg_FORMAT} + ${CMAKE_CURRENT_SOURCE_DIR}/${source} + ) + endforeach() +endfunction() + + +target_include_directories(rse_graphics PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/third_party/vma/include + ${CMAKE_SOURCE_DIR}/Utilities/include + ${Vulkan_INCLUDE_DIR} + ${glfw3_INCLUDE_DIR} + ${glm_INCLUDE_DIR}) + + +target_sources(rse_graphics PRIVATE + src/window.cpp + src/vulkanBase.cpp) + +target_link_libraries(rse_graphics PRIVATE + rse_utilities + ${Vulkan_LIBRARIES} + glfw + glm) + +compile_shader(rse_graphics + ENV opengl + FORMAT num + SOURCES + shaders/shader.vert + shaders/shader.frag +) diff --git a/include/vulkanBase.hpp b/Graphics/include/vulkanBase.hpp similarity index 100% rename from include/vulkanBase.hpp rename to Graphics/include/vulkanBase.hpp diff --git a/include/window.hpp b/Graphics/include/window.hpp similarity index 100% rename from include/window.hpp rename to Graphics/include/window.hpp diff --git a/shaders/shader.frag b/Graphics/shaders/shader.frag similarity index 100% rename from shaders/shader.frag rename to Graphics/shaders/shader.frag diff --git a/shaders/shader.vert b/Graphics/shaders/shader.vert similarity index 100% rename from shaders/shader.vert rename to Graphics/shaders/shader.vert diff --git a/include/localeVulkan.hpp b/Graphics/src/localeVulkan.hpp similarity index 100% rename from include/localeVulkan.hpp rename to Graphics/src/localeVulkan.hpp diff --git a/include/localeWindow.hpp b/Graphics/src/localeWindow.hpp similarity index 100% rename from include/localeWindow.hpp rename to Graphics/src/localeWindow.hpp diff --git a/src/vulkanBase.cpp b/Graphics/src/vulkanBase.cpp similarity index 99% rename from src/vulkanBase.cpp rename to Graphics/src/vulkanBase.cpp index 75717954..957be17e 100644 --- a/src/vulkanBase.cpp +++ b/Graphics/src/vulkanBase.cpp @@ -176,14 +176,14 @@ const std::vector gEnabledDeviceExtensionsNames = { "VK_KHR_swapchain", }; -const std::map gShaderPaths = { +const std::map gShaderPaths = { /* TODO: When changing to release and install, move those files*/ { ShaderStage::VERTEX, - "./vertex.spv", + "../Graphics/shaders/shader.vert.num", }, { ShaderStage::FRAGMENTS, - "./fragments.spv", + "../Graphics/shaders/shader.frag.num", } }; @@ -1674,16 +1674,17 @@ uint8_t createSyncObjects() */ void updateUniformBuffer(uint32_t currentImage) { - static auto startTime = std::chrono::high_resolution_clock::now(); + // static auto startTime = std::chrono::high_resolution_clock::now(); - auto currentTime = std::chrono::high_resolution_clock::now(); - float time = std::chrono::duration(currentTime - startTime).count(); + // auto currentTime = std::chrono::high_resolution_clock::now(); + // float time = std::chrono::duration(currentTime - startTime).count(); UniformBufferObject ubo{}; - ubo.model = glm::rotate(glm::mat4(1.0f), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f)); + ubo.model = glm::mat4(1.0f); + // ubo.model = glm::rotate(glm::mat4(1.0f), glm::radians(0.0f), glm::vec3(0.0f, 0.0f, 1.0f)); ubo.view = glm::lookAt(glm::vec3(2.0f, 2.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f)); ubo.proj = glm::perspective(glm::radians(45.0f), gSwapchainExtent.width / (float) gSwapchainExtent.height, 0.1f, 10.0f); - ubo.proj[1][1] *= -1; + ubo.proj[1][1] *= -1; /* GLM was developed for OpenGL, where Y coordinate of the clip is inverted */ memcpy(gUniformBuffers[currentImage].allocationInfo.pMappedData, &ubo, sizeof(ubo)); } diff --git a/src/window.cpp b/Graphics/src/window.cpp similarity index 100% rename from src/window.cpp rename to Graphics/src/window.cpp diff --git a/Makefile b/Makefile deleted file mode 100644 index b6df5858..00000000 --- a/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -CC := /usr/bin/g++ -INCLUDE_DIR := -I./include -I./third_party/vma/include -LFLAGS := -lglfw -lvulkan -CFLAGS := -g -Wall -Werror -std=c++20 $(INCLUDE_DIR) $(LFLAGS) -SRC_DIR := src -BUILD_DIR := ./build -TARGET := RedScarfEngine -SOURCES := main.cpp \ - vulkanBase.cpp \ - window.cpp \ - logger.cpp \ - -OBJECTS := $(SOURCES:%=$(BUILD_DIR)/%) -OBJECTS := $(OBJECTS:cpp=o) - -SHADERS_DIR := ./shaders - -SHADER_OBJECTS := vertex.spv \ - fragments.spv \ - -all: prepare_dirs $(OBJECTS) $(SHADER_OBJECTS) - $(CC) $(CFLAGS) -o $(BUILD_DIR)/$(TARGET) $(OBJECTS) - -# Build shader files -vertex.spv: $(SHADERS_DIR)/shader.vert - glslc $^ -o $(BUILD_DIR)/$@ - -fragments.spv: $(SHADERS_DIR)/shader.frag - glslc $^ -o $(BUILD_DIR)/$@ - -$(BUILD_DIR)/%.spv: - echo $(basename $^) - glslc $^ -o $@ - -# Generic build command -$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp - $(CC) $(CFLAGS) -c $^ -o $@ - -.PHONY: prepare_dirs -prepare_dirs: - mkdir -p ./build - -.PHONY: clean -clean: - rm -rf ./build diff --git a/RedScarfEngine/CMakeLists.txt b/RedScarfEngine/CMakeLists.txt new file mode 100644 index 00000000..f19c1321 --- /dev/null +++ b/RedScarfEngine/CMakeLists.txt @@ -0,0 +1,8 @@ +add_executable(${PROJECT_NAME} src/main.cpp) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_SOURCE_DIR}/Utilities/include + ${CMAKE_SOURCE_DIR}/Graphics/include) + +target_link_libraries(${PROJECT_NAME} PRIVATE + rse_graphics) \ No newline at end of file diff --git a/src/main.cpp b/RedScarfEngine/src/main.cpp similarity index 100% rename from src/main.cpp rename to RedScarfEngine/src/main.cpp diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt new file mode 100644 index 00000000..6e3ec4ee --- /dev/null +++ b/Utilities/CMakeLists.txt @@ -0,0 +1,8 @@ +add_library(rse_utilities) + +target_include_directories(rse_utilities PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) + +target_sources(rse_utilities PRIVATE + src/logger.cpp) diff --git a/include/localization.hpp b/Utilities/include/localization.hpp similarity index 100% rename from include/localization.hpp rename to Utilities/include/localization.hpp diff --git a/include/logger.hpp b/Utilities/include/logger.hpp similarity index 100% rename from include/logger.hpp rename to Utilities/include/logger.hpp diff --git a/src/logger.cpp b/Utilities/src/logger.cpp similarity index 100% rename from src/logger.cpp rename to Utilities/src/logger.cpp