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.
This commit is contained in:
Piotr Krygier committed 2023-03-16 12:04:35 +01:00
1 parent 0c45da5cc4
commit 649e7f76fe
17 files changed
+109 -53

No files matched your search

+33
View File
@@ -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
# "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> <SOURCE>"
# " -MT <DYNDEP_FILE> -MD -MF <DEP_FILE>"
# " ${flags_to_scan_deps} -fdep-file=<DYNDEP_FILE> -fdep-output=<OBJECT>"
# )
# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc")
# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG
# "${compiler_flags_for_module_map} -fmodule-mapper=<MODULE_MAP_FILE>")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
add_subdirectory(RedScarfEngine)
add_subdirectory(Utilities)
add_subdirectory(Graphics)
+51
View File
@@ -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
)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -176,14 +176,14 @@ const std::vector<const char*> gEnabledDeviceExtensionsNames = {
"VK_KHR_swapchain",
};
const std::map<ShaderStage, std::string> gShaderPaths = {
const std::map<ShaderStage, std::string> 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<float, std::chrono::seconds::period>(currentTime - startTime).count();
// auto currentTime = std::chrono::high_resolution_clock::now();
// float time = std::chrono::duration<float, std::chrono::seconds::period>(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));
}
File renamed without changes.
-45
View File
@@ -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
+8
View File
@@ -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)
File renamed without changes.
+8
View File
@@ -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)
File renamed without changes.
File renamed without changes.
File renamed without changes.