From 86d28defc8b01b7387526adb1b4e95c55a68f02f Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Tue, 7 Dec 2021 13:46:39 +0100 Subject: [PATCH] Added cmake options to include framework in external projects Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- CMakeLists.txt | 80 +++++++++++++++++++++----- config/ext/Doxygen.cmake | 2 +- modules/CMakeLists.txt | 12 ++++ modules/asset_loader/CMakeLists.txt | 10 +++- modules/camera/CMakeLists.txt | 10 +++- modules/gui/CMakeLists.txt | 10 +++- modules/material/CMakeLists.txt | 10 +++- modules/meshlet/CMakeLists.txt | 10 +++- modules/scene/CMakeLists.txt | 10 +++- modules/shader_compiler/CMakeLists.txt | 10 +++- modules/testing/CMakeLists.txt | 9 ++- modules/upscaling/CMakeLists.txt | 10 +++- 12 files changed, 159 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1af81b59..7f1fdceb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,28 @@ cmake_minimum_required(VERSION 3.16) project(vkcv) +# cmake options +option(BUILD_MODULES "Enables building VkCV as shared libraries" ON) +option(BUILD_PROJECTS "Enables building the VkCV projects" ON) +option(BUILD_DOXYGEN_DOCS "Enables building the VkCV doxygen documentation" OFF) +option(BUILD_SHARED "Enables building VkCV as shared libraries" OFF) + +if (BUILD_PROJECTS) + set(BUILD_MODULES ${BUILD_PROJECTS}) +endif() + +message(STATUS "Options:") +message(" - BUILD_MODULES: ${BUILD_MODULES}") +message(" - BUILD_PROJECTS: ${BUILD_PROJECTS}") +message(" - BUILD_DOXYGEN_DOCS: ${BUILD_DOXYGEN_DOCS}") +message(" - BUILD_SHARED: ${BUILD_SHARED}") + +if (BUILD_SHARED) + set(vkcv_build_attribute SHARED) +else() + set(vkcv_build_attribute STATIC) +endif() + # settings c++ standard for the framework set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -11,8 +33,8 @@ if (CMAKE_BUILD_TYPE) set(vkcv_build_${_vkcv_build_type} 1) endif() -message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]") -message("-- Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]") +message(STATUS "Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]") +message(STATUS "Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]") if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0")) message(FATAL_ERROR "Upgrade your compiler! GCC 9.0+ is required!") @@ -55,20 +77,30 @@ list(APPEND vkcv_definitions VULKAN_DEBUG_LABELS) # set the compile definitions aka preprocessor variables add_compile_definitions(${vkcv_definitions}) -# add modules as targets -add_subdirectory(modules) +# check if the framework is used from a parent scope +get_directory_property(vkcv_parent_scope PARENT_DIRECTORY) + +if (BUILD_MODULES) + message(STATUS "Modules: ON") + + # add modules as targets + add_subdirectory(modules) +else() + message(STATUS "Modules: OFF") +endif() # add source files for compilation include(${vkcv_config}/Sources.cmake) -message("-- Libraries: [ ${vkcv_libraries} ]") -message("-- Flags: [ ${vkcv_flags} ]") +message(STATUS "Framework:") +message(" - Libraries: [ ${vkcv_libraries} ]") +message(" - Flags: [ ${vkcv_flags} ]") # set the compiler flags for the framework set(CMAKE_CXX_FLAGS ${vkcv_flags}) -# create VkCV framework as static library using all source files -add_library(vkcv STATIC ${vkcv_sources}) +# create VkCV framework as library using all source files +add_library(vkcv ${vkcv_build_attribute} ${vkcv_sources}) if(MSVC) #enable multicore compilation on visual studio @@ -80,20 +112,40 @@ endif() # add include directories from dependencies as system includes target_include_directories(vkcv SYSTEM BEFORE PRIVATE ${vkcv_includes}) -message(STATUS ${vkcv_includes}) # add the own include directory for public headers target_include_directories(vkcv BEFORE PUBLIC ${vkcv_include}) -message(STATUS ${vkcv_include}) # link the framework using all required libraries target_link_libraries(vkcv ${vkcv_libraries}) -message(STATUS ${vkcv_libraries}) -# add sub-projects/examples as targets -add_subdirectory(projects) +if (BUILD_PROJECTS) + message(STATUS "Projects: ON") + + # add sub-projects/examples as targets + add_subdirectory(projects) +else() + message(STATUS "Projects: OFF") +endif() -if (NOT WIN32) +if (BUILD_DOXYGEN_DOCS) + message(STATUS "Doxygen: ON") + # add doxygen as target if installed include(${vkcv_config}/ext/Doxygen.cmake) +else() + message(STATUS "Doxygen: OFF") +endif() + +if (vkcv_parent_scope) + list(APPEND vkcv_includes ${vkcv_include}) + list(APPEND vkcv_libraries vkcv) + + if (BUILD_MODULES) + list(APPEND vkcv_includes ${vkcv_modules_includes}) + list(APPEND vkcv_libraries ${vkcv_modules_libraries}) + endif() + + set(vkcv_includes ${vkcv_includes} PARENT_SCOPE) + set(vkcv_libraries ${vkcv_libraries} PARENT_SCOPE) endif() \ No newline at end of file diff --git a/config/ext/Doxygen.cmake b/config/ext/Doxygen.cmake index b711ac4b..c5f6d7f8 100644 --- a/config/ext/Doxygen.cmake +++ b/config/ext/Doxygen.cmake @@ -1,6 +1,6 @@ # check if Doxygen is installed -find_package(Doxygen) +find_package(Doxygen QUIET) if (DOXYGEN_FOUND) # note the option ALL which allows to build the docs together with the application diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 4b576e71..4d89c52a 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -1,4 +1,7 @@ +set(vkcv_modules_includes) +set(vkcv_modules_libraries) + # Add new modules here: add_subdirectory(asset_loader) add_subdirectory(camera) @@ -9,3 +12,12 @@ add_subdirectory(scene) add_subdirectory(shader_compiler) add_subdirectory(testing) add_subdirectory(upscaling) + +message(STATUS "Modules:") +message(" - Includes: [ ${vkcv_modules_includes} ]") +message(" - Libraries: [ ${vkcv_modules_libraries} ]") + +if (vkcv_parent_scope) + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/asset_loader/CMakeLists.txt b/modules/asset_loader/CMakeLists.txt index 151ae350..0ef40da7 100644 --- a/modules/asset_loader/CMakeLists.txt +++ b/modules/asset_loader/CMakeLists.txt @@ -15,7 +15,7 @@ set(vkcv_asset_loader_sources ) # adding source files to the module -add_library(vkcv_asset_loader STATIC ${vkcv_asset_loader_sources}) +add_library(vkcv_asset_loader ${vkcv_build_attribute} ${vkcv_asset_loader_sources}) # Setup some path variables to load libraries set(vkcv_asset_loader_lib lib) @@ -40,3 +40,11 @@ target_include_directories(vkcv_asset_loader SYSTEM BEFORE PRIVATE ${vkcv_asset_ target_include_directories(vkcv_asset_loader BEFORE PUBLIC ${vkcv_asset_loader_include}) target_compile_definitions(vkcv_asset_loader PUBLIC ${vkcv_asset_loader_definitions}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_asset_loader_include}) + list(APPEND vkcv_modules_libraries vkcv_asset_loader) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/camera/CMakeLists.txt b/modules/camera/CMakeLists.txt index 55d29aab..b76e2fd1 100644 --- a/modules/camera/CMakeLists.txt +++ b/modules/camera/CMakeLists.txt @@ -21,7 +21,7 @@ set(vkcv_camera_sources ) # adding source files to the project -add_library(vkcv_camera STATIC ${vkcv_camera_sources}) +add_library(vkcv_camera ${vkcv_build_attribute} ${vkcv_camera_sources}) # Setup some path variables to load libraries set(vkcv_camera_lib lib) @@ -37,3 +37,11 @@ target_include_directories(vkcv_camera SYSTEM BEFORE PRIVATE ${vkcv_camera_inclu target_include_directories(vkcv_camera BEFORE PUBLIC ${vkcv_camera_include} ${vkcv_camera_includes}) target_compile_definitions(vkcv_camera PUBLIC ${vkcv_camera_definitions}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_camera_include}) + list(APPEND vkcv_modules_libraries vkcv_camera) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/gui/CMakeLists.txt b/modules/gui/CMakeLists.txt index 87724ff9..34d80c93 100644 --- a/modules/gui/CMakeLists.txt +++ b/modules/gui/CMakeLists.txt @@ -22,7 +22,7 @@ set(vkcv_gui_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_gui_lib}) include(config/ImGui.cmake) # adding source files to the module -add_library(vkcv_gui STATIC ${vkcv_gui_sources} ${vkcv_imgui_sources}) +add_library(vkcv_gui ${vkcv_build_attribute} ${vkcv_gui_sources} ${vkcv_imgui_sources}) # link the required libraries to the module target_link_libraries(vkcv_gui ${vkcv_gui_libraries} vkcv ${vkcv_libraries}) @@ -34,3 +34,11 @@ target_include_directories(vkcv_gui SYSTEM BEFORE PRIVATE ${vkcv_gui_includes} $ target_include_directories(vkcv_gui BEFORE PUBLIC ${vkcv_gui_include} ${vkcv_imgui_includes}) target_compile_definitions(vkcv_gui PUBLIC ${vkcv_gui_defines}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_gui_include}) + list(APPEND vkcv_modules_libraries vkcv_gui) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/material/CMakeLists.txt b/modules/material/CMakeLists.txt index bbcb7c5a..ee3b36e8 100644 --- a/modules/material/CMakeLists.txt +++ b/modules/material/CMakeLists.txt @@ -15,7 +15,7 @@ set(vkcv_material_sources ) # adding source files to the module -add_library(vkcv_material STATIC ${vkcv_material_sources}) +add_library(vkcv_material ${vkcv_build_attribute} ${vkcv_material_sources}) # link the required libraries to the module target_link_libraries(vkcv_material vkcv ${vkcv_libraries}) @@ -25,3 +25,11 @@ target_include_directories(vkcv_material SYSTEM BEFORE PRIVATE ${vkcv_include} $ # add the own include directory for public headers target_include_directories(vkcv_material BEFORE PUBLIC ${vkcv_material_include}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_material_include}) + list(APPEND vkcv_modules_libraries vkcv_material) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/meshlet/CMakeLists.txt b/modules/meshlet/CMakeLists.txt index 05fdba47..a3b232e5 100644 --- a/modules/meshlet/CMakeLists.txt +++ b/modules/meshlet/CMakeLists.txt @@ -20,7 +20,7 @@ set(vkcv_meshlet_sources ${vkcv_meshlet_source}/vkcv/meshlet/Forsyth.cpp) # adding source files to the module -add_library(vkcv_meshlet STATIC ${vkcv_meshlet_sources}) +add_library(vkcv_meshlet ${vkcv_build_attribute} ${vkcv_meshlet_sources}) # link the required libraries to the module @@ -34,3 +34,11 @@ target_include_directories(vkcv_meshlet BEFORE PUBLIC ${vkcv_meshlet_include}) # linking with libraries from all dependencies and the VkCV framework target_link_libraries(vkcv_meshlet vkcv vkcv_asset_loader vkcv_camera) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_meshlet_include}) + list(APPEND vkcv_modules_libraries vkcv_meshlet) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/scene/CMakeLists.txt b/modules/scene/CMakeLists.txt index 2d81fde8..08a7e590 100644 --- a/modules/scene/CMakeLists.txt +++ b/modules/scene/CMakeLists.txt @@ -30,7 +30,7 @@ set(vkcv_scene_sources ) # adding source files to the module -add_library(vkcv_scene STATIC ${vkcv_scene_sources}) +add_library(vkcv_scene ${vkcv_build_attribute} ${vkcv_scene_sources}) # link the required libraries to the module target_link_libraries(vkcv_scene vkcv) @@ -43,3 +43,11 @@ target_include_directories(vkcv_scene BEFORE PUBLIC ${vkcv_scene_include}) # linking with libraries from all dependencies and the VkCV framework target_link_libraries(vkcv_scene vkcv vkcv_asset_loader vkcv_material vkcv_camera) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_scene_include}) + list(APPEND vkcv_modules_libraries vkcv_scene) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/shader_compiler/CMakeLists.txt b/modules/shader_compiler/CMakeLists.txt index a9181ccd..63182aaf 100644 --- a/modules/shader_compiler/CMakeLists.txt +++ b/modules/shader_compiler/CMakeLists.txt @@ -18,7 +18,7 @@ set(vkcv_shader_compiler_sources ) # adding source files to the module -add_library(vkcv_shader_compiler STATIC ${vkcv_shader_compiler_sources}) +add_library(vkcv_shader_compiler ${vkcv_build_attribute} ${vkcv_shader_compiler_sources}) # Setup some path variables to load libraries set(vkcv_shader_compiler_lib lib) @@ -35,3 +35,11 @@ target_include_directories(vkcv_shader_compiler SYSTEM BEFORE PRIVATE ${vkcv_sha # add the own include directory for public headers target_include_directories(vkcv_shader_compiler BEFORE PUBLIC ${vkcv_shader_compiler_include}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_shader_compiler_include}) + list(APPEND vkcv_modules_libraries vkcv_shader_compiler) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/testing/CMakeLists.txt b/modules/testing/CMakeLists.txt index 26814f3a..60f5a827 100644 --- a/modules/testing/CMakeLists.txt +++ b/modules/testing/CMakeLists.txt @@ -14,8 +14,15 @@ set(vkcv_testing_sources ) # adding source files to the project -add_library(vkcv_testing STATIC ${vkcv_testing_sources}) +add_library(vkcv_testing ${vkcv_build_attribute} ${vkcv_testing_sources}) # add the own include directory for public headers target_include_directories(vkcv_testing BEFORE PUBLIC ${vkcv_testing_include}) +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_testing_include}) + list(APPEND vkcv_modules_libraries vkcv_testing) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() diff --git a/modules/upscaling/CMakeLists.txt b/modules/upscaling/CMakeLists.txt index dcab9629..dec39257 100644 --- a/modules/upscaling/CMakeLists.txt +++ b/modules/upscaling/CMakeLists.txt @@ -27,7 +27,7 @@ set(vkcv_upscaling_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_upscaling_lib}) include(config/FidelityFX_FSR.cmake) # adding source files to the project -add_library(vkcv_upscaling STATIC ${vkcv_upscaling_sources}) +add_library(vkcv_upscaling ${vkcv_build_attribute} ${vkcv_upscaling_sources}) # link the required libraries to the module target_link_libraries(vkcv_upscaling ${vkcv_upscaling_libraries} vkcv vkcv_shader_compiler) @@ -37,3 +37,11 @@ target_include_directories(vkcv_upscaling SYSTEM BEFORE PRIVATE ${vkcv_upscaling # add the own include directory for public headers target_include_directories(vkcv_upscaling BEFORE PUBLIC ${vkcv_upscaling_include}) + +if (vkcv_parent_scope) + list(APPEND vkcv_modules_includes ${vkcv_upscaling_include}) + list(APPEND vkcv_modules_libraries vkcv_upscaling) + + set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE) + set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE) +endif() -- GitLab