CMakeLists.txt 7.3 KB
Newer Older
H
hjchen2 已提交
1
cmake_minimum_required(VERSION 3.0.0)
H
hjchen2 已提交
2

H
hjchen2 已提交
3 4
option(USE_OPENMP    "build with openmp support" ON)
option(USE_EXCEPTION "build with exception" ON)
5
option(WITH_LOGGING  "print logging for debug" OFF)
H
hjchen2 已提交
6 7 8
option(WITH_SYMBOL   "build with all symbols" ON) # turn off if use jni or ios io
option(WITH_PROFILE  "print op profile for debug" OFF)
option(WITH_TEST     "build with unit tests" ON)
H
hjchen2 已提交
9

L
liuruilong 已提交
10
# select the platform to build
H
hjchen2 已提交
11 12 13
option(CPU        "build with arm CPU support" ON)
option(GPU_CL     "build with OpenCL support" OFF)
option(FPGA       "build with FPGA support" OFF)
Z
zhangyang 已提交
14
if(FPGA)
H
hjchen2 已提交
15 16
  option(FPGAV1     "build with fpga v1 support" ON)
  option(FPGAV2     "build with fpga v2 support" OFF)
Z
zhangyang 已提交
17
endif()
W
wangliu 已提交
18

L
liuruilong 已提交
19
project(paddle-mobile)
W
wangliu 已提交
20

