CMakeLists.txt 6.0 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 56
  endif()
  set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
D
dzhwinter 已提交
57
else()
D
dzhwinter 已提交
58 59
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  set(CMAKE_STATIC_LIBRARY_PREFIX "")
D
dzhwinter 已提交
60
endif()
D
dzhwinter 已提交
61
message("flags" ${CMAKE_CXX_FLAGS})
62

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

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

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

90 91
if(WITH_MKL)
  include_directories("${PADDLE_LIB}/third_party/install/mklml/include")
P
peizhilin 已提交
92 93 94
  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})
95
  else()
P
peizhilin 已提交
96 97
    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})
98
  endif()
99 100 101
  set(MKLDNN_PATH "${PADDLE_LIB}/third_party/install/mkldnn")
  if(EXISTS ${MKLDNN_PATH})
    include_directories("${MKLDNN_PATH}/include")
P
peizhilin 已提交
102 103 104 105 106
    if(WIN32)
      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib)
    else(WIN32)
      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0)
    endif(WIN32)
107 108
  endif()
else()
D
dzhwinter 已提交
109
  set(MATH_LIB ${PADDLE_LIB}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX})
110 111
endif()

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

D
dzhwinter 已提交
119
if (NOT WIN32)
P
peizhilin 已提交
120 121 122 123 124
  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 已提交
125
else()
P
peizhilin 已提交
126 127 128 129 130 131 132
  set(DEPS ${DEPS}
      ${MATH_LIB} ${MKLDNN_LIB}
      ${CMAKE_STATIC_LIBRARY_PREFIX}glog  ${CMAKE_STATIC_LIBRARY_PREFIX}gflags  ${CMAKE_STATIC_LIBRARY_PREFIX}protobuf
      ${CMAKE_STATIC_LIBRARY_PREFIX}snappy ${CMAKE_STATIC_LIBRARY_PREFIX}z ${CMAKE_STATIC_LIBRARY_PREFIX}xxhash
      snappystream ${EXTERNAL_LIB})
  # NOTE(dzhwinter) shlwapi is deprecated.
  set(DEPS ${DEPS} libcmt shlwapi)
D
dzhwinter 已提交
133 134
endif(NOT WIN32)

135
if(WITH_GPU)
D
dzhwinter 已提交
136
  if(NOT WIN32)
M
minqiyang 已提交
137
    if (USE_TENSORRT)
N
nhzlx 已提交
138 139 140
      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 已提交
141 142
    set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
  else()
D
dzhwinter 已提交
143
    set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
P
peizhilin 已提交
144 145
    set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
    set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX} )
D
dzhwinter 已提交
146
  endif()
147 148
endif()

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