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

L
liuruilong 已提交
3
option(USE_OPENMP "openmp support" ON)
Y
yangfei 已提交
4
option(DEBUGING "enable debug mode" OFF)
Y
yangfei 已提交
5
option(USE_EXCEPTION "use std exception" ON)
L
liuruilong 已提交
6
option(SYMBOL_HIDDEN "symbol hidden" OFF) # on when use jni or ios io
L
liuruilong 已提交
7
option(LOG_PROFILE "log profile" OFF)
L
liuruilong 已提交
8
# select the platform to build
Y
yangfei 已提交
9
option(CPU "armv7 with neon" ON)
Z
zhaojiaying01 已提交
10 11
option(GPU_MALI "mali gpu" OFF)
option(GPU_CL "opencl gpu" ON)
Z
zhaojiaying01 已提交
12
option(FPGA "fpga" OFF)
W
wangliu 已提交
13

L
liuruilong 已提交
14

L
liuruilong 已提交
15
project(paddle-mobile)
W
wangliu 已提交
16

17
file(GLOB_RECURSE PADDLE_MOBILE_CC src/*.cc src/*.cpp src/*.c src/*.mm)
W
wangliu 已提交
18
file(GLOB_RECURSE PADDLE_MOBILE_H src/*.h)
L
liuruilong 已提交
19 20
include_directories(src/)

H
hjchen2 已提交
21
set(CMAKE_BUILD_TYPE Release)
H
hjchen2 已提交
22
set(CMAKE_CXX_FLAGS "-O3 -s -DNDEBUG ${CMAKE_CXX_FLAGS}")
Z
zhaojiaying01 已提交
23
if(IS_IOS)
H
hjchen2 已提交
24 25
    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}")
26
    add_compile_options(-fembed-bitcode)
Z
zhaojiaying01 已提交
27
else()
28
    set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
Z
zhaojiaying01 已提交
29 30
endif()

31
if(DEBUGING)
H
hjchen2 已提交
32
    message(STATUS "debugging mode")
L
liuruilong 已提交
33
    add_definitions(-DPADDLE_MOBILE_DEBUG)
34
else()
L
liuruilong 已提交
35 36 37 38
endif()

if(SYMBOL_HIDDEN)
    add_definitions(-fvisibility=hidden -fvisibility-inlines-hidden)
39
endif()
L
liuruilong 已提交
40

41
if(USE_EXCEPTION)
L
liuruilong 已提交
42
    message(STATUS "use exception")
H
hjchen2 已提交
43
    add_definitions(-DENABLE_EXCEPTION -fexceptions)
L
liuruilong 已提交
44 45
else()
    add_definitions(-fno-exceptions)
46
endif()
L
liuruilong 已提交
47

48
if(LOG_PROFILE)
L
liuruilong 已提交
49 50 51
    add_definitions(-DPADDLE_MOBILE_PROFILE)
endif()

H
hjchen2 已提交
52
if(USE_OPENMP)
L
liuruilong 已提交
53 54 55 56 57
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
    add_definitions(-DPADDLE_MOBILE_USE_OPENMP)
endif()

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

62 63
if(CPU)
    add_definitions(-DPADDLE_MOBILE_CPU)
W
wangliu 已提交
64
else()
L
liuruilong 已提交
65 66 67 68
    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 已提交
69

L
liuruilong 已提交
70 71 72 73
    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 已提交
74 75
endif()

Z
zhaojiaying01 已提交
76 77
if (GPU_CL)
    add_definitions(-DPADDLE_MOBILE_CL)
L
liuruilong 已提交
78 79 80 81

    # opencl version
    add_definitions(-DCL_TARGET_OPENCL_VERSION=220)

D
dolphin8 已提交
82
    link_libraries(${CMAKE_CURRENT_LIST_DIR}/third_party/opencl/libOpenCL.so)
L
liuruilong 已提交
83
    include_directories(third_party/opencl/OpenCL-Headers)
Z
zhaojiaying01 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96
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()

if (GPU_MALI)
L
for  
liuruilong 已提交
97
    add_definitions(-DPADDLE_MOBILE_MALI_GPU)
S
sharper 已提交
98 99 100 101 102 103 104 105 106 107 108
    add_definitions(-DUSE_ACL=1)
    add_definitions(-DUSE_OPENCL)
    set(ACL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/src/operators/kernel/mali/ACL_Android)
    include_directories(${ACL_ROOT} ${ACL_ROOT}/include)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${ACL_ROOT}/build")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -larm_compute")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -larm_compute_core")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -larm_compute_graph")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${ACL_ROOT}/build/opencl-1.2-stubs")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lOpenCL")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_ACL=1")
W
wangliu 已提交
109
else()
110 111 112 113 114 115 116 117 118
    file(GLOB_RECURSE _tmp_list src/operators/kernel/mali/*.cpp src/operators/kernel/mali/*.cc)
    foreach(f ${_tmp_list})
        list(REMOVE_ITEM PADDLE_MOBILE_CC ${f})
    endforeach()

    file(GLOB_RECURSE _tmp_list_h src/operators/kernel/mali/*.h)
    foreach(f ${_tmp_list_h})
        list(REMOVE_ITEM PADDLE_MOBILE_H ${f})
    endforeach()
L
liuruilong 已提交
119 120 121
endif()

if(FPGA)
Z
zhangyang 已提交
122
    message("FPGA mode enabled")
W
wangliu 已提交
123 124
    add_definitions(-DPADDLE_MOBILE_FPGA)
else()
L
liuruilong 已提交
125 126 127 128 129 130 131 132 133
    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 已提交
134

D
dolphin8 已提交
135

136 137 138 139 140 141 142 143 144 145 146
    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()

147
if(ANDROID_NDK_TOOLCHAIN_INCLUDED)
W
wangliu 已提交
148
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -llog")
W
wangliu 已提交
149
else()
L
liuruilong 已提交
150 151
    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)
152
    list(REMOVE_ITEM PADDLE_MOBILE_H ${CMAKE_CURRENT_SOURCE_DIR}/src/operators/math/math_func_neon.h)
153
endif()
W
wangliu 已提交
154

155
if(IS_IOS)
L
liuruilong 已提交
156
else()
L
liuruilong 已提交
157 158 159
    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 已提交
160
endif ()
朔-望's avatar
朔-望 已提交
161

D
dolphin8 已提交
162 163 164 165 166
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 已提交
167

168
# NET default
169
if(FPGA)
170 171 172 173 174
    set(NET "FPGAnets" CACHE STRING "select net type")
else()
    set(NET "default" CACHE STRING "select net type")
endif()

175
set_property(CACHE NET PROPERTY STRINGS "default" "googlenet" "mobilenet" "yolo" "squeezenet" "FPGAnets" "NLP")
D
dolphin8 已提交
176
include("${CMAKE_CURRENT_LIST_DIR}/tools/op.cmake")
H
Haipeng Wang 已提交
177

178

L
liuruilong 已提交
179
# build library
180
if(ANDROID_NDK_TOOLCHAIN_INCLUDED)
D
dolphin8 已提交
181
    list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
H
hjchen2 已提交
182
    add_library(paddle-mobile SHARED ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
183
elseif(IS_IOS)
184 185 186 187 188 189 190 191 192 193 194
    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()
195
else()
H
hjchen2 已提交
196
  add_library(paddle-mobile SHARED ${PADDLE_MOBILE_CC} ${PADDLE_MOBILE_H})
197
endif()
朔-望's avatar
朔-望 已提交
198

L
liuruilong 已提交
199
# unit test
W
wangliu 已提交
200
if(DEBUGING)
L
liuruilong 已提交
201 202 203 204
    if(IS_IOS)
    else()
        add_subdirectory(test)
    endif()
Z
zhangyang 已提交
205 206
elseif(FPGA)
    add_subdirectory(test)
W
wangliu 已提交
207
endif()
W
wangliu 已提交
208

209

Z
zhangyang 已提交
210 211