diff options
author | Anatoly Baksheev <no@email> | 2015-02-01 17:45:31 +0300 |
---|---|---|
committer | Evan Shelhamer <shelhamer@imaginarynumber.net> | 2015-02-16 20:48:41 -0800 |
commit | aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21 (patch) | |
tree | 119681b184cd92799a2b5aa223e0d64cf8f8e413 /cmake | |
parent | c0ae656c0e80e721fec89b63e2cdc390e440d625 (diff) | |
download | caffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.tar.gz caffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.tar.bz2 caffeonacl-aea5dd674adbccf9927869f5e9ba9e2dfc2cbf21.zip |
cmake 2.8.7. support
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/ConfigGen.cmake | 11 | ||||
-rw-r--r-- | cmake/Cuda.cmake | 11 | ||||
-rw-r--r-- | cmake/Dependencies.cmake | 5 | ||||
-rw-r--r-- | cmake/Misc.cmake | 4 | ||||
-rw-r--r-- | cmake/Modules/FindMKL.cmake | 155 | ||||
-rw-r--r-- | cmake/Targets.cmake | 3 | ||||
-rw-r--r-- | cmake/Utils.cmake | 16 |
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() |