Spaces:
Running
on
Zero
Running
on
Zero
# Copyright (C) 2020, Inria | |
# GRAPHDECO research group, https://team.inria.fr/graphdeco | |
# All rights reserved. | |
# | |
# This software is free for non-commercial, research and evaluation use | |
# under the terms of the LICENSE.md file. | |
# | |
# For inquiries contact [email protected] and/or [email protected] | |
################################################################################ | |
# This CMakeLists.txt manages which projects should be built and add their # | |
# dependencies. # | |
################################################################################ | |
set(SIBR_FOLDER "core") | |
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "") | |
option(BUILD_SIBR "Build core libs of SIBR (sibr_system, sibr_graphics, sibr_view, sibr_assets, ...)" ON) | |
#https://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all-subdirectories-of-a-directory | |
MACRO(SUBDIRLIST result curdir) | |
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) | |
SET(dirlist "") | |
foreach(child ${children}) | |
IF(IS_DIRECTORY ${curdir}/${child}) | |
LIST(APPEND dirlist ${child}) | |
ENDIF() | |
endforeach() | |
SET(${result} ${dirlist}) | |
ENDMACRO() | |
set(SIBR_PROJECTS_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/projects") | |
SUBDIRLIST(SUBDIRS ${SIBR_PROJECTS_FOLDER}) | |
list(APPEND PROJECT_SUBFOLDERS "apps" "preprocess" "renderer" "scripts" "library") | |
# Moving ulr to the top of the list | |
list(PREPEND SUBDIRS "dataset_tools" "ulr" "basic") | |
list(REMOVE_DUPLICATES SUBDIRS) | |
## DEPS ## | |
include(include_once) | |
message(STATUS "\n\n****************** Handling core dependencies ******************") | |
include_once(dependencies) ## Map/bind 3rdParty/external dependencies packages to cmake | |
message(STATUS "****************************************************************\n\n") | |
foreach(subdir ${SUBDIRS}) | |
set(${subdir}_ROOT_DIR "${SIBR_PROJECTS_FOLDER}/${subdir}") | |
set(PROJECT_NAME "BUILD_IBR_${subdir}") | |
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME) | |
if(${${PROJECT_NAME}}) | |
foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS}) | |
if(EXISTS "${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/Modules") | |
list(APPEND CMAKE_MODULE_PATH ${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/Modules) | |
endif() | |
if(EXISTS "${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/dependencies.cmake") | |
message(STATUS "********* Handling ${subdir} ${PROJECT_SUBFOLDER} dependencies *********") | |
include_once("${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/cmake/dependencies.cmake") | |
message(STATUS "****************************************************************\n\n") | |
endif() | |
endforeach() | |
endif() | |
endforeach() | |
Win3rdPartyGlobalCacheAction() | |
include_directories(.) | |
if (BUILD_SIBR) | |
add_subdirectory(core/system) | |
add_subdirectory(core/graphics) | |
add_subdirectory(core/renderer) | |
add_subdirectory(core/raycaster) | |
add_subdirectory(core/view) | |
add_subdirectory(core/scene) | |
add_subdirectory(core/assets) | |
add_subdirectory(core/imgproc) | |
add_subdirectory(core/video) | |
endif() | |
set(PROJECTS_ON_AT_FIRST_BUILD "basic" "gaussianviewer" "remote") | |
foreach(subdir ${SUBDIRS}) | |
message(STATUS "Adding ${subdir} project") | |
set(PROJECT_NAME "BUILD_IBR_${subdir}") | |
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME) | |
if(NOT (DEFINED ${PROJECT_NAME})) | |
foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS}) | |
if(EXISTS "${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/CMakeLists.txt") | |
if(subdir IN_LIST PROJECTS_ON_AT_FIRST_BUILD) | |
option(${PROJECT_NAME} "Build project \"${subdir}\"" ON) | |
else() | |
option(${PROJECT_NAME} "Build project \"${subdir}\"" OFF) | |
endif() | |
break() | |
endif() | |
endforeach() | |
endif() | |
message(STATUS "${PROJECT_NAME} is ${${PROJECT_NAME}}") | |
if(${${PROJECT_NAME}}) | |
if(EXISTS "${${subdir}_ROOT_DIR}/CMakeLists.txt") | |
add_subdirectory("${${subdir}_ROOT_DIR}") | |
else() | |
foreach(PROJECT_SUBFOLDER ${PROJECT_SUBFOLDERS}) | |
if(EXISTS "${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}/CMakeLists.txt") | |
add_subdirectory("${${subdir}_ROOT_DIR}/${PROJECT_SUBFOLDER}") | |
endif() | |
endforeach() | |
endif() | |
if(EXISTS "${${subdir}_ROOT_DIR}/documentation/" AND BUILD_DOCUMENTATION) | |
unset(PROJECT_PAGE) | |
unset(PROJECT_LINK) | |
unset(PROJECT_DESCRIPTION) | |
unset(PROJECT_TYPE) | |
include("${${subdir}_ROOT_DIR}/documentation/${subdir}_doc.cmake" OPTIONAL) | |
if(NOT DEFINED PROJECT_PAGE) | |
set(PROJECT_PAGE "${subdir}Page") | |
endif() | |
if(NOT DEFINED PROJECT_TYPE) | |
set(PROJECT_TYPE "OTHERS") | |
endif() | |
set(PROJECT_SUBPAGE_REF " - @subpage ${PROJECT_PAGE}") | |
set(PROJECT_REF_REF " - @ref ${PROJECT_PAGE}") | |
if(DEFINED PROJECT_LINK) | |
string(APPEND PROJECT_SUBPAGE_REF " (${PROJECT_LINK})") | |
string(APPEND PROJECT_REF_REF " (${PROJECT_LINK})") | |
endif() | |
if(DEFINED PROJECT_DESCRIPTION) | |
string(APPEND PROJECT_SUBPAGE_REF ": ${PROJECT_DESCRIPTION}") | |
string(APPEND PROJECT_REF_REF " (${PROJECT_DESCRIPTION})") | |
endif() | |
string(APPEND SIBR_PROJECTS_${PROJECT_TYPE}_SUBPAGE_REF_LOCAL "${PROJECT_SUBPAGE_REF}\n") | |
string(APPEND SIBR_PROJECTS_${PROJECT_TYPE}_REF_REF_LOCAL "${PROJECT_REF_REF}\n") | |
if(EXISTS "${${subdir}_ROOT_DIR}/documentation/img") | |
set(DOXY_APP_SPECIFIC_IMG_PATH_LOCAL "${DOXY_APP_SPECIFIC_IMG_PATH_LOCAL} ${${subdir}_ROOT_DIR}/documentation/img") | |
endif() | |
if(EXISTS "${${subdir}_ROOT_DIR}/LICENSE.md") | |
set(DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL "${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL} ${${subdir}_ROOT_DIR}/LICENSE.md") | |
endif() | |
endif() | |
else() | |
set(DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL "${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL} ${${subdir}_ROOT_DIR}") | |
endif() | |
endforeach() | |
set(SIBR_PROJECTS_SAMPLES_SUBPAGE_REF "${SIBR_PROJECTS_SAMPLES_SUBPAGE_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_OURS_SUBPAGE_REF "${SIBR_PROJECTS_OURS_SUBPAGE_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF "${SIBR_PROJECTS_TOOLBOX_SUBPAGE_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_OTHERS_SUBPAGE_REF "${SIBR_PROJECTS_OTHERS_SUBPAGE_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_SAMPLES_REF_REF "${SIBR_PROJECTS_SAMPLES_REF_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_OURS_REF_REF "${SIBR_PROJECTS_OURS_REF_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_TOOLBOX_REF_REF "${SIBR_PROJECTS_TOOLBOX_REF_REF_LOCAL}" PARENT_SCOPE) | |
set(SIBR_PROJECTS_OTHERS_REF_REF "${SIBR_PROJECTS_OTHERS_REF_REF_LOCAL}" PARENT_SCOPE) | |
set(DOXY_APP_SPECIFIC_IMG_PATH "${DOXY_APP_SPECIFIC_IMG_PATH_LOCAL}" PARENT_SCOPE) | |
set(DOXY_DOC_EXCLUDE_PATTERNS_DIRS "${DOXY_DOC_EXCLUDE_PATTERNS_DIRS_LOCAL}" PARENT_SCOPE) | |
if (BUILD_IBR_TFGL_INTEROP) | |
add_subdirectory(projects/tfgl_interop/renderer/custom_ops) | |
endif() | |