21
file(GLOB_RECURSE PADDLE_MOBILE_CC src/*.cc src/*.cpp src/*.c src/*.mm)
W
wangliu 已提交
22
file(GLOB_RECURSE PADDLE_MOBILE_H src/*.h)
L
liuruilong 已提交
23 24
include_directories(src/)

25
set(CMAKE_CXX_FLAGS "-O3 -s -DNDEBUG ${CMAKE_CXX_FLAGS} -Wno-attributes")
Z
zhaojiaying01 已提交
26
if(IS_IOS)
H
hjchen2 已提交
27 28
    set(CMAKE_CXX_FLAGS "-mfpu=neon -marm -fobjc-abi-version=2 -fobjc-arc \
        -std=gnu++11 -stdlib=libc++ -isysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")
29
    add_compile_options(-fembed-bitcode)
Z
zhaojiaying01 已提交
30
else()
31
    set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
Z
zhaojiaying01 已提交
32 33
endif()

H
hjchen2 已提交
34 35 36 37 38 39
if(USE_OPENMP)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
    add_definitions(-DPADDLE_MOBILE_USE_OPENMP)
endif()

if(WITH_LOGGING)
H
hjchen2 已提交
40
    message(STATUS "debugging mode")
L
liuruilong 已提交
41
    add_definitions(-DPADDLE_MOBILE_DEBUG)
42
else()
L
liuruilong 已提交
43 44
endif()

H
hjchen2 已提交
45
if(NOT WITH_SYMBOL)
L
liuruilong 已提交
46
    add_definitions(-fvisibility=hidden -fvisibility-inlines-hidden)
47
endif()
L
liuruilong 已提交
48

49
if(USE_EXCEPTION)
L
liuruilong 已提交
50
    message(STATUS "use exception")
H
hjchen2 已提交
51
    add_definitions(-DENABLE_EXCEPTION -fexceptions)
L
liuruilong 已提交
52 53
else()
    add_definitions(-fno-exceptions)
54
endif()
L
liuruilong 已提交
55

H
hjchen2 已提交
56
if(WITH_PROFILE)
L
liuruilong 已提交
57 58 59 60
    add_definitions(-DPADDLE_MOBILE_PROFILE)
endif()

# platform control
61
if(ARM_LINUX)
L
liuruilong 已提交
62
    include("${CMAKE_CURRENT_LIST_DIR}/tools/arm-platform.cmake")
63
endif()
W
wangliu 已提交
64

65 66
if(CPU)
    add_definitions(-DPADDLE_MOBILE_CPU)
W
wangliu 已提交
67
else()
L
liuruilong 已提交
68 69 70 71
    file(GLOB_RECURSE _tmp_list src/operators/kernel/arm/*.cpp src/operators/kernel/arm/*.cc)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()
W
wangliu 已提交
72

L
liuruilong 已提交
73 74 75 76
    file(GLOB_RECURSE _tmp_list_h src/operators/kernel/arm/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
L
liuruilong 已提交
77 78
endif()

Z
zhaojiaying01 已提交
79 80
if (GPU_CL)
    add_definitions(-DPADDLE_MOBILE_CL)
L
liuruilong 已提交
81 82 83 84

    # opencl version
    add_definitions(-DCL_TARGET_OPENCL_VERSION=220)

D
dolphin8 已提交
85
    link_libraries(${CMAKE_CURRENT_LIST_DIR}/third_party/opencl/libOpenCL.so)
L
liuruilong 已提交
86
    include_directories(third_party/opencl/OpenCL-Headers)
Z
zhaojiaying01 已提交
87 88 89 90 91 92 93 94 95 96 97 98
else()
    file(GLOB_RECURSE _tmp_list src/framework/cl/*.cpp src/operators/kernel/cl/*.cpp)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()

    file(GLOB_RECURSE _tmp_list_h src/framework/cl/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
endif()

L
liuruilong 已提交
99
if(FPGA)
W
wangliu 已提交
100
    add_definitions(-DPADDLE_MOBILE_FPGA)
Z
zhangyang 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    file(GLOB_RECURSE _tmp_list src/operators/math/*.cpp src/operators/kernel/fpga/*.cc)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()
    file(GLOB_RECURSE _tmp_list_h src/operators/math/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
    list(APPEND PADDLE_MOBILE_CC src/operators/math/softmax.cpp)
    list(APPEND PADDLE_MOBILE_h src/operators/math/softmax.h)
    list(APPEND PADDLE_MOBILE_h src/operators/math/math_func_neon.h)
    if(FPGAV1)
        message("FPGA_V1 enabled")
        add_definitions(-DPADDLE_MOBILE_FPGA_V1)
        file(GLOB_RECURSE _tmp_list src/operators/kernel/fpga/V2/*.cpp src/fpga/V2/*.cpp)
        foreach(f ${_tmp_list})
            list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
        endforeach()
        file(GLOB_RECURSE _tmp_list src/operators/kernel/fpga/V2/*.h src/fpga/V2/*.h)
        foreach(f ${_tmp_list})
121
            list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
Z
zhangyang 已提交
122 123 124 125 126 127 128 129 130 131 132
        endforeach()
    endif()
    if(FPGAV2)
        message("FPGA_V2 enabled")
        add_definitions(-DPADDLE_MOBILE_FPGA_V2)
        file(GLOB_RECURSE _tmp_list src/operators/kernel/fpga/V1/*.cpp src/fpga/V1/*.cpp)
        foreach(f ${_tmp_list})
            list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
        endforeach()
        file(GLOB_RECURSE _tmp_list src/operators/kernel/fpga/V1/*.h src/fpga/V1/*.h)
        foreach(f ${_tmp_list})
133
            list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
Z
zhangyang 已提交
134 135 136
        endforeach()
    endif()

W
wangliu 已提交
137
else()
L
liuruilong 已提交
138 139 140 141 142 143 144 145 146
    file(GLOB_RECURSE _tmp_list src/operators/kernel/fpga/*.cpp src/operators/kernel/fpga/*.cc)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()

    file(GLOB_RECURSE _tmp_list_h src/operators/kernel/fpga/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
L
for  
liuruilong 已提交
147

D
dolphin8 已提交
148

149 150 151 152 153 154 155 156 157 158 159
    file(GLOB_RECURSE _tmp_list src/fpga/*.cpp src/fpga/*.cc)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()

    file(GLOB_RECURSE _tmp_list_h src/fpga/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
endif()

160
if(ANDROID_NDK_TOOLCHAIN_INCLUDED)
W
wangliu 已提交
161
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -llog")
W
wangliu 已提交
162
else()
L
liuruilong 已提交
163 164
    list(REMOVE_ITEM PADDLE_MOBILE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/io/jni/paddle_mobile_jni.h)
    list(REMOVE_ITEM PADDLE_MOBILE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/io/jni/paddle_mobile_jni.cpp)
165
    list(REMOVE_ITEM PADDLE_MOBILE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/operators/math/math_func_neon.h)
166
endif()
W
wangliu 已提交
167

168
if(IS_IOS)
L
liuruilong 已提交
169
else()
L
liuruilong 已提交
170 171 172
    list(REMOVE_ITEM PADDLE_MOBILE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/io/ios_io/PaddleMobileCPU.h)
    list(REMOVE_ITEM PADDLE_MOBILE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/io/ios_io/PaddleMobileCPU.mm)
    list(REMOVE_ITEM PADDLE_MOBILE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/io/ios_io/op_symbols.h)
L
liuruilong 已提交
173
endif ()
朔-望's avatar
朔-望 已提交
174

D
dolphin8 已提交
175 176 177 178 179
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY build)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY build)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY build)
H
Haipeng Wang 已提交
180

181
# NET default
Z
zhangyang 已提交
182 183 184 185
if(FPGAV1)
    set(NET "FPGA_NET_V1" CACHE STRING "select net type")
elseif(FPGAV2)
    set(NET "FPGA_NET_V2" CACHE STRING "select net type")
186 187 188 189
else()
    set(NET "default" CACHE STRING "select net type")
endif()

qnqinan's avatar
qnqinan 已提交
190
set_property(CACHE NET PROPERTY STRINGS "default" "googlenet" "mobilenet" "yolo" "squeezenet" "FPGA_NET_V1" "FPGA_NET_V2" "NLP")
D
dolphin8 已提交
191
include("${CMAKE_CURRENT_LIST_DIR}/tools/op.cmake")
H
Haipeng Wang 已提交
192

L
liuruilong 已提交
193
# build library
194
if(ANDROID_NDK_TOOLCHAIN_INCLUDED)
D
dolphin8 已提交
195
    list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
H
hjchen2 已提交
196
    add_library(paddle-mobile SHARED ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
197
elseif(IS_IOS)
198 199 200 201 202 203 204 205 206 207 208
    if(USE_OPENMP)
        add_library(paddle-mobile-stage0 STATIC ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
        add_custom_target(paddle-mobile ALL
            COMMAND libtool -static -o ${CMAKE_BINARY_DIR}/libpaddle-mobile.a ${CMAKE_CURRENT_LIST_DIR}/tools/libomp.a $<TARGET_FILE:paddle-mobile-stage0>
            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
            DEPENDS paddle-mobile
        )
        add_dependencies(paddle-mobile paddle-mobile-stage0)
    else()
        add_library(paddle-mobile STATIC ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
    endif()
209
else()
H
hjchen2 已提交
210
  add_library(paddle-mobile SHARED ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
211
endif()
朔-望's avatar
朔-望 已提交
212

L
liuruilong 已提交
213
# unit test
H
hjchen2 已提交
214
if(WITH_TEST AND WITH_SYMBOL)
L
liuruilong 已提交
215 216 217 218
    if(IS_IOS)
    else()
        add_subdirectory(test)
    endif()
Z
zhangyang 已提交
219 220
elseif(FPGA)
    add_subdirectory(test)
W
wangliu 已提交
221
endif()
W
wangliu 已提交
222