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:
1 parent
0c45da5cc4
commit
649e7f76fe
17 files changed
+109
-53
No files matched your search
@@ -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)
|
||||
@@ -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.
@@ -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
|
||||
@@ -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.
@@ -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.
Reference in new issue
Block a user