@@ -3,18 +3,31 @@ cmake_minimum_required(VERSION 2.8.12)
33#set(LBANN_MAJOR_VERSION 0)
44#set(LBANN_MINOR_VERSION 91)
55
6- # Get the git version so that we can embed it into the executable
7- execute_process (COMMAND git describe --abbrev=7 --dirty --always --tags OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
8- set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLBANN_VERSION=\\\" ${GIT_VERSION} \\\" " )
6+ # Check to see if we are in a git repo
7+ execute_process (COMMAND git rev-parse --is-inside-work-tree OUTPUT_VARIABLE GIT_REPO OUTPUT_STRIP_TRAILING_WHITESPACE)
8+
9+ if (GIT_REPO)
10+ # Get the git version so that we can embed it into the executable
11+ execute_process (COMMAND git --git-dir ${LBANN_HOME} /.git describe --abbrev=7 --dirty --always --tags OUTPUT_VARIABLE GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
12+ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLBANN_VERSION=\\\" ${GIT_VERSION} \\\" " )
13+ else ()
14+ if (LBANN_VER)
15+ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLBANN_VERSION=\\\" ${LBANN_VER} \\\" " )
16+ else ()
17+ set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLBANN_VERSION=\\\" v0.UKWN\\\" " )
18+ endif ()
19+ endif ()
920
1021################################################################
1122# Options
1223################################################################
1324
14- option (WITH_CUDA "Include Nvidia CUDA" ON )
15- option (WITH_CUDNN "Include Nvidia cuDNN" ON )
16- option (WITH_TBINF "Include Tensorboard interface" ON )
17- option (VERBOSE "Verbose output" OFF )
25+ option (WITH_CUDA "Include Nvidia CUDA" ON )
26+ option (WITH_CUDNN "Include Nvidia cuDNN" ON )
27+ option (WITH_CNPY "Include cnpy" ON )
28+ option (WITH_TBINF "Include Tensorboard interface" ON )
29+ option (WITH_VTUNE "Link the Intel VTune profiling library" OFF )
30+ option (VERBOSE "Verbose output" OFF )
1831if (NOT MAKE_NUM_PROCESSES)
1932 set (MAKE_NUM_PROCESSES 1)
2033endif ()
@@ -32,6 +45,30 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
3245# Initialize C++ flags
3346set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++11" )
3447
48+ # Disable all optimization in debug for better viewing under debuggers (cmake already adds -g)
49+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -DLBANN_DEBUG" )
50+
51+ # Enable parallel random matrix generation
52+ if (NOT SEQ_INIT)
53+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLBANN_PARALLEL_RANDOM_MATRICES" )
54+ endif ()
55+
56+ # Special handling if we're compiling with Clang's address sanitizer
57+ execute_process (COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CXX_VERSION)
58+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
59+ if (NOT (CXX_VERSION VERSION_GREATER 3.5 OR CXX_VERSION VERSION_EQUAL 3.5))
60+ message (FATAL_ERROR "LBANN & Elemental requires clang Version >= 3.5" )
61+ endif ()
62+ if (CMAKE_BUILD_TYPE MATCHES Debug)
63+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address" )
64+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address" )
65+ else ()
66+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer" )
67+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer" )
68+ endif ()
69+ endif ()
70+
71+
3572# Set verbose output (should be 0 or 1)
3673if (VERBOSE)
3774 set (VERBOSE 1)
@@ -63,6 +100,7 @@ set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
63100set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
64101
65102# Add build and install directories to RPATH
103+ set (CMAKE_INSTALL_RPATH "${PROJECT_BINARY_DIR} ;${CMAKE_INSTALL_RPATH} " )
66104set (CMAKE_INSTALL_RPATH "${PROJECT_BINARY_DIR} /${CMAKE_INSTALL_LIBDIR} ;${CMAKE_INSTALL_RPATH} " )
67105set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX} /lib;${CMAKE_INSTALL_RPATH} " )
68106set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_LIBDIR} ;${CMAKE_INSTALL_RPATH} " )
@@ -74,22 +112,37 @@ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR};${CMAKE
74112# Required dependencies
75113include (OpenMP)
76114include (MPI)
77- include (Elemental)
78115include (OpenCV)
116+ include (protobuf)
117+ include (LbannProto)
79118
80119# Optional dependencies
81120if (WITH_CUDA)
82121 include (CUDA)
83122endif ()
123+
124+ if (ELEMENTAL_USE_CUBLAS)
125+ set (EL_CUBLAS_FLAGS "-DEL_USE_CUBLAS -I${CUDA_INCLUDE_DIRS} " )
126+ endif ()
127+
84128if (CUDA_FOUND)
85129 include (CUB)
86130 if (WITH_CUDNN)
87131 include (cuDNN)
88132 endif ()
89133endif ()
134+
135+ include (Elemental)
136+
90137if (WITH_TBINF)
91138 include (TBinf)
92139endif ()
140+ if (WITH_VTUNE)
141+ include (VTune)
142+ endif ()
143+ if (WITH_CNPY)
144+ include (cnpy)
145+ endif ()
93146include (Doxygen)
94147
95148################################################################
@@ -107,7 +160,14 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
107160 message (FATAL_ERROR "LBANN & Elemental requires icpc Version >= 16.0" )
108161 endif ()
109162elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
110- message (FATAL_ERROR "Unsupported compiler: Clang" )
163+ if (NOT (CXX_VERSION VERSION_GREATER 3.5 OR CXX_VERSION VERSION_EQUAL 3.5))
164+ message (FATAL_ERROR "LBANN & Elemental requires clang Version >= 3.5" )
165+ endif ()
166+ if (CMAKE_BUILD_TYPE MATCHES Debug)
167+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=address" )
168+ else ()
169+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer" )
170+ endif ()
111171else ()
112172 message (FATAL_ERROR "Unsupported compiler: Unknown compiler vendor" )
113173endif ()
@@ -152,9 +212,15 @@ endif()
152212if (LBANN_BUILT_CUB)
153213 add_dependencies (src project_CUB)
154214endif ()
215+ if (LBANN_BUILT_CNPY)
216+ add_dependencies (src project_CNPY)
217+ endif ()
155218if (LBANN_HAS_TBINF)
156219 add_dependencies (src TBinf)
157220endif ()
221+ if (LBANN_BUILT_LBANN_PROTO)
222+ add_dependencies (src LbannProto)
223+ endif ()
158224
159225# Build LBANN library
160226add_library (lbann ${LIBRARY_TYPE} $<TARGET_OBJECTS:src>)
@@ -163,15 +229,29 @@ add_library(lbann ${LIBRARY_TYPE} $<TARGET_OBJECTS:src>)
163229target_link_libraries (lbann ${MPI_CXX_LIBRARIES} )
164230target_link_libraries (lbann ${Elemental_LIBRARIES} )
165231target_link_libraries (lbann ${OpenCV_LIBRARIES} )
232+ target_link_libraries (lbann ${PROTOBUF_LIBRARIES} )
233+ target_link_libraries (lbann ${CNPY_LIBRARIES} )
234+
235+ message ("main CMakeFiles XXX LbannProto_LIBRARIES: ${LbannProto_LIBRARIES} " )
236+ # target_link_libraries(lbann ${LbannProto_LIBRARIES})
237+
166238if (LBANN_HAS_CUDA)
167239 target_link_libraries (lbann ${CUDA_LIBRARIES} )
240+ target_link_libraries (lbann ${cuBLAS_LIBRARIES} )
168241endif ()
169242if (LBANN_HAS_CUDNN)
170243 target_link_libraries (lbann ${cuDNN_LIBRARIES} )
171244endif ()
245+ if (LBANN_HAS_VTUNE)
246+ target_link_libraries (lbann ${VTUNE_STATIC_LIB} )
247+ target_link_libraries (lbann dl)
248+ endif ()
172249if (LBANN_HAS_TBINF)
173250 target_link_libraries (lbann TBinf)
174251endif ()
252+ if (LBANN_HAS_LBANN_PROTO)
253+ target_link_libraries (lbann LbannProto)
254+ endif ()
175255
176256################################################################
177257# Install LBANN
@@ -222,6 +302,10 @@ message(" LBANN_HAS_ELEMENTAL: ${LBANN_HAS_ELEMENTAL}")
222302message (" LBANN_HAS_OPENCV: ${LBANN_HAS_OPENCV} " )
223303message (" LBANN_HAS_CUDA: ${LBANN_HAS_CUDA} " )
224304message (" LBANN_HAS_CUDNN: ${LBANN_HAS_CUDNN} " )
305+ message (" ELEMENTAL_USE_CUBLAS: ${ELEMENTAL_USE_CUBLAS} " )
225306message (" LBANN_HAS_PROTOBUF: ${LBANN_HAS_PROTOBUF} " )
307+ message (" LBANN_HAS_CNPY: ${LBANN_HAS_CNPY} " )
226308message (" LBANN_HAS_TBINF: ${LBANN_HAS_TBINF} " )
309+ message (" LBANN_HAS_VTUNE: ${LBANN_HAS_VTUNE} " )
227310message (" LBANN_HAS_DOXYGEN: ${LBANN_HAS_DOXYGEN} " )
311+ message (" LBANN_HAS_LBANN_PROTO:${LBANN_HAS_LBANN_PROTO} " )
0 commit comments