diff --git a/CMakeLists.txt b/CMakeLists.txt index 5299cb0..056be31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,23 +48,6 @@ LIST(APPEND CMAKE_PREFIX_PATH third_party/glog/_build) find_package(glog REQUIRED) message(STATUS "Found glog: ${glog_VERSION}") -if(WITH_API) - include(cmake/DetectOpenCV.cmake) -endif() - -find_package(Boost COMPONENTS filesystem) -if(Boost_FOUND) - set(WITH_BOOST_FILESYSTEM true) - add_definitions(-DWITH_FILESYSTEM) - add_definitions(-DWITH_BOOST_FILESYSTEM) - message(STATUS "With boost filesystem: ${Boost_VERSION}") - #message(STATUS " Boost_LIBRARIES: ${Boost_LIBRARIES}") -elseif(OS_WIN) - add_definitions(-DWITH_FILESYSTEM) - add_definitions(-DWITH_NATIVE_FILESYSTEM) - message(STATUS "With native filesystem") -endif() - LIST(APPEND CMAKE_MODULE_PATH cmake) include(CMakePackageConfigHelpers) @@ -254,47 +237,6 @@ install(EXPORT ${MYNTEYE_NAME}-targets ## build.info -macro(set_default_value VARIABLE DEFAULT) - if(NOT ${VARIABLE}) - set(${VARIABLE} ${DEFAULT}) - endif() -endmacro() - -macro(set_version_values VARIABLE) - string(REPLACE "." ";" __version_list "${${VARIABLE}}") - list(LENGTH __version_list __len) - if(${__len} GREATER 0) - list(GET __version_list 0 ${VARIABLE}_MAJOR) - endif() - if(${__len} GREATER 1) - list(GET __version_list 1 ${VARIABLE}_MINOR) - endif() - if(${__len} GREATER 2) - list(GET __version_list 2 ${VARIABLE}_PATCH) - endif() - if(${__len} GREATER 3) - list(GET __version_list 3 ${VARIABLE}_TWEAK) - endif() -endmacro() - -find_package(CUDA QUIET) - -set_version_values(CMAKE_CXX_COMPILER_VERSION) -set_default_value(CMAKE_CXX_COMPILER_VERSION_MAJOR 0) -set_default_value(CMAKE_CXX_COMPILER_VERSION_MINOR 0) -set_default_value(CMAKE_CXX_COMPILER_VERSION_PATCH 0) -set_default_value(CMAKE_CXX_COMPILER_VERSION_TWEAK 0) -set_default_value(CUDA_VERSION_MAJOR 0) -set_default_value(CUDA_VERSION_MINOR 0) -set_default_value(OpenCV_VERSION_MAJOR 0) -set_default_value(OpenCV_VERSION_MINOR 0) -set_default_value(OpenCV_VERSION_PATCH 0) -set_default_value(OpenCV_VERSION_TWEAK 0) -set_default_value(${PROJECT_NAME}_VERSION_MAJOR 0) -set_default_value(${PROJECT_NAME}_VERSION_MINOR 0) -set_default_value(${PROJECT_NAME}_VERSION_PATCH 0) -set_default_value(${PROJECT_NAME}_VERSION_TWEAK 0) - configure_file( cmake/templates/build.info.in build.info @ONLY diff --git a/cmake/Option.cmake b/cmake/Option.cmake index ac68eac..716ac3c 100644 --- a/cmake/Option.cmake +++ b/cmake/Option.cmake @@ -12,7 +12,126 @@ # See the License for the specific language governing permissions and # limitations under the License. +include(${CMAKE_CURRENT_LIST_DIR}/IncludeGuard.cmake) +cmake_include_guard() + +include(${CMAKE_CURRENT_LIST_DIR}/Utils.cmake) + + +# build components + option(WITH_API "Build with API layer, need OpenCV" ON) -message(STATUS "Options:") -message(STATUS " WITH_API: ${WITH_API}") +# 3rdparty components + +option(WITH_BOOST "Include Boost support" ON) + + +# packages + +if(WITH_API) + include(${CMAKE_CURRENT_LIST_DIR}/DetectOpenCV.cmake) +endif() + +if(WITH_BOOST) + find_package(Boost COMPONENTS filesystem) + if(Boost_FOUND) + set(Boost_VERSION_STRING "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") + set(WITH_FILESYSTEM TRUE) + set(WITH_BOOST_FILESYSTEM TRUE) + add_definitions(-DWITH_FILESYSTEM) + add_definitions(-DWITH_BOOST_FILESYSTEM) + endif() +endif() + +if(NOT WITH_FILESYSTEM) + if(MSVC OR MSYS OR MINGW) # win + set(WITH_FILESYSTEM TRUE) + set(WITH_NATIVE_FILESYSTEM TRUE) + add_definitions(-DWITH_FILESYSTEM) + add_definitions(-DWITH_NATIVE_FILESYSTEM) + endif() +endif() + +find_package(CUDA QUIET) + +# set default int values for yaml file (build.info) +set_version_values(CMAKE_CXX_COMPILER_VERSION) +set_default_value(CMAKE_CXX_COMPILER_VERSION_MAJOR 0) +set_default_value(CMAKE_CXX_COMPILER_VERSION_MINOR 0) +set_default_value(CMAKE_CXX_COMPILER_VERSION_PATCH 0) +set_default_value(CMAKE_CXX_COMPILER_VERSION_TWEAK 0) +set_default_value(CUDA_VERSION_MAJOR 0) +set_default_value(CUDA_VERSION_MINOR 0) +set_default_value(OpenCV_VERSION_MAJOR 0) +set_default_value(OpenCV_VERSION_MINOR 0) +set_default_value(OpenCV_VERSION_PATCH 0) +set_default_value(OpenCV_VERSION_TWEAK 0) +set_default_value(${PROJECT_NAME}_VERSION_MAJOR 0) +set_default_value(${PROJECT_NAME}_VERSION_MINOR 0) +set_default_value(${PROJECT_NAME}_VERSION_PATCH 0) +set_default_value(${PROJECT_NAME}_VERSION_TWEAK 0) + +# summary + +status("") +status("Platform:") +status(" HOST_OS: ${HOST_OS}") +status(" HOST_NAME: ${HOST_NAME}") +status(" HOST_ARCH: ${HOST_ARCH}") +status(" HOST_COMPILER: ${CMAKE_CXX_COMPILER_ID}") +status(" COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}") +status(" COMPILER_VERSION_MAJOR: ${CMAKE_CXX_COMPILER_VERSION_MAJOR}") +status(" COMPILER_VERSION_MINOR: ${CMAKE_CXX_COMPILER_VERSION_MINOR}") +status(" COMPILER_VERSION_PATCH: ${CMAKE_CXX_COMPILER_VERSION_PATCH}") +status(" COMPILER_VERSION_TWEAK: ${CMAKE_CXX_COMPILER_VERSION_TWEAK}") +status(" CUDA_VERSION: ${CUDA_VERSION}") +status(" CUDA_VERSION_MAJOR: ${CUDA_VERSION_MAJOR}") +status(" CUDA_VERSION_MINOR: ${CUDA_VERSION_MINOR}") +status(" CUDA_VERSION_STRING: ${CUDA_VERSION_STRING}") +status(" OpenCV_VERSION: ${OpenCV_VERSION}") +status(" OpenCV_VERSION_MAJOR: ${OpenCV_VERSION_MAJOR}") +status(" OpenCV_VERSION_MINOR: ${OpenCV_VERSION_MINOR}") +status(" OpenCV_VERSION_PATCH: ${OpenCV_VERSION_PATCH}") +status(" OpenCV_VERSION_TWEAK: ${OpenCV_VERSION_TWEAK}") +status(" OpenCV_VERSION_STATUS: ${OpenCV_VERSION_STATUS}") +status(" OpenCV_WITH_WORLD: ${WITH_OPENCV_WORLD}") +status(" MYNTEYE_VERSION: ${mynteye_VERSION}") +status(" MYNTEYE_VERSION_MAJOR: ${mynteye_VERSION_MAJOR}") +status(" MYNTEYE_VERSION_MINOR: ${mynteye_VERSION_MINOR}") +status(" MYNTEYE_VERSION_PATCH: ${mynteye_VERSION_PATCH}") +status(" MYNTEYE_VERSION_TWEAK: ${mynteye_VERSION_TWEAK}") + +status("") +status("Options:") +status(" WITH_API: ${WITH_API}") +if(WITH_API) + if(OpenCV_FOUND) + status(" OpenCV: YES") + status(" OpenCV_VERSION: ${OpenCV_VERSION}") + status(" OpenCV_WORLD: " IF WITH_OPENCV_WORLD "YES" ELSE "NO") + else() + status(" OpenCV: NO") + endif() +endif() + +status(" WITH_BOOST: ${WITH_BOOST}") +if(WITH_BOOST) + if(Boost_FOUND) + status(" Boost: YES") + status(" Boost_VERSION: ${Boost_VERSION_STRING}") + #status(" Boost_LIBRARIES: ${Boost_LIBRARIES}") + else() + status(" Boost: NO") + endif() +endif() + +status("") +status("Features:") +status(" Filesystem: " + IF WITH_BOOST_FILESYSTEM "boost" + ELIF WITH_NATIVE_FILESYSTEM "native" + ELSE "none" +) + +status("") diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index 1f5a607..3b8ba45 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -49,3 +49,88 @@ macro(make_executable NAME) endif() endif() endmacro() + +# set_default_value(VARIABLE DEFAULT) +macro(set_default_value VARIABLE DEFAULT) + if(NOT ${VARIABLE}) + set(${VARIABLE} ${DEFAULT}) + endif() +endmacro() + +# set_version_values(VARIABLE) +macro(set_version_values VARIABLE) + string(REPLACE "." ";" __version_list "${${VARIABLE}}") + list(LENGTH __version_list __len) + if(${__len} GREATER 0) + list(GET __version_list 0 ${VARIABLE}_MAJOR) + endif() + if(${__len} GREATER 1) + list(GET __version_list 1 ${VARIABLE}_MINOR) + endif() + if(${__len} GREATER 2) + list(GET __version_list 2 ${VARIABLE}_PATCH) + endif() + if(${__len} GREATER 3) + list(GET __version_list 3 ${VARIABLE}_TWEAK) + endif() +endmacro() + +# status(TEXT [IF cond text [ELIF cond text] [ELSE cond text]]) +macro(status TEXT) + set(options) + set(oneValueArgs) + set(multiValueArgs IF ELIF ELSE) + cmake_parse_arguments(THIS "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN}) + + #message(STATUS "TEXT: ${TEXT}") + #message(STATUS "THIS_IF: ${THIS_IF}") + #message(STATUS "THIS_ELIF: ${THIS_ELIF}") + #message(STATUS "THIS_ELSE: ${THIS_ELSE}") + + set(__msg_list "${TEXT}") + set(__continue TRUE) + + if(__continue AND DEFINED THIS_IF) + #message(STATUS "-- THIS_IF: ${THIS_IF}") + list(LENGTH THIS_IF __if_len) + if(${__if_len} GREATER 1) + list(GET THIS_IF 0 __if_cond) + if(${__if_cond}) + list(REMOVE_AT THIS_IF 0) + list(APPEND __msg_list ${THIS_IF}) + set(__continue FALSE) + endif() + else() + message(FATAL_ERROR "status() IF must have cond and text, >= 2 items") + endif() + endif() + + if(__continue AND DEFINED THIS_ELIF) + #message(STATUS "-- THIS_ELIF: ${THIS_ELIF}") + list(LENGTH THIS_ELIF __elif_len) + if(${__elif_len} GREATER 1) + list(GET THIS_ELIF 0 __elif_cond) + if(${__elif_cond}) + list(REMOVE_AT THIS_ELIF 0) + list(APPEND __msg_list ${THIS_ELIF}) + set(__continue FALSE) + endif() + else() + message(FATAL_ERROR "status() ELIF must have cond and text, >= 2 items") + endif() + endif() + + if(__continue AND DEFINED THIS_ELSE) + #message(STATUS "-- THIS_ELSE: ${THIS_ELSE}") + list(LENGTH THIS_ELSE __else_len) + if(${__else_len} GREATER 0) + list(APPEND __msg_list ${THIS_ELSE}) + else() + message(FATAL_ERROR "status() ELSE must have text, >= 1 items") + endif() + endif() + + string(REPLACE ";" "" __msg_list "${__msg_list}") + message(STATUS "${__msg_list}") +endmacro()