Skip to content
Snippets Groups Projects
Verified Commit b3b1ef84 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

[#21] Added documentation to cmake and separated public headers and private source/header files

parent ac0052ed
No related branches found
No related tags found
1 merge request!14Resolve "Dokumentation für CMake"
Pipeline #24624 failed
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(vkcv) project(vkcv)
# settings c++ standard for the framework
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# checking build type and setting up a variable
if (CMAKE_BUILD_TYPE) if (CMAKE_BUILD_TYPE)
string(TOLOWER "${CMAKE_BUILD_TYPE}" _vkcv_build_type) string(TOLOWER "${CMAKE_BUILD_TYPE}" _vkcv_build_type)
set(vkcv_build_${_vkcv_build_type} 1) set(vkcv_build_${_vkcv_build_type} 1)
...@@ -11,15 +13,19 @@ endif() ...@@ -11,15 +13,19 @@ endif()
message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]") message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]")
# setting up different paths
set(vkcv_config ${PROJECT_SOURCE_DIR}/config) set(vkcv_config ${PROJECT_SOURCE_DIR}/config)
set(vkcv_config_ext ${vkcv_config}/ext) set(vkcv_config_ext ${vkcv_config}/ext)
set(vkcv_lib lib) set(vkcv_lib lib)
set(vkcv_source ${PROJECT_SOURCE_DIR}/src) set(vkcv_source ${PROJECT_SOURCE_DIR}/src)
set(vkcv_include ${PROJECT_SOURCE_DIR}/include)
# initializes compiler flags with defaults
set(vkcv_flags ${CMAKE_CXX_FLAGS}) set(vkcv_flags ${CMAKE_CXX_FLAGS})
# enabling warnings in the debug build
if (vkcv_build_debug) if (vkcv_build_debug)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(vkcv_flags ${vkcv_flags} " -Weverything") set(vkcv_flags ${vkcv_flags} " -Weverything")
...@@ -30,19 +36,21 @@ if (vkcv_build_debug) ...@@ -30,19 +36,21 @@ if (vkcv_build_debug)
endif() endif()
endif() endif()
# add source files for compilation
include(${vkcv_config}/Sources.cmake) include(${vkcv_config}/Sources.cmake)
# configure everything to use the required dependencies
include(${vkcv_config}/Libraries.cmake) include(${vkcv_config}/Libraries.cmake)
# set the compiler flags for the framework
set(CMAKE_CXX_FLAGS ${vkcv_flags}) set(CMAKE_CXX_FLAGS ${vkcv_flags})
message("-- Flags: [ ${CMAKE_CXX_FLAGS} ]") message("-- Flags: [ ${CMAKE_CXX_FLAGS} ]")
# set the compile definitions aka preprocessor variables
add_compile_definitions(${vkcv_definitions}) add_compile_definitions(${vkcv_definitions})
if (vkcv_directories) # create VkCV framework as static library using all source files
include_directories(${vkcv_directories})
endif()
add_library(vkcv STATIC ${vkcv_sources}) add_library(vkcv STATIC ${vkcv_sources})
if(MSVC) if(MSVC)
...@@ -53,9 +61,17 @@ if(MSVC) ...@@ -53,9 +61,17 @@ if(MSVC)
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${vkcv_sources}) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${vkcv_sources})
endif() endif()
# add include directories from dependencies as system includes
target_include_directories(vkcv SYSTEM BEFORE PRIVATE ${vkcv_includes}) target_include_directories(vkcv SYSTEM BEFORE PRIVATE ${vkcv_includes})
# add the own include directory for public headers
target_include_directories(vkcv AFTER PUBLIC ${vkcv_include})
# link the framework using all required libraries
target_link_libraries(vkcv ${vkcv_libraries}) target_link_libraries(vkcv ${vkcv_libraries})
# add sub-projects/examples as targets
add_subdirectory(projects) add_subdirectory(projects)
# add doxygen as target if installed
include(${vkcv_config}/ext/Doxygen.cmake) include(${vkcv_config}/ext/Doxygen.cmake)
set(vkcv_config_lib ${vkcv_config}/lib)
set(vkcv_config_lib ${vkcv_config}/lib)
set(vkcv_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_lib}) set(vkcv_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_lib})
if(NOT WIN32) if(NOT WIN32)
...@@ -10,21 +10,27 @@ if(NOT WIN32) ...@@ -10,21 +10,27 @@ if(NOT WIN32)
list(APPEND vkcv_flags -fopenmp) list(APPEND vkcv_flags -fopenmp)
endif() endif()
# some formatted printing
set(vkcv_config_msg " - Library: ") set(vkcv_config_msg " - Library: ")
# load dependencies via separate cmake file
include(${vkcv_config_lib}/GLFW.cmake) # glfw-x11 / glfw-wayland # libglfw3-dev include(${vkcv_config_lib}/GLFW.cmake) # glfw-x11 / glfw-wayland # libglfw3-dev
include(${vkcv_config_lib}/Vulkan.cmake) # vulkan-intel / vulkan-radeon / nvidia # libvulkan-dev include(${vkcv_config_lib}/Vulkan.cmake) # vulkan-intel / vulkan-radeon / nvidia # libvulkan-dev
# cleanup of compiler flags
if (vkcv_flags) if (vkcv_flags)
list(REMOVE_DUPLICATES vkcv_flags) list(REMOVE_DUPLICATES vkcv_flags)
endif() endif()
# cleanup of include directories from dependencies
if (vkcv_includes) if (vkcv_includes)
list(REMOVE_DUPLICATES vkcv_includes) list(REMOVE_DUPLICATES vkcv_includes)
endif () endif ()
# fix dependencies for different Linux distros (looking at you Ubuntu)
include(${vkcv_config_ext}/CheckLibraries.cmake) include(${vkcv_config_ext}/CheckLibraries.cmake)
# cleanup of compiler definitions aka preprocessor variables
if (vkcv_definitions) if (vkcv_definitions)
list(REMOVE_DUPLICATES vkcv_definitions) list(REMOVE_DUPLICATES vkcv_definitions)
endif () endif ()
......
# adding all source files and header files of the framework:
set(vkcv_sources set(vkcv_sources
${vkcv_source}/vkcv/Context.hpp ${vkcv_include}/vkcv/Context.hpp
${vkcv_source}/vkcv/Context.cpp ${vkcv_source}/vkcv/Context.cpp
${vkcv_source}/vkcv/Window.hpp ${vkcv_include}/vkcv/Window.hpp
${vkcv_source}/vkcv/Window.cpp ${vkcv_source}/vkcv/Window.cpp
${vkcv_source}/vkcv/CoreManager.hpp ${vkcv_source}/vkcv/CoreManager.hpp
${vkcv_source}/vkcv/CoreManager.cpp ${vkcv_source}/vkcv/CoreManager.cpp
......
# cleanup of dependency libraries
list(REMOVE_DUPLICATES vkcv_libraries) list(REMOVE_DUPLICATES vkcv_libraries)
# fixing paths of libraries to work on most Linux distros
foreach (a_lib IN LISTS vkcv_libraries) foreach (a_lib IN LISTS vkcv_libraries)
if (NOT EXISTS "${a_lib}") if (NOT EXISTS "${a_lib}")
string(REGEX MATCH ^/usr/lib/x86_64-linux-gnu/.*$ vkcv_usr_lib_u_match ${a_lib}) string(REGEX MATCH ^/usr/lib/x86_64-linux-gnu/.*$ vkcv_usr_lib_u_match ${a_lib})
......
File moved
File moved
# Add new projects/examples here:
add_subdirectory(first_triangle) add_subdirectory(first_triangle)
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(first_triangle) project(first_triangle)
# setting c++ standard for the project
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# adding source files to the project
add_executable(first_triangle src/main.cpp) add_executable(first_triangle src/main.cpp)
target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_source} ${vkcv_includes}) # including headers of dependencies and the VkCV framework
target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes})
# linking with libraries from all dependencies and the VkCV framework
target_link_libraries(first_triangle vkcv ${vkcv_libraries}) target_link_libraries(first_triangle vkcv ${vkcv_libraries})
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @brief Context class to handle instance, physical-device and device * @brief Context class to handle instance, physical-device and device
*/ */
#include "Context.hpp" #include "vkcv/Context.hpp"
#include "CoreManager.hpp" #include "CoreManager.hpp"
namespace vkcv { namespace vkcv {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @brief Window class to handle a basic rendering surface and input * @brief Window class to handle a basic rendering surface and input
*/ */
#include "Window.hpp" #include "vkcv/Window.hpp"
#include "CoreManager.hpp" #include "CoreManager.hpp"
namespace vkcv { namespace vkcv {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment