CMakeLists.txt 5.0 KB
Newer Older
Z
zhangjinchao01 已提交
1 2 3 4 5 6 7
cmake_minimum_required(VERSION 2.8)

project(paddle CXX C)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
set(PROJ_ROOT ${CMAKE_SOURCE_DIR})
include(package)
B
backyes 已提交
8
find_package(SWIG 2.0)
Z
zhangjinchao01 已提交
9 10
find_package(CUDA QUIET)
find_package(Protobuf REQUIRED)
11 12 13

# Check protobuf library version.
execute_process(COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --version
L
liaogang 已提交
14
    OUTPUT_VARIABLE PROTOBUF_VERSION)
15 16 17 18 19 20 21
string(REPLACE "libprotoc " "" PROTOBUF_VERSION ${PROTOBUF_VERSION})

set(PROTOBUF_3 OFF)
if (${PROTOBUF_VERSION} VERSION_GREATER "3.0.0" OR ${PROTOBUF_VERSION} VERSION_EQUAL "3.0.0")
    set(PROTOBUF_3 ON)
endif()

Z
zhangjinchao01 已提交
22 23
find_package(PythonLibs 2.7 REQUIRED)
find_package(PythonInterp 2.7 REQUIRED)
Y
Yu Yang 已提交
24 25
find_package(ZLIB REQUIRED)
find_package(NumPy REQUIRED)
Z
zhangjinchao01 已提交
26
find_package(Threads REQUIRED)
27
find_package(AVX QUIET)
28
find_package(Glog REQUIRED)
Y
Stash  
Yu Yang 已提交
29
find_package(Gflags COMPONENTS nothreads_static REQUIRED)
Z
zhangjinchao01 已提交
30 31 32 33 34 35 36 37 38
find_package(GTest)
find_package(Sphinx)
find_package(Doxygen)
include(cblas)
find_program(M4_EXECUTABLE m4)
###################### Configurations ###########################
option(WITH_DSO "Compile PaddlePaddle with dynamic linked libraries" ON)
option(WITH_GPU "Compile PaddlePaddle with gpu" ${CUDA_FOUND})
option(WITH_DOUBLE "Compile PaddlePaddle with double precision, otherwise use single precision" OFF)
39
option(WITH_AVX "Compile PaddlePaddle with avx intrinsics" ${AVX_FOUND})
L
liaogang 已提交
40
option(WITH_PYTHON "Compile PaddlePaddle with python interpreter" ON)
Z
zhangjinchao01 已提交
41 42 43
option(WITH_STYLE_CHECK "Style Check for PaddlePaddle" ${PYTHONINTERP_FOUND})
option(WITH_RDMA "Compile PaddlePaddle with rdma support" OFF)
option(WITH_TIMER "Compile PaddlePaddle use timer" OFF)
L
liaogang 已提交
44
option(WITH_PROFILER "Compile PaddlePaddle use gpu profiler" OFF)
Z
zhangjinchao01 已提交
45 46
option(WITH_TESTING "Compile and run unittest for PaddlePaddle" ${GTEST_FOUND})
option(WITH_DOC "Compile PaddlePaddle with documentation" OFF)
L
liaogang 已提交
47
option(WITH_SWIG_PY "Compile PaddlePaddle with py PaddlePaddle prediction api" ${SWIG_FOUND})
Y
Yu Yang 已提交
48
option(ON_TRAVIS "Running test on travis-ci or not." OFF)
G
gangliao 已提交
49 50 51
option(ON_COVERALLS "Generating code coverage data on coveralls or not." OFF)
option(COVERALLS_UPLOAD "Uploading the generated coveralls json." ON)

Z
zhangjinchao01 已提交
52 53 54

include(cpplint)
include(ccache)
B
backyes 已提交
55 56 57
if(WITH_RDMA)
  include(rdma)
endif()
Z
zhangjinchao01 已提交
58 59 60 61 62
include(util)
include(flags)
include(cudnn)
include(FindPythonModule)
include(check_packages)
B
backyes 已提交
63
include(swig)
G
gangliao 已提交
64
include(coveralls)
Z
zhangjinchao01 已提交
65

66 67
# Set PaddlePaddle version to Git tag name or Git commit ID.
find_package(Git REQUIRED)
Y
Yu Yang 已提交
68 69
# version.cmake will get the current PADDLE_VERSION
include(version)
F
FoREacH 已提交
70
add_definitions(-DPADDLE_VERSION=${PADDLE_VERSION})
Z
zhangjinchao01 已提交
71 72 73 74

