Update release_notes.md
[platform/upstream/caffeonacl.git] / cmake / Summary.cmake
1 ################################################################################################
2 # Caffe status report function.
3 # Automatically align right column and selects text based on condition.
4 # Usage:
5 #   caffe_status(<text>)
6 #   caffe_status(<heading> <value1> [<value2> ...])
7 #   caffe_status(<heading> <condition> THEN <text for TRUE> ELSE <text for FALSE> )
8 function(caffe_status text)
9   set(status_cond)
10   set(status_then)
11   set(status_else)
12
13   set(status_current_name "cond")
14   foreach(arg ${ARGN})
15     if(arg STREQUAL "THEN")
16       set(status_current_name "then")
17     elseif(arg STREQUAL "ELSE")
18       set(status_current_name "else")
19     else()
20       list(APPEND status_${status_current_name} ${arg})
21     endif()
22   endforeach()
23
24   if(DEFINED status_cond)
25     set(status_placeholder_length 23)
26     string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder)
27     string(LENGTH "${text}" status_text_length)
28     if(status_text_length LESS status_placeholder_length)
29       string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text)
30     elseif(DEFINED status_then OR DEFINED status_else)
31       message(STATUS "${text}")
32       set(status_text "${status_placeholder}")
33     else()
34       set(status_text "${text}")
35     endif()
36
37     if(DEFINED status_then OR DEFINED status_else)
38       if(${status_cond})
39         string(REPLACE ";" " " status_then "${status_then}")
40         string(REGEX REPLACE "^[ \t]+" "" status_then "${status_then}")
41         message(STATUS "${status_text} ${status_then}")
42       else()
43         string(REPLACE ";" " " status_else "${status_else}")
44         string(REGEX REPLACE "^[ \t]+" "" status_else "${status_else}")
45         message(STATUS "${status_text} ${status_else}")
46       endif()
47     else()
48       string(REPLACE ";" " " status_cond "${status_cond}")
49       string(REGEX REPLACE "^[ \t]+" "" status_cond "${status_cond}")
50       message(STATUS "${status_text} ${status_cond}")
51     endif()
52   else()
53     message(STATUS "${text}")
54   endif()
55 endfunction()
56
57
58 ################################################################################################
59 # Function for fetching Caffe version from git and headers
60 # Usage:
61 #   caffe_extract_caffe_version()
62 function(caffe_extract_caffe_version)
63   set(Caffe_GIT_VERSION "unknown")
64   find_package(Git)
65   if(GIT_FOUND)
66     execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty
67                     ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
68                     WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
69                     OUTPUT_VARIABLE Caffe_GIT_VERSION
70                     RESULT_VARIABLE __git_result)
71     if(NOT ${__git_result} EQUAL 0)
72       set(Caffe_GIT_VERSION "unknown")
73     endif()
74   endif()
75
76   set(Caffe_GIT_VERSION ${Caffe_GIT_VERSION} PARENT_SCOPE)
77   set(Caffe_VERSION "<TODO> (Caffe doesn't declare its version in headers)" PARENT_SCOPE)
78
79   # caffe_parse_header(${Caffe_INCLUDE_DIR}/caffe/version.hpp Caffe_VERSION_LINES CAFFE_MAJOR CAFFE_MINOR CAFFE_PATCH)
80   # set(Caffe_VERSION "${CAFFE_MAJOR}.${CAFFE_MINOR}.${CAFFE_PATCH}" PARENT_SCOPE)
81
82   # or for #define Caffe_VERSION "x.x.x"
83   # caffe_parse_header_single_define(Caffe ${Caffe_INCLUDE_DIR}/caffe/version.hpp Caffe_VERSION)
84   # set(Caffe_VERSION ${Caffe_VERSION_STRING} PARENT_SCOPE)
85
86 endfunction()
87
88
89 ################################################################################################
90 # Prints accumulated caffe configuration summary
91 # Usage:
92 #   caffe_print_configuration_summary()
93
94 function(caffe_print_configuration_summary)
95   caffe_extract_caffe_version()
96   set(Caffe_VERSION ${Caffe_VERSION} PARENT_SCOPE)
97
98   caffe_merge_flag_lists(__flags_rel CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS)
99   caffe_merge_flag_lists(__flags_deb CMAKE_CXX_FLAGS_DEBUG   CMAKE_CXX_FLAGS)
100
101   caffe_status("")
102   caffe_status("******************* Caffe Configuration Summary *******************")
103   caffe_status("General:")
104   caffe_status("  Version           :   ${CAFFE_TARGET_VERSION}")
105   caffe_status("  Git               :   ${Caffe_GIT_VERSION}")
106   caffe_status("  System            :   ${CMAKE_SYSTEM_NAME}")
107   caffe_status("  C++ compiler      :   ${CMAKE_CXX_COMPILER}")
108   caffe_status("  Release CXX flags :   ${__flags_rel}")
109   caffe_status("  Debug CXX flags   :   ${__flags_deb}")
110   caffe_status("  Build type        :   ${CMAKE_BUILD_TYPE}")
111   caffe_status("")
112   caffe_status("  BUILD_SHARED_LIBS :   ${BUILD_SHARED_LIBS}")
113   caffe_status("  BUILD_python      :   ${BUILD_python}")
114   caffe_status("  BUILD_matlab      :   ${BUILD_matlab}")
115   caffe_status("  BUILD_docs        :   ${BUILD_docs}")
116   caffe_status("  CPU_ONLY          :   ${CPU_ONLY}")
117   caffe_status("  USE_OPENCV        :   ${USE_OPENCV}")
118   caffe_status("  USE_LEVELDB       :   ${USE_LEVELDB}")
119   caffe_status("  USE_LMDB          :   ${USE_LMDB}")
120   caffe_status("  USE_NCCL          :   ${USE_NCCL}")
121   caffe_status("  ALLOW_LMDB_NOLOCK :   ${ALLOW_LMDB_NOLOCK}")
122   caffe_status("")
123   caffe_status("Dependencies:")
124   caffe_status("  BLAS              : " APPLE THEN "Yes (vecLib)" ELSE "Yes (${BLAS})")
125   caffe_status("  Boost             :   Yes (ver. ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION})")
126   caffe_status("  glog              :   Yes")
127   caffe_status("  gflags            :   Yes")
128   caffe_status("  protobuf          : " PROTOBUF_FOUND THEN "Yes (ver. ${PROTOBUF_VERSION})" ELSE "No" )
129   if(USE_LMDB)
130     caffe_status("  lmdb              : " LMDB_FOUND THEN "Yes (ver. ${LMDB_VERSION})" ELSE "No")
131   endif()
132   if(USE_LEVELDB)
133     caffe_status("  LevelDB           : " LEVELDB_FOUND THEN  "Yes (ver. ${LEVELDB_VERSION})" ELSE "No")
134     caffe_status("  Snappy            : " SNAPPY_FOUND THEN "Yes (ver. ${Snappy_VERSION})" ELSE "No" )
135   endif()
136   if(USE_OPENCV)
137     caffe_status("  OpenCV            :   Yes (ver. ${OpenCV_VERSION})")
138   endif()
139   caffe_status("  CUDA              : " HAVE_CUDA THEN "Yes (ver. ${CUDA_VERSION})" ELSE "No" )
140   caffe_status("")
141   if(HAVE_CUDA)
142     caffe_status("NVIDIA CUDA:")
143     caffe_status("  Target GPU(s)     :   ${CUDA_ARCH_NAME}" )
144     caffe_status("  GPU arch(s)       :   ${NVCC_FLAGS_EXTRA_readable}")
145     if(USE_CUDNN)
146       caffe_status("  cuDNN             : " HAVE_CUDNN THEN "Yes (ver. ${CUDNN_VERSION})" ELSE "Not found")
147     else()
148       caffe_status("  cuDNN             :   Disabled")
149     endif()
150     caffe_status("")
151   endif()
152   if(HAVE_PYTHON)
153     caffe_status("Python:")
154     caffe_status("  Interpreter       :" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver. ${PYTHON_VERSION_STRING})" ELSE "No")
155     caffe_status("  Libraries         :" PYTHONLIBS_FOUND  THEN "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE "No")
156     caffe_status("  NumPy             :" NUMPY_FOUND  THEN "${NUMPY_INCLUDE_DIR} (ver ${NUMPY_VERSION})" ELSE "No")
157     caffe_status("")
158   endif()
159   if(BUILD_matlab)
160     caffe_status("Matlab:")
161     caffe_status("  Matlab            :" HAVE_MATLAB THEN "Yes (${Matlab_mex}, ${Matlab_mexext}" ELSE "No")
162     caffe_status("  Octave            :" Octave_compiler THEN  "Yes (${Octave_compiler})" ELSE "No")
163     if(HAVE_MATLAB AND Octave_compiler)
164       caffe_status("  Build mex using   :   ${Matlab_build_mex_using}")
165     endif()
166     caffe_status("")
167   endif()
168   if(BUILD_docs)
169     caffe_status("Documentaion:")
170     caffe_status("  Doxygen           :" DOXYGEN_FOUND THEN "${DOXYGEN_EXECUTABLE} (${DOXYGEN_VERSION})" ELSE "No")
171     caffe_status("  config_file       :   ${DOXYGEN_config_file}")
172
173     caffe_status("")
174   endif()
175   caffe_status("Install:")
176   caffe_status("  Install path      :   ${CMAKE_INSTALL_PREFIX}")
177   caffe_status("")
178 endfunction()