Olga
Initial commit
5f9d349
# 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]
# NOTE
# This feature is used to easily download, store and link external dependencies. This
# requires to prepare pre-compiled libraries (to download). For now, packages have
# only be prepare for Windows 64-bit with Visual Studio 2012. (You should re-build
# everything if you want to use another version of Visual Studio/ another compiler).
# NOTE ABOUT UNIX SYSTEMS
# There is no need for "searching mechanism". This function is discard and your
# libraries should be installed is the standard folders that are:
#
# /usr/include/
# /usr/lib/
# /usr/lib64/
# for packages downloaded using apt-get/yum
#
# /usr/local/include/
# /usr/local/lib/
# /usr/local/lib64/
# for packages manually installed ("make install")
#
# if you encounter problems when linking (e.g. lib not found even if it is installed),
# please check these folders are in your search PATH environment variables.
set(EXTLIBS_PACKAGE_FOLDER "${CMAKE_SOURCE_DIR}/extlibs")
function(sibr_addlibrary)
if(NOT WIN32)
return()
endif()
file(MAKE_DIRECTORY ${EXTLIBS_PACKAGE_FOLDER})
cmake_parse_arguments(args "VCID" "VERBOSE;TIMEOUT;DEFAULT_USE;NAME;VERSION;MSVC11;MSVC12;MSVC14;MSVC17" "MULTI_SET;SET" ${ARGN})
if (NOT "${args_VERSION}" MATCHES "")
message(WARNING "VERSION is not implemented yet")
endif()
set(lcname "")
set(ucname "")
string(TOLOWER "${args_NAME}" lcname)
string(TOUPPER "${args_NAME}" ucname)
set(LIB_PACKAGE_FOLDER "${EXTLIBS_PACKAGE_FOLDER}/${lcname}")
win3rdParty(${ucname}
$<args_VCID:VCID>
VERBOSE ${args_VERBOSE}
TIMEOUT ${args_TIMEOUT}
DEFAULT_USE ${args_DEFAULT_USE}
MSVC11 "${LIB_PACKAGE_FOLDER}" "${args_MSVC11}"
MSVC12 "${LIB_PACKAGE_FOLDER}" "${args_MSVC12}"
MSVC14 "${LIB_PACKAGE_FOLDER}" "${args_MSVC14}" # TODO SV: make sure to build this library if required
MSVC17 "${LIB_PACKAGE_FOLDER}" "${args_MSVC17}"
SET ${args_SET}
MULTI_SET ${args_MULTI_SET}
)
# Add include/ directory
# and lib/ directories
# TODO SV: paths not matching with current hierarchy. example: libraw/libraw-0.17.1/include
# SR: The link directories will also be used to lookup for dependency DLLs to copy in the install directory.
# Some libraries put the DLLs in the bin/ directory, so we include those.
file(GLOB subdirs RELATIVE ${LIB_PACKAGE_FOLDER} ${LIB_PACKAGE_FOLDER}/*)
set(dirlist "")
foreach(dir ${subdirs})
if(IS_DIRECTORY ${LIB_PACKAGE_FOLDER}/${dir})
# message("adding ${LIB_PACKAGE_FOLDER}/${dir}/include/ to the include directories")
include_directories("${LIB_PACKAGE_FOLDER}/${dir}/include/")
# message("adding ${LIB_PACKAGE_FOLDER}/${dir}/lib[64] to the link directories")
link_directories("${LIB_PACKAGE_FOLDER}/${dir}/")
link_directories("${LIB_PACKAGE_FOLDER}/${dir}/lib/")
link_directories("${LIB_PACKAGE_FOLDER}/${dir}/lib64/")
link_directories("${LIB_PACKAGE_FOLDER}/${dir}/bin/")
endif()
endforeach()
endfunction()
include(FetchContent)
include(git_describe)
include(install_runtime)
function(sibr_gitlibrary)
cmake_parse_arguments(args "" "TARGET;GIT_REPOSITORY;GIT_TAG;ROOT_DIR;SOURCE_DIR" "INCLUDE_DIRS" ${ARGN})
if(NOT args_TARGET)
message(FATAL "Error on sibr_gitlibrary : please define your target name.")
return()
endif()
if(NOT args_ROOT_DIR)
set(args_ROOT_DIR ${args_TARGET})
endif()
if(NOT args_SOURCE_DIR)
set(args_SOURCE_DIR ${args_TARGET})
endif()
if(args_GIT_REPOSITORY AND args_GIT_TAG)
if(EXISTS ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}/.git)
git_describe(
PATH ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}
GIT_URL SIBR_GITLIBRARY_URL
GIT_BRANCH SIBR_GITLIBRARY_BRANCH
GIT_COMMIT_HASH SIBR_GITLIBRARY_COMMIT_HASH
GIT_TAG SIBR_GITLIBRARY_TAG
)
if((SIBR_GITLIBRARY_URL STREQUAL args_GIT_REPOSITORY) AND
((SIBR_GITLIBRARY_BRANCH STREQUAL args_GIT_TAG) OR
(SIBR_GITLIBRARY_TAG STREQUAL args_GIT_TAG) OR
(SIBR_GITLIBRARY_COMMIT_HASH STREQUAL args_GIT_TAG)))
message(STATUS "Library ${args_TARGET} already available, skipping.")
set(SIBR_GITLIBRARY_DECLARED ON)
else()
message(STATUS "Adding library ${args_TARGET} from git...")
endif()
endif()
FetchContent_Declare(${args_TARGET}
GIT_REPOSITORY ${args_GIT_REPOSITORY}
GIT_TAG ${args_GIT_TAG}
GIT_SHALLOW ON
SOURCE_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}
SUBBUILD_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild
BINARY_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build
)
FetchContent_GetProperties(${args_TARGET})
string(TOLOWER "<name>" lcTargetName)
if((NOT SIBR_GITLIBRARY_DECLARED) AND (NOT ${lcTargetName}_POPULATED))
message(STATUS "Populating library ${args_TARGET}...")
FetchContent_Populate(${args_TARGET} QUIET
GIT_REPOSITORY ${args_GIT_REPOSITORY}
GIT_TAG ${args_GIT_TAG}
SOURCE_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR}
SUBBUILD_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/subbuild
BINARY_DIR ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build
)
endif()
add_subdirectory(${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/${args_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/extlibs/${args_ROOT_DIR}/build)
get_target_property(type ${args_TARGET} TYPE)
if(NOT (type STREQUAL "INTERFACE_LIBRARY"))
set_target_properties(${args_TARGET} PROPERTIES FOLDER "extlibs")
ibr_install_target(${args_TARGET}
COMPONENT ${args_TARGET}_install ## will create custom target to install only this project
)
endif()
list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR})
list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR})
foreach(args_INCLUDE_DIR ${args_INCLUDE_DIRS})
list(APPEND ${args_TARGET}_INCLUDE_DIRS ${EXTLIBS_PACKAGE_FOLDER}/${args_ROOT_DIR}/${args_SOURCE_DIR}/${args_INCLUDE_DIR})
endforeach()
include_directories(${${args_TARGET}_INCLUDE_DIRS})
else()
message(FATAL "Error on sibr_gitlibrary for target ${args_TARGET}: missing git tag or git url.")
endif()
endfunction()