summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorAnatoly Baksheev <no@email>2015-02-01 17:45:31 +0300
committerEvan Shelhamer <shelhamer@imaginarynumber.net>2015-02-16 20:48:41 -0800
commitaea5dd674adbccf9927869f5e9ba9e2dfc2cbf21 (patch)
tree119681b184cd92799a2b5aa223e0d64cf8f8e413 /cmake
parentc0ae656c0e80e721fec89b63e2cdc390e440d625 (diff)
downloadcaffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.tar.gz
caffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.tar.bz2
caffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.zip
cmake 2.8.7. support
Diffstat (limited to 'cmake')
-rw-r--r--cmake/ConfigGen.cmake11
-rw-r--r--cmake/Cuda.cmake11
-rw-r--r--cmake/Dependencies.cmake5
-rw-r--r--cmake/Misc.cmake4
-rw-r--r--cmake/Modules/FindMKL.cmake155
-rw-r--r--cmake/Targets.cmake3
-rw-r--r--cmake/Utils.cmake16
7 files changed, 118 insertions, 87 deletions
diff --git a/cmake/ConfigGen.cmake b/cmake/ConfigGen.cmake
index 24f23e9c..b7cf9f4c 100644
--- a/cmake/ConfigGen.cmake
+++ b/cmake/ConfigGen.cmake
@@ -38,14 +38,21 @@ function(caffe_generate_export_configs)
# ---[ Configure build-tree CaffeConfig.cmake file ]---
caffe_get_current_includes(Caffe_INCLUDE_DIRS)
+
+ set(Caffe_DEFINITIONS "")
if(NOT HAVE_CUDA)
set(HAVE_CUDA FALSE)
- set(Caffe_DEFINITIONS -DCPU_ONLY)
+ list(APPEND Caffe_DEFINITIONS -DCPU_ONLY)
endif()
+
if(NOT HAVE_CUDNN)
set(HAVE_CUDNN FALSE)
else()
- set(Caffe_DEFINITIONS -DUSE_CUDNN)
+ list(APPEND DEFINITIONS -DUSE_CUDNN)
+ endif()
+
+ if(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
+ list(APPEND Caffe_DEFINITIONS -DUSE_MKL)
endif()
configure_file("cmake/Templates/CaffeConfig.cmake.in" "${CMAKE_BINARY_DIR}/CaffeConfig.cmake" @ONLY)
diff --git a/cmake/Cuda.cmake b/cmake/Cuda.cmake
index 42a94e5a..07fa1378 100644
--- a/cmake/Cuda.cmake
+++ b/cmake/Cuda.cmake
@@ -194,6 +194,7 @@ endfunction()
################################################################################################
find_package(CUDA 5.5 QUIET)
+find_cuda_helper_libs(curand) # cmake 2.8.7 compartibility which doesn't search for curand
if(NOT CUDA_FOUND)
return()
@@ -241,3 +242,13 @@ endif()
mark_as_advanced(CUDA_BUILD_CUBIN CUDA_BUILD_EMULATION CUDA_VERBOSE_BUILD)
mark_as_advanced(CUDA_SDK_ROOT_DIR CUDA_SEPARABLE_COMPILATION)
+# Handle clang/libc++ issue
+if(APPLE)
+ caffe_detect_darwin_version(OSX_VERSION)
+
+ # OSX 10.9 and higher uses clang/libc++ by default which is incompartible with old CUDA toolkits
+ if(OSX_VERSION VERSION_GREATER 10.8)
+ # enabled by default if and only if CUDA version is less than 7.0
+ caffe_option(USE_libstdcpp "Use libstdc++ instead of libc++" (CUDA_VERSION VERSION_LESS 7.0))
+ endif()
+endif()
diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
index 5de435c3..aa2dcbe1 100644
--- a/cmake/Dependencies.cmake
+++ b/cmake/Dependencies.cmake
@@ -68,7 +68,7 @@ message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})")
# ---[ BLAS
if(NOT APPLE)
set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
- set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MLK")
+ set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas")
find_package(Atlas REQUIRED)
@@ -78,10 +78,11 @@ if(NOT APPLE)
find_package(OpenBLAS REQUIRED)
include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIR})
list(APPEND Caffe_LINKER_LIBS ${OpenBLAS_LIB})
- elseif(BLAS STREQUAL "MLK" OR BLAS STREQUAL "mkl")
+ elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
find_package(MKL REQUIRED)
include_directories(SYSTEM ${MKL_INCLUDE_DIR})
list(APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES})
+ add_definitions(-DUSE_MKL)
endif()
elseif(APPLE)
find_package(vecLib REQUIRED)
diff --git a/cmake/Misc.cmake b/cmake/Misc.cmake
index 68e8a662..14eaeb0a 100644
--- a/cmake/Misc.cmake
+++ b/cmake/Misc.cmake
@@ -34,8 +34,8 @@ set(CMAKE_MACOSX_RPATH TRUE)
# ---[ Funny target
if(UNIX OR APPLE)
- add_custom_target(simlink_to_build COMMAND "ln" "-sf" "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/build"
- COMMENT "Adding simlink: <caffe_root>/build -> ${CMAKE_BINARY_DIR}" )
+ add_custom_target(symlink_to_build COMMAND "ln" "-sf" "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/build"
+ COMMENT "Adding symlink: <caffe_root>/build -> ${CMAKE_BINARY_DIR}" )
endif()
# ---[ Set debug postfix
diff --git a/cmake/Modules/FindMKL.cmake b/cmake/Modules/FindMKL.cmake
index eb2d9f88..d2012db5 100644
--- a/cmake/Modules/FindMKL.cmake
+++ b/cmake/Modules/FindMKL.cmake
@@ -1,113 +1,110 @@
-# - Find Intel MKL
# Find the MKL libraries
#
# Options:
#
-# MKL_STATAIC : use static linking
-# MKL_MULTI_THREADED: use multi-threading
-# MKL_SDL : Single Dynamic Library interface
+# MKL_USE_SINGLE_DYNAMIC_LIBRARY : use single dynamic library interface
+# MKL_USE_STATIC_LIBS : use static libraries
+# MKL_MULTI_THREADED : use multi-threading
#
# This module defines the following variables:
#
-# MKL_FOUND : True if MKL_INCLUDE_DIR are found
-# MKL_INCLUDE_DIR : where to find mkl.h, etc.
-# MKL_INCLUDE_DIRS : set when MKL_INCLUDE_DIR found
-# MKL_LIBRARIES : the library to link against.
+# MKL_FOUND : True mkl is found
+# MKL_INCLUDE_DIR : unclude directory
+# MKL_LIBRARIES : the libraries to link against.
-include(FindPackageHandleStandardArgs)
+# ---[ Options
+caffe_option(MKL_USE_SINGLE_DYNAMIC_LIBRARY "Use single dynamic library interface" ON)
+caffe_option(MKL_USE_STATIC_LIBS "Use static libraries" OFF IF NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+caffe_option(MKL_MULTI_THREADED "Use multi-threading" ON IF NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+# ---[ Root folders
set(INTEL_ROOT "/opt/intel" CACHE PATH "Folder contains intel libs")
-set(MKL_ROOT ${INTEL_ROOT}/mkl CACHE PATH "Folder contains MKL")
-
-# Find include dir
-find_path(MKL_INCLUDE_DIR mkl.h
- PATHS ${MKL_ROOT}/include)
-
-# Find include directory
-# There is no include folder under linux
-if(WIN32)
- find_path(INTEL_INCLUDE_DIR omp.h
- PATHS ${INTEL_ROOT}/include)
- set(MKL_INCLUDE_DIR ${MKL_INCLUDE_DIR} ${INTEL_INCLUDE_DIR})
-endif()
+find_path(MKL_ROOT include/mkl.h PATHS $ENV{MKL_ROOT} ${INTEL_ROOT}/mkl
+ DOC "Folder contains MKL")
-# Find libraries
+# ---[ Find include dir
+find_path(MKL_INCLUDE_DIR mkl.h PATHS ${MKL_ROOT} PATH_SUFFIXES include)
+set(__looked_for MKL_INCLUDE_DIR)
-# Handle suffix
-set(_MKL_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+# ---[ Find libraries
+if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ set(__path_suffixes lib lib/ia32)
+else()
+ set(__path_suffixes lib lib/intel64)
+endif()
-if(WIN32)
- if(MKL_STATAIC)
- set(CMAKE_FIND_LIBRARY_SUFFIXES .lib)
- else()
- set(CMAKE_FIND_LIBRARY_SUFFIXES _dll.lib)
- endif()
+set(__mkl_libs "")
+if(MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+ list(APPEND __mkl_libs rt)
else()
- if(MKL_STATAIC)
- set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ if(WIN32)
+ list(APPEND __mkl_libs intel_c)
else()
- set(CMAKE_FIND_LIBRARY_SUFFIXES .so)
+ list(APPEND __mkl_libs intel gf)
endif()
+ else()
+ list(APPEND __mkl_libs intel_lp64 gf_lp64)
+ endif()
+
+ if(MKL_MULTI_THREADED)
+ list(APPEND __mkl_libs intel_thread)
+ else()
+ list(APPEND __mkl_libs sequential)
+ endif()
+
+ list(APPEND __mkl_libs core cdft_core)
endif()
-# MKL is composed by four layers: Interface, Threading, Computational and RTL
+foreach (__lib ${__mkl_libs})
+ set(__mkl_lib "mkl_${__lib}")
+ string(TOUPPER ${__mkl_lib} __mkl_lib_upper)
-if(MKL_SDL)
- find_library(MKL_LIBRARY mkl_rt
- PATHS ${MKL_ROOT}/lib/ia32/)
+ if(MKL_USE_STATIC_LIBS)
+ set(__mkl_lib "lib${__mkl_lib}.a")
+ endif()
- set(MKL_MINIMAL_LIBRARY ${MKL_LIBRARY})
-else()
- ######################### Interface layer #######################
- if(WIN32)
- set(MKL_INTERFACE_LIBNAME mkl_intel_c)
- else()
- set(MKL_INTERFACE_LIBNAME mkl_intel)
- endif()
+ find_library(${__mkl_lib_upper}_LIBRARY
+ NAMES ${__mkl_lib}
+ PATHS ${MKL_ROOT} "${MKL_INCLUDE_DIR}/.."
+ PATH_SUFFIXES ${__path_suffixes}
+ DOC "The path to Intel(R) MKL ${__mkl_lib} library")
+ mark_as_advanced(${__mkl_lib_upper}_LIBRARY)
- find_library(MKL_INTERFACE_LIBRARY ${MKL_INTERFACE_LIBNAME}
- PATHS ${MKL_ROOT}/lib/ia32/)
+ list(APPEND __looked_for ${__mkl_lib_upper}_LIBRARY)
+ list(APPEND MKL_LIBRARIES ${${__mkl_lib_upper}_LIBRARY})
+endforeach()
- ######################## Threading layer ########################
- if(MKL_MULTI_THREADED)
- set(MKL_THREADING_LIBNAME mkl_intel_thread)
- else()
- set(MKL_THREADING_LIBNAME mkl_sequential)
- endif()
- find_library(MKL_THREADING_LIBRARY ${MKL_THREADING_LIBNAME}
- PATHS ${MKL_ROOT}/lib/ia32/)
+if(NOT MKL_USE_SINGLE_DYNAMIC_LIBRARY)
+ if (MKL_USE_STATIC_LIBS)
+ set(__iomp5_libs iomp5 libiomp5mt.lib)
+ else()
+ set(__iomp5_libs iomp5 libiomp5md.lib)
+ endif()
- ####################### Computational layer #####################
- find_library(MKL_CORE_LIBRARY mkl_core
- PATHS ${MKL_ROOT}/lib/ia32/)
- find_library(MKL_FFT_LIBRARY mkl_cdft_core
- PATHS ${MKL_ROOT}/lib/ia32/)
- find_library(MKL_SCALAPACK_LIBRARY mkl_scalapack_core
- PATHS ${MKL_ROOT}/lib/ia32/)
+ if(WIN32)
+ find_path(INTEL_INCLUDE_DIR omp.h PATHS ${INTEL_ROOT} PATH_SUFFIXES include)
+ list(APPEND __looked_for INTEL_INCLUDE_DIR)
+ endif()
- ############################ RTL layer ##########################
- if(WIN32)
- set(MKL_RTL_LIBNAME libiomp5md)
- else()
- set(MKL_RTL_LIBNAME libiomp5)
- endif()
- find_library(MKL_RTL_LIBRARY ${MKL_RTL_LIBNAME}
- PATHS ${INTEL_RTL_ROOT}/lib)
+ find_library(MKL_RTL_LIBRARY ${__iomp5_libs}
+ PATHS ${INTEL_RTL_ROOT} ${INTEL_ROOT}/compiler ${MKL_ROOT}/.. ${MKL_ROOT}/../compiler
+ PATH_SUFFIXES ${__path_suffixes}
+ DOC "Path to Path to OpenMP runtime library")
- set(MKL_LIBRARY ${MKL_INTERFACE_LIBRARY} ${MKL_THREADING_LIBRARY} ${MKL_CORE_LIBRARY} ${MKL_FFT_LIBRARY} ${MKL_SCALAPACK_LIBRARY} ${MKL_RTL_LIBRARY})
- set(MKL_MINIMAL_LIBRARY ${MKL_INTERFACE_LIBRARY} ${MKL_THREADING_LIBRARY} ${MKL_CORE_LIBRARY} ${MKL_RTL_LIBRARY})
+ list(APPEND __looked_for MKL_RTL_LIBRARY)
+ list(APPEND MKL_LIBRARIES ${MKL_RTL_LIBRARY})
endif()
-set(CMAKE_FIND_LIBRARY_SUFFIXES ${_MKL_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
-find_package_handle_standard_args(MKL DEFAULT_MSG
- MKL_INCLUDE_DIR MKL_LIBRARY MKL_MINIMAL_LIBRARY)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MKL DEFAULT_MSG ${__looked_for})
if(MKL_FOUND)
- set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR})
- set(MKL_LIBRARIES ${MKL_LIBRARY})
- set(MKL_MINIMAL_LIBRARIES ${MKL_LIBRARY})
+ message(STATUS "Found MKL (include: ${MKL_INCLUDE_DIR}, lib: ${MKL_LIBRARIES}")
endif()
+
+caffe_clear_vars(__looked_for __mkl_libs __path_suffixes __lib_suffix __iomp5_libs)
diff --git a/cmake/Targets.cmake b/cmake/Targets.cmake
index 84a2aaf5..3b254ad3 100644
--- a/cmake/Targets.cmake
+++ b/cmake/Targets.cmake
@@ -140,8 +140,7 @@ function(caffe_configure_testdatafile file)
set(result "")
foreach(line ${__lines})
set(result "${result}${CMAKE_SOURCE_DIR}/${line}\n")
- endforeach()
- dmsg(${result})
+ endforeach()
file(WRITE ${file}.gen.cmake ${result})
endfunction()
diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake
index 048123db..a56c7c30 100644
--- a/cmake/Utils.cmake
+++ b/cmake/Utils.cmake
@@ -363,3 +363,19 @@ function(caffe_parse_linker_libs Caffe_LINKER_LIBS_variable folders_var flags_va
set(${flags_var} ${libflags} PARENT_SCOPE)
set(${frameworks_var} ${__framework} PARENT_SCOPE)
endfunction()
+
+################################################################################################
+# Helper function to detect Darwin version, i.e. 10.8, 10.9, 10.10, ....
+# Usage:
+# caffe_detect_darwin_version(<version_variable>)
+function(caffe_detect_darwin_version output_var)
+ if(APPLE)
+ execute_process(COMMAND /usr/bin/sw_vers -productVersion
+ RESULT_VARIABLE __sw_vers OUTPUT_VARIABLE __sw_vers_out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ set(${output_var} ${__sw_vers_out} PARENT_SCOPE)
+ else()
+ set(${output_var} "" PARENT_SCOPE)
+ endif()
+endfunction()