diff options
author | Anatoly Baksheev <no@email> | 2014-12-17 12:09:14 +0300 |
---|---|---|
committer | Evan Shelhamer <shelhamer@imaginarynumber.net> | 2015-02-16 20:48:16 -0800 |
commit | 9358247014eb8322160c7feaad46091412d75d3f (patch) | |
tree | c95feaba2700ce53350db6a0ac7a389cb5a20a60 /CMakeLists.txt | |
parent | 32bf5c7ad804ad683aa5ea9382209e9284451e5f (diff) | |
download | caffeonacl-9358247014eb8322160c7feaad46091412d75d3f.tar.gz caffeonacl-9358247014eb8322160c7feaad46091412d75d3f.tar.bz2 caffeonacl-9358247014eb8322160c7feaad46091412d75d3f.zip |
improve CMake build
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 199 |
1 files changed, 43 insertions, 156 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d6b08470..d3d50da2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,177 +1,64 @@ cmake_minimum_required(VERSION 2.8.8) -project( Caffe ) -### Build Options ########################################################################## +# ---[ Caffe project +project(Caffe C CXX) -option(CPU_ONLY "Build Caffe without GPU support" OFF) -option(BUILD_PYTHON "Build Python wrapper" OFF) -option(BUILD_MATLAB "Build Matlab wrapper" OFF) -option(BUILD_EXAMPLES "Build examples" ON) -option(BUILD_SHARED_LIBS "Build SHARED libs if ON and STATIC otherwise" OFF) +# ---[ Using cmake scripts and modules +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) -if(NOT BLAS) - set(BLAS atlas) -endif() +include(cmake/Utils.cmake) +include(cmake/Targets.cmake) +include(cmake/Misc.cmake) +include(cmake/Summary.cmake) +include(cmake/ConfigGen.cmake) -if(NOT CUDA_TEST_DEVICE) - set(CUDA_TEST_DEVICE -1) -endif() +# ---[ Options +caffe_option(CPU_ONLY "Build Caffe wihtout CUDA support" OFF) # TODO: rename to USE_CUDA +caffe_option(USE_CUDNN "Build Caffe with cuDNN libary support" ON IF NOT CPU_ONLY) +caffe_option(BUILD_SHARED_LIBS "Build shared libraries" ON) +caffe_option(BUILD_python "Build Python wrapper" ON) +caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE) +caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE) -# Install Prefix -if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Default install path" FORCE ) -endif() +# ---[ Dependencies +include(cmake/Dependencies.cmake) -### Configuration ########################################################################### -# Compiler Flags -set(CMAKE_CXX_COMPILER_FLAGS ${CMAKE_CXX_COMPILER_FLAGS} -Wall) -set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fPIC) # set global flags -set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) # set debug flags -set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) # set release flags - -# Link Flags -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # clang++ - set(CAFFE_STATIC_LINK -Wl,-force_load $(STATIC_NAME)) -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # g++ - set(CAFFE_STATIC_LINK -Wl,--whole-archive caffe -Wl,--no-whole-archive) +# ---[ Flags +if(UNIX OR APLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") endif() -# Global Definitions -if(CPU_ONLY) - add_definitions(-DCPU_ONLY) -endif() - -# Include Directories -set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include) -include_directories(${${PROJECT_NAME}_INCLUDE_DIRS}) -include_directories(${CMAKE_SOURCE_DIR}/src) - -# CMake Scripts dir -set(CMAKE_SCRIPT_DIR ${CMAKE_SOURCE_DIR}/CMakeScripts) - -# CMake module path for custom module finding -set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SCRIPT_DIR}) - -### Dependencies ########################################################################## - -# Boost -find_package(Boost 1.46 COMPONENTS system thread REQUIRED) -include_directories(${Boost_INCLUDE_DIR}) -link_directories(${Boost_LIBRARY_DIRS}) - -# CUDA -if(NOT CPU_ONLY) - find_package(CUDA 5.5 REQUIRED) - include_directories(${CUDA_INCLUDE_DIRS}) - - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} - -gencode arch=compute_20,code=sm_20 - -gencode arch=compute_20,code=sm_21 - -gencode arch=compute_30,code=sm_30 - -gencode arch=compute_35,code=sm_35 - ) - - # https://github.com/ComputationalRadiationPhysics/picongpu/blob/master/src/picongpu/CMakeLists.txt - # work-arounds - if(Boost_VERSION EQUAL 105500) - # see https://svn.boost.org/trac/boost/ticket/9392 - message(STATUS "Boost: Applying noinline work around") - # avoid warning for CMake >= 2.8.12 - set(CUDA_NVCC_FLAGS - "${CUDA_NVCC_FLAGS} \"-DBOOST_NOINLINE=__attribute__((noinline))\" ") - endif(Boost_VERSION EQUAL 105500) +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") endif() -# Threads -find_package(Threads REQUIRED) - -# Google-glog -find_package(Glog REQUIRED) -include_directories(${GLOG_INCLUDE_DIRS}) - -# Google-gflags -find_package(GFlags REQUIRED) -include_directories(${GFLAGS_INCLUDE_DIRS}) - -# BLAS -if(BLAS STREQUAL "atlas") - - find_package(Atlas REQUIRED) - include_directories(${Atlas_INCLUDE_DIR}) - set(BLAS_LIBRARIES ${Atlas_LIBRARIES}) - -elseif(BLAS STREQUAL "open") +add_definitions(-DGTEST_USE_OWN_TR1_TUPLE) - find_package(OpenBLAS REQUIRED) - include_directories(${OpenBLAS_INCLUDE_DIR}) - set(BLAS_LIBRARIES ${OpenBLAS_LIB}) +# ---[ Warnings +caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized) -elseif(BLAS STREQUAL "mkl") +# ---[ Config generation +configure_file(cmake/Templates/caffe_config.h.in "${CMAKE_BINARY_DIR}/caffe_config.h") - find_package(MKL REQUIRED) - include_directories(${MKL_INCLUDE_DIR}) - set(BLAS_LIBRARIES ${MKL_LIBRARIES}) - -endif() - -# HDF5 -find_package(HDF5 COMPONENTS HL REQUIRED) -include_directories(${HDF5_INCLUDE_DIRS}) - -# LevelDB -find_package(LevelDB REQUIRED) -include_directories(${LEVELDB_INCLUDE}) -if(LEVELDB_FOUND) - find_package(Snappy REQUIRED) - include_directories(${SNAPPY_INCLUDE_DIR}) - set(LEVELDB_LIBS - ${LEVELDB_LIBS} - ${SNAPPY_LIBS} - ) -endif() - -# LMDB -find_package(LMDB REQUIRED) -include_directories(${LMDB_INCLUDE_DIR}) - -# OpenCV -find_package(OpenCV REQUIRED) -include_directories(${OpenCV_INCLUDE_DIRS}) - -### 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. +# ---[ Subdirectories add_subdirectory(src/gtest) add_subdirectory(src/caffe) add_subdirectory(tools) +add_subdirectory(examples) +add_subdirectory(python) +add_subdirectory(matlab) +add_subdirectory(docs) -if(BUILD_EXAMPLES) - message(STATUS "Examples enabled") - add_subdirectory(examples) -endif() - -if(BUILD_PYTHON) - message(STATUS "Python enabled") - add_subdirectory(python) -endif() - -if(BUILD_MATLAB) - message(STATUS "Matlab enabled") - add_subdirectory(matlab) -endif() - -### Lint Target Setup ########################################################################## - -set(LINT_TARGET lint) -set(LINT_SCRIPT ${CMAKE_SCRIPT_DIR}/lint.cmake) -add_custom_target( - ${LINT_TARGET} - COMMAND ${CMAKE_COMMAND} -P ${LINT_SCRIPT} -) - -### Install ################################################################################# - -# Install Includes -file(GLOB folders ${${PROJECT_NAME}_INCLUDE_DIRS}/*) -install(DIRECTORY ${folders} DESTINATION include) +# ---[ Linter target +add_custom_target(lint COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/lint.cmake) +# ---[ Configuration summary +caffe_print_configuration_summary() +# ---[ Export configs generation +caffe_generate_export_configs() |