CMakeLists.txt 5.7 KB
Newer Older
1 2
cmake_minimum_required(VERSION 3.0)
project(cpp_inference_demo CXX C)
D
dzhwinter 已提交
3 4 5
option(WITH_MKL        "Compile demo with MKL/OpenBlas support, default use MKL."       ON)
option(WITH_GPU        "Compile demo with GPU/CPU, default use CPU."                    OFF)
option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   ON)
N
nhzlx 已提交
6
option(USE_TENSORRT "Compile demo with TensorRT."   OFF)
D
dzhwinter 已提交
7 8

macro(safe_set_static_flag)
9 10 11 12 13 14 15
    foreach(flag_var
        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
      if(${flag_var} MATCHES "/MD")
        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
      endif(${flag_var} MATCHES "/MD")
    endforeach(flag_var)
D
dzhwinter 已提交
16
endmacro()
17

P
peizhilin 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
if(NOT DEFINED PADDLE_LIB)
  message(FATAL_ERROR "please set PADDLE_LIB with -DPADDLE_LIB=/path/paddle/lib")
endif()
if(NOT DEFINED DEMO_NAME)
  message(FATAL_ERROR "please set DEMO_NAME with -DDEMO_NAME=demo_name")
endif()

include_directories("${PADDLE_LIB}/")
include_directories("${PADDLE_LIB}/fluid_inference_install_dir/")
include_directories("${PADDLE_LIB}/third_party/install/protobuf/include")
include_directories("${PADDLE_LIB}/third_party/install/glog/include")
include_directories("${PADDLE_LIB}/third_party/install/gflags/include")
include_directories("${PADDLE_LIB}/third_party/install/xxhash/include")
include_directories("${PADDLE_LIB}/third_party/install/snappy/include")
include_directories("${PADDLE_LIB}/third_party/install/snappystream/include")
include_directories("${PADDLE_LIB}/third_party/install/zlib/include")
include_directories("${PADDLE_LIB}/third_party/boost")
include_directories("${PADDLE_LIB}/third_party/eigen3")

link_directories("${PADDLE_LIB}/third_party/install/snappy/lib")
link_directories("${PADDLE_LIB}/third_party/install/snappystream/lib")
link_directories("${PADDLE_LIB}/third_party/install/zlib/lib")
link_directories("${PADDLE_LIB}/third_party/install/protobuf/lib")
link_directories("${PADDLE_LIB}/third_party/install/glog/lib")
link_directories("${PADDLE_LIB}/third_party/install/gflags/lib")
link_directories("${PADDLE_LIB}/third_party/install/xxhash/lib")
link_directories("${PADDLE_LIB}/paddle/lib")

D
dzhwinter 已提交
46
if (WIN32)
P
peizhilin 已提交
47 48 49 50 51
  add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
  set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
  set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
  set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
  set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
D
dzhwinter 已提交
52 53
  if (WITH_STATIC_LIB)
    safe_set_static_flag()
D
dzhwinter 已提交
54
    add_definitions(-DSTATIC_LIB)
D
dzhwinter 已提交
55
  endif()
D
dzhwinter 已提交
56
else()
D
dzhwinter 已提交
57
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
D
dzhwinter 已提交
58
endif()
D
dzhwinter 已提交
59
message("flags" ${CMAKE_CXX_FLAGS})
60

61
if(WITH_GPU)
D
dzhwinter 已提交
62 63 64 65
  if(NOT WIN32)
    set(CUDA_LIB "/usr/local/cuda/lib64/" CACHE STRING "CUDA Library")
  else()
    if(CUDA_LIB STREQUAL "")
P
peizhilin 已提交
66
      set(CUDA_LIB "C:\\Program\ Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0\\lib\\x64")
D
dzhwinter 已提交
67 68
    endif()
  endif(NOT WIN32)
69 70
endif()

M
minqiyang 已提交
71 72
if (NOT WIN32)
  if (USE_TENSORRT AND WITH_GPU)
73 74
      include_directories("${TENSORRT_INCLUDE_DIR}")
      link_directories("${TENSORRT_LIB_DIR}")
N
nhzlx 已提交
75
  endif()
N
nhzlx 已提交
76 77
endif(NOT WIN32)

78 79 80
if (NOT WIN32)
    set(NGRAPH_PATH "${PADDLE_LIB}/third_party/install/ngraph")
    if(EXISTS ${NGRAPH_PATH})
S
Sang Ik Lee 已提交
81
        include(GNUInstallDirs)
82
        include_directories("${NGRAPH_PATH}/include")
S
Sang Ik Lee 已提交
83 84
        link_directories("${NGRAPH_PATH}/${CMAKE_INSTALL_LIBDIR}")
        set(NGRAPH_LIB ${NGRAPH_PATH}/${CMAKE_INSTALL_LIBDIR}/libngraph${CMAKE_SHARED_LIBRARY_SUFFIX})
85 86 87
    endif()
endif()

88 89
if(WITH_MKL)
  include_directories("${PADDLE_LIB}/third_party/install/mklml/include")
P
peizhilin 已提交
90 91 92
  if(NOT WIN32)
    set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX}
                 ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX})