if(NOT WITH_GPU)
    add_definitions(-DPADDLE_ONLY_CPU)
    add_definitions(-DHPPL_STUB_FUNC)
75

Z
zhangjinchao01 已提交
76 77
    list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu)
else()
L
liaogang 已提交
78 79
    if(${CUDA_VERSION_MAJOR} VERSION_LESS 7)
        message(FATAL_ERROR "Paddle need CUDA >= 7.0 to compile")
H
hedaoyuan 已提交
80 81
    endif()

Z
zhangjinchao01 已提交
82 83 84
    if(NOT CUDNN_FOUND)
        message(FATAL_ERROR "Paddle need cudnn to compile")
    endif()
H
hedaoyuan 已提交
85 86

    if(WITH_AVX)
G
gangliao 已提交
87
        set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${AVX_FLAG}")
H
hedaoyuan 已提交
88
    else(WITH_AVX)
G
gangliao 已提交
89
        set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${SSE3_FLAG}")
H
hedaoyuan 已提交
90
    endif(WITH_AVX)
Z
zhangjinchao01 已提交
91 92 93 94 95 96

    # Include cuda and cudnn
    include_directories(${CUDNN_INCLUDE_DIR})
    include_directories(${CUDA_TOOLKIT_INCLUDE})
endif(NOT WITH_GPU)

97 98 99 100
if(WITH_DSO)
    add_definitions(-DPADDLE_USE_DSO)
endif(WITH_DSO)

Z
zhangjinchao01 已提交
101
if(WITH_DOUBLE)
102
    add_definitions(-DPADDLE_TYPE_DOUBLE)
Z
zhangjinchao01 已提交
103 104 105 106 107 108 109 110 111
    set(ACCURACY double)
else(WITH_DOUBLE)
    set(ACCURACY float)
endif(WITH_DOUBLE)

if(NOT WITH_TIMER)
    add_definitions(-DPADDLE_DISABLE_TIMER)
endif(NOT WITH_TIMER)

L
liaogang 已提交
112 113 114 115
if(NOT WITH_PROFILER)
    add_definitions(-DPADDLE_DISABLE_PROFILER)
endif(NOT WITH_PROFILER)

Z
zhangjinchao01 已提交
116
if(WITH_AVX)
G
gangliao 已提交
117 118
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${AVX_FLAG}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${AVX_FLAG}")
Z
zhangjinchao01 已提交
119
else(WITH_AVX)
G
gangliao 已提交
120 121
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SSE3_FLAG}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SSE3_FLAG}")
Z
zhangjinchao01 已提交
122 123 124 125 126 127 128 129 130
endif(WITH_AVX)

if(WITH_PYTHON)
    include_directories(${PYTHON_INCLUDE_DIR})
    include_directories(${PYTHON_NUMPY_INCLUDE_DIR})
else(WITH_PYTHON)
    add_definitions(-DPADDLE_NO_PYTHON)
endif(WITH_PYTHON)

B
backyes 已提交
131 132 133 134 135
if(WITH_RDMA)
  include_directories("${RDMA_INC_DIR}")
else(WITH_RDMA)
  add_definitions(-DPADDLE_DISABLE_RDMA)
endif(WITH_RDMA)
Z
zhangjinchao01 已提交
136

137 138
# glog
include_directories(${LIBGLOG_INCLUDE_DIR})
Z
zhangjinchao01 已提交
139

140 141 142
#gflags
add_definitions(-DGFLAGS_NS=${GFLAGS_NAMESPACE})
include_directories(${GFLAGS_INCLUDE_DIRS})
Z
zhangjinchao01 已提交
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

if(WITH_TESTING)
    enable_testing()
    include_directories(${GTEST_INCLUDE_DIRS})
endif()

include_directories("${CBLAS_INC_DIR}")
include_directories("${PROJ_ROOT}")
include_directories("${PROJ_ROOT}/paddle/cuda/include")
include_directories(${PROTOBUF_INCLUDE_DIRS})
include_directories("${CMAKE_CURRENT_BINARY_DIR}/proto")
if(EXISTS "${PROJ_ROOT}/paddle/internals/CMakeLists.txt")
    set(PADDLE_WITH_INTERNAL ON)
    include(paddle/internals/CMakeLists.txt)
else()
    set(PADDLE_WITH_INTERNAL OFF)
    set(INTERNAL_PROTO_PATH "")
endif()
add_subdirectory(proto)
add_subdirectory(paddle)
add_subdirectory(python)
if(WITH_DOC)
    add_subdirectory(doc)
endif()