TMP / refactor cmake

This commit is contained in:
2022-11-18 22:13:48 +03:00
parent 7f7153100b
commit f8e23f5713
7 changed files with 315 additions and 84 deletions

View File

@@ -1,10 +1,20 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.12)
project(progressia)
set(VERSION "0.0.1")
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake")
include(embed)
set(tools ${PROJECT_SOURCE_DIR}/tools)
set(generated ${PROJECT_BINARY_DIR}/generated)
file(MAKE_DIRECTORY "${generated}")
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/")
include(embed/embed)
include(glslc)
# Options
option(VULKAN_ERROR_CHECKING "Enable Vulkan validation layers to detect Vulkan API usage errors at runtime")
# Source files
add_executable(progressia
desktop/main.cpp
desktop/graphics/glfw_mgmt.cpp
@@ -27,40 +37,56 @@ add_executable(progressia
main/rendering/image.cpp
main/stb_image.c
${generated}/embedded_resources.cpp
${generated}/embedded_resources/embedded_resources.cpp
)
target_include_directories(progressia PRIVATE ${generated})
# Do Windows-specific tweaks
if (WIN32)
set_target_properties(progressia PROPERTIES WIN32_EXECUTABLE true)
target_link_options(progressia PRIVATE -static-libstdc++ -static-libgcc)
endif()
# Embedded resources
target_glsl_shaders(progressia
desktop/graphics/shaders/shader.frag
desktop/graphics/shaders/shader.vert)
compile_glsl(progressia)
compile_embeds(progressia)
target_include_directories(progressia PRIVATE ${generated}/embedded_resources)
# Compilation settings
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(gcc_like_compiler TRUE)
else()
set(gcc_like_compiler FALSE)
endif()
set_property(TARGET progressia PROPERTY CXX_STANDARD 17)
set_property(TARGET progressia PROPERTY CXX_STANDARD_REQUIRED ON)
target_compile_options(progressia PRIVATE -Wall)
# Do Windows-specific tweaks for release builds
if (WIN32 AND DEFINED ENV{PROGRESSIA_BUILD_ID})
set_target_properties(progressia PROPERTIES WIN32_EXECUTABLE true)
if (gcc_like_compiler)
target_link_options(progressia PRIVATE -static-libstdc++ -static-libgcc)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_link_options(progressia PRIVATE /entry:mainCRTStartup)
message(WARNING "Release builds with MSVC are not supported")
endif()
endif()
# Extra options for gcc -- we're using this for extra static analisys for now
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(progressia PRIVATE -Wextra -Wpedantic -Werror)
if (gcc_like_compiler)
target_compile_options(progressia PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
# Version information
if (NOT DEFINED BUILD_ID)
set(BUILD_ID "dev")
endif()
set(VERSION "0.0.1")
# Debug options
option(VULKAN_ERROR_CHECKING "Enable Vulkan validation layers to detect Vulkan API usage errors at runtime")
# Pass configuration options
if (DEFINED ENV{PROGRESSIA_BUILD_ID})
set(BUILD_ID ENV{PROGRESSIA_BUILD_ID})
else()
set(BUILD_ID "dev")
endif()
file(MAKE_DIRECTORY "${generated}/config")
configure_file(${PROJECT_SOURCE_DIR}/main/config.h.in
${PROJECT_BINARY_DIR}/config.h)
${generated}/config/config.h)
target_include_directories(progressia PRIVATE ${generated}/config)
# Libraries