93
  else()
P
peizhilin 已提交
94 95
    set(MATH_LIB ${PADDLE_LIB}/third_party/install/mklml/lib/libmklml${CMAKE_SHARED_LIBRARY_SUFFIX}
            ${PADDLE_LIB}/third_party/install/mklml/lib/libiomp5md${CMAKE_SHARED_LIBRARY_SUFFIX})
96
  endif()
97 98 99
  set(MKLDNN_PATH "${PADDLE_LIB}/third_party/install/mkldnn")
  if(EXISTS ${MKLDNN_PATH})
    include_directories("${MKLDNN_PATH}/include")
P
peizhilin 已提交
100 101 102 103 104
    if(WIN32)
      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib)
    else(WIN32)
      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0)
    endif(WIN32)
105 106
  endif()
else()
D
dzhwinter 已提交
107
  set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX})
108 109
endif()

110
# Note: libpaddle_inference_api.so/a must put before libpaddle_fluid.so/a
L
Luo Tao 已提交
111
if(WITH_STATIC_LIB)
P
peizhilin 已提交
112
  set(DEPS ${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
L
Luo Tao 已提交
113
else()
P
peizhilin 已提交
114
  set(DEPS ${PADDLE_LIB}/paddle/lib/libpaddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX})
L
Luo Tao 已提交
115
endif()
116

D
dzhwinter 已提交
117
if (NOT WIN32)
P
peizhilin 已提交
118 119 120 121 122
  set(EXTERNAL_LIB "-lrt -ldl -lpthread")
  set(DEPS ${DEPS}
      ${MATH_LIB} ${MKLDNN_LIB} ${NGRAPH_LIB}
      glog gflags protobuf snappystream snappy z xxhash
      ${EXTERNAL_LIB})
D
dzhwinter 已提交
123
else()
P
peizhilin 已提交
124 125
  set(DEPS ${DEPS}
      ${MATH_LIB} ${MKLDNN_LIB}
126 127
      glog gflags_static protobuf snappy zlibstatic xxhash snappystream ${EXTERNAL_LIB})
  set(DEPS ${DEPS} libcmt shlwapi.lib)
D
dzhwinter 已提交
128 129
endif(NOT WIN32)

130
if(WITH_GPU)
D
dzhwinter 已提交
131
  if(NOT WIN32)
M
minqiyang 已提交
132
    if (USE_TENSORRT)
N
nhzlx 已提交
133 134 135
      set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
      set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
    endif()
D
dzhwinter 已提交
136 137
    set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
  else()
D
dzhwinter 已提交
138
    set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
P
peizhilin 已提交
139 140
    set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
    set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX} )
D
dzhwinter 已提交
141
  endif()
142 143
endif()

P
peizhilin 已提交
144
add_executable(${DEMO_NAME} ${DEMO_NAME}.cc)
D
dzhwinter 已提交
145
target_link_libraries(${DEMO_NAME} ${DEPS})