From e3e27862999d1070c3a438275af5c7d5d9857c8b Mon Sep 17 00:00:00 2001 From: Anatoly Baksheev Date: Fri, 2 Jan 2015 17:58:07 +0300 Subject: [PATCH] added Yosemite support --- CMakeLists.txt | 9 +++++++- cmake/Cuda.cmake | 4 ++++ cmake/Dependencies.cmake | 42 +++++++++++++++++----------------- cmake/Modules/FindvecLib.cmake | 34 +++++++++++++++++++++++++++ cmake/Summary.cmake | 2 +- matlab/CMakeLists.txt | 7 +++++- python/CMakeLists.txt | 2 +- 7 files changed, 75 insertions(+), 25 deletions(-) create mode 100644 cmake/Modules/FindvecLib.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 317a449db55..d499fd288ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,17 +28,24 @@ if(UNIX OR APLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") endif() +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") +endif() + +add_definitions(-DGTEST_USE_OWN_TR1_TUPLE) + # ---[ Warnings caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized) # ---[ Config generation configure_file(cmake/Templates/caffe_config.h.in "${CMAKE_BINARY_DIR}/caffe_config.h") -# ---[ Subdirectories +# ---[ Includes set(Caffe_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) include_directories(${Caffe_INCLUDE_DIR} ${CMAKE_BINARY_DIR}) include_directories(BEFORE src) # This is needed for gtest. Ugly code layout! +# ---[ Subdirectories add_subdirectory(src/gtest) add_subdirectory(src/caffe) add_subdirectory(tools) diff --git a/cmake/Cuda.cmake b/cmake/Cuda.cmake index d20adbfad95..42a94e5a295 100644 --- a/cmake/Cuda.cmake +++ b/cmake/Cuda.cmake @@ -148,6 +148,10 @@ macro(caffe_cuda_compile objlist_variable) list(APPEND CUDA_NVCC_FLAGS -Xcompiler -fPIC) endif() + if(APPLE) + list(APPEND CUDA_NVCC_FLAGS -Xcompiler -Wno-unused-function) + endif() + cuda_compile(cuda_objcs ${ARGN}) foreach(var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG) diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index a24df8527fa..905da4aedc0 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -66,27 +66,27 @@ list(APPEND Caffe_LINKER_LIBS ${OpenCV_LIBS}) message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})") # ---[ BLAS -set(BLAS "Atlas" CACHE STRING "Selected BLAS library") -set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MLK") - -if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas") - - find_package(Atlas REQUIRED) - include_directories(SYSTEM ${Atlas_INCLUDE_DIR}) - list(APPEND Caffe_LINKER_LIBS ${Atlas_LIBRARIES}) - -elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open") - - 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") - - find_package(MKL REQUIRED) - include_directories(SYSTEM ${MKL_INCLUDE_DIR}) - list(APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES}) - +if(NOT APPLE) + set(BLAS "Atlas" CACHE STRING "Selected BLAS library") + set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MLK") + + if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas") + find_package(Atlas REQUIRED) + include_directories(SYSTEM ${Atlas_INCLUDE_DIR}) + list(APPEND Caffe_LINKER_LIBS ${Atlas_LIBRARIES}) + elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open") + 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") + find_package(MKL REQUIRED) + include_directories(SYSTEM ${MKL_INCLUDE_DIR}) + list(APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES}) + endif() +elseif(APPLE) + find_package(vecLib REQUIRED) + include_directories(SYSTEM ${vecLib_INCLUDE_DIR}) + list(APPEND Caffe_LINKER_LIBS ${vecLib_LINKER_LIBS}) endif() # ---[ Python diff --git a/cmake/Modules/FindvecLib.cmake b/cmake/Modules/FindvecLib.cmake new file mode 100644 index 00000000000..9600da43647 --- /dev/null +++ b/cmake/Modules/FindvecLib.cmake @@ -0,0 +1,34 @@ +# Find the vecLib libraries as part of Accelerate.framework or as standalon framework +# +# The following are set after configuration is done: +# VECLIB_FOUND +# vecLib_INCLUDE_DIR +# vecLib_LINKER_LIBS + + +if(NOT APPLE) + return() +endif() + +set(__veclib_include_suffix "Frameworks/vecLib.framework/Versions/Current/Headers") + +find_path(vecLib_INCLUDE_DIR vecLib.h + DOC "vecLib include directory" + PATHS /System/Library/${__veclib_include_suffix} + /System/Library/Frameworks/Accelerate.framework/Versions/Current/${__veclib_include_suffix} + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(vecLib DEFAULT_MSG vecLib_INCLUDE_DIR) + +if(VECLIB_FOUND) + if(vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*") + set(vecLib_LINKER_LIBS -lcblas "-framework vecLib") + message(STATUS "Found standalone vecLib.framework") + else() + set(vecLib_LINKER_LIBS -lcblas "-framework Accelerate") + message(STATUS "Found vecLib as part of Accelerate.framework") + endif() + + mark_as_advanced(vecLib_INCLUDE_DIR) +endif() diff --git a/cmake/Summary.cmake b/cmake/Summary.cmake index 76906de8664..b7318e2f8a6 100644 --- a/cmake/Summary.cmake +++ b/cmake/Summary.cmake @@ -110,6 +110,7 @@ function(caffe_print_configuration_summary) caffe_status(" CPU_ONLY : ${CPU_ONLY}") caffe_status("") caffe_status("Dependencies:") + caffe_status(" BLAS : " APPLE THEN "Yes (vecLib)" ELSE "Yes (${BLAS})") caffe_status(" glog : Yes") caffe_status(" gflags : Yes") caffe_status(" protobuf : " PROTOBUF_FOUND THEN "Yes (ver. ${PROTOBUF_VERSION})" ELSE "No" ) @@ -117,7 +118,6 @@ function(caffe_print_configuration_summary) caffe_status(" Snappy : " SNAPPY_FOUND THEN "Yes (ver. ${Snappy_VERSION})" ELSE "No" ) caffe_status(" LevelDB : " LEVELDB_FOUND THEN "Yes" ELSE "No") caffe_status(" OpenCV : Yes (ver. ${OpenCV_VERSION})") - caffe_status(" BLAS : Yes (${BLAS})") caffe_status(" CUDA : " HAVE_CUDA THEN "Yes (ver. ${CUDA_VERSION})" ELSE "No" ) caffe_status("") if(HAVE_CUDA) diff --git a/matlab/CMakeLists.txt b/matlab/CMakeLists.txt index 73739cb47c5..40d8729ae76 100644 --- a/matlab/CMakeLists.txt +++ b/matlab/CMakeLists.txt @@ -52,7 +52,12 @@ if(build_using MATCHES "Matlab") add_custom_target(matlab ALL DEPENDS ${Matlab_caffe_mex} SOURCES ${Matlab_srcs}) elseif(build_using MATCHES "Octave") - set(libflags -Wl,--whole-archive -lcaffe${CAffe_POSTFIX} -Wl,--no-whole-archive ${libflags}) + + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(libflags -Wl,-force_load,$ ${libflags}) + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set(libflags -Wl,--whole-archive -lcaffe${CAffe_POSTFIX} -Wl,--no-whole-archive ${libflags}) + endif() add_custom_command(OUTPUT ${Matlab_caffe_mex} COMMAND ${Octave_compiler} ARGS --mex -o ${Matlab_caffe_mex} ${Matlab_srcs} ${cflags} ${link_folders} ${libflags} -Wl,-rpath,${rpath_folders} diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index a22d82f155b..8c231729f08 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -8,7 +8,7 @@ file(GLOB_RECURSE python_srcs ${CMAKE_SOURCE_DIR}/python/*.cpp) add_library(pycaffe SHARED ${python_srcs}) target_link_libraries(pycaffe ${Caffe_STATIC_LINK} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES}) -set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe") +set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe" MACOSX_RPATH TRUE) caffe_default_properties(pycaffe) if(UNIX OR APPLE)