forked from XUANTIE-RV/csi-nn2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
255 lines (205 loc) · 11.1 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
cmake_minimum_required(VERSION 3.3)
project(CSI-NN2)
enable_language(ASM)
option(USE_SHL_DEBUG "option for debug" ON)
option(BUILD_X86 "build x86" OFF)
option(BUILD_RISCV "build riscv" OFF)
option(BUILD_RISCV_ELF "build riscv elf" OFF)
option(BUILD_CSKY "build csky" OFF)
option(BUILD_CSKY_ELF "build csky elf" OFF)
if (NOT USE_COMPILER_PATH)
# riscv linux compiler
if (BUILD_RISCV)
set(CMAKE_C_COMPILER riscv64-unknown-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER riscv64-unknown-linux-gnu-g++)
set(CMAKE_ASM_COMPILER riscv64-unknown-linux-gnu-gcc)
endif()
# riscv elf compiler
if (BUILD_RISCV_ELF)
set(CMAKE_ASM_COMPILER riscv64-unknown-elf-gcc)
set(CMAKE_C_COMPILER riscv64-unknown-elf-gcc)
endif()
# csky linux compiler
if (BUILD_CSKY)
set(CMAKE_C_COMPILER csky-abiv2-linux-gcc)
set(CMAKE_ASM_COMPILER csky-abiv2-linux-gcc)
endif()
# csky elf compiler
if (BUILD_CSKY_ELF)
set(CMAKE_C_COMPILER csky-abiv2-elf-gcc)
set(CMAKE_ASM_COMPILER csky-abiv2-elf-gcc)
endif()
endif()
# SHL debug module
if(USE_SHL_DEBUG)
add_definitions(-D SHL_DEBUG)
endif()
# reduce elf size
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -Wl,--gc-sections")
# set warning as error
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
file(GLOB_RECURSE NN2_SRCS source/nn2/*.c source/utils/*.c)
file(GLOB_RECURSE REF_SRCS source/reference/*.c)
file(GLOB_RECURSE GREF_SRCS source/graph_ref/*.c)
file(GLOB_RECURSE OPENVX_SRCS source/openvx/*.c)
file(GLOB_RECURSE PNNA_SRCS source/pnna/*.c source/pnna/*.cpp)
file(GLOB_RECURSE C906_SRCS source/c906_opt/*.c source/c906_opt/*.S)
file(GLOB_RECURSE C908_SRCS source/c908_opt/*.c source/c908_opt/gemm_kernel/*.S)
file(GLOB_RECURSE THEAD_RVV_SRCS source/thead_rvv/*.c)
file(GLOB_RECURSE C860_SRCS source/c860_opt/*.S)
file(GLOB_RECURSE I805_REF_SRCS source/i805_ref/*.c)
file(GLOB_RECURSE I805_SRCS source/i805_opt/*.c source/i805_opt/*.S)
file(GLOB_RECURSE E804_SRCS source/e804_opt/*.c source/e804_opt/*.S)
file(GLOB_RECURSE ASP_SRCS source/asp/*.c)
include_directories(include)
option(SHL_LAYER_BENCHMARK "Layer information and performance" OFF)
if(SHL_LAYER_BENCHMARK)
add_definitions(-DSHL_LAYER_BENCHMARK)
message(STATUS "Print the execution time of each layer - ON")
endif()
if(BUILD_X86)
# build x86_ref so
LIST(APPEND X86_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS})
add_library(x86_static STATIC ${X86_LST})
SET_TARGET_PROPERTIES(x86_static PROPERTIES OUTPUT_NAME "shl_ref_x86")
set(X86_BUILD_FLAGS -DSHL_AVX_OPT -DSHL_BUILD_REF -DSHL_BUILD_GREF -fPIC -mavx -mfma -fopenmp)
target_compile_options(x86_static PRIVATE ${X86_BUILD_FLAGS})
install(TARGETS x86_static DESTINATION lib)
# build pnna x86 simulate so
LIST(APPEND PNNA_LST ${NN2_SRCS} ${REF_SRCS} ${PNNA_SRCS})
add_library(pnna_share SHARED ${PNNA_LST})
SET_TARGET_PROPERTIES(pnna_share PROPERTIES OUTPUT_NAME "shl_pnna_x86")
set(PNNA_BUILD_FLAGS -DSHL_BUILD_PNNA)
target_compile_options(pnna_share PRIVATE ${PNNA_BUILD_FLAGS})
target_include_directories(pnna_share PRIVATE module/nna_ddk_install/include/)
set(PNNA_LINK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/module/nna_ddk_install/x86/)
target_link_libraries(pnna_share PRIVATE -L${PNNA_LINK_DIR} -limgdnn_csim -lnnasession_csim)
install(TARGETS pnna_share DESTINATION lib)
# build heterogeneous pnna x86 simulate so
LIST(APPEND HLIGHT_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${PNNA_SRCS})
add_library(hlight_share SHARED ${HLIGHT_LST})
SET_TARGET_PROPERTIES(hlight_share PROPERTIES OUTPUT_NAME "shl_hlight_x86")
set(HLIGHT_BUILD_FLAGS -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_BUILD_PNNA)
target_compile_options(hlight_share PRIVATE ${HLIGHT_BUILD_FLAGS})
target_include_directories(hlight_share PRIVATE module/nna_ddk_install/include/)
set(PNNA_LINK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/module/nna_ddk_install/x86/)
target_link_libraries(hlight_share PRIVATE -L${PNNA_LINK_DIR} -limgdnn_csim -lnnasession_csim)
install(TARGETS hlight_share DESTINATION lib)
endif()
if(BUILD_RISCV)
# build rvv a
LIST(APPEND RVV_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${THEAD_RVV_SRCS})
add_library(rvv_static STATIC ${RVV_LST})
SET_TARGET_PROPERTIES(rvv_static PROPERTIES OUTPUT_NAME "shl_rvv")
set(RVV_BUILD_FLAGS -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d -DSHL_BUILD_RVV -DSHL_BUILD_REF -DSHL_BUILD_GREF)
target_compile_options(rvv_static PRIVATE ${RVV_BUILD_FLAGS})
install(TARGETS rvv_static DESTINATION lib)
# build c906 a
LIST(APPEND C906_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${THEAD_RVV_SRCS} ${C906_SRCS})
add_library(c906_static STATIC ${C906_LST})
SET_TARGET_PROPERTIES(c906_static PROPERTIES OUTPUT_NAME "shl_c906")
set(C906_BUILD_FLAGS -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d -DSHL_BUILD_C906 -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_BUILD_RVV)
target_compile_options(c906_static PRIVATE ${C906_BUILD_FLAGS})
install(TARGETS c906_static DESTINATION lib)
add_library(c906_share SHARED ${C906_LST})
SET_TARGET_PROPERTIES(c906_share PROPERTIES OUTPUT_NAME "shl_c906")
target_compile_options(c906_share PRIVATE ${C906_BUILD_FLAGS})
install(TARGETS c906_share DESTINATION lib)
# build c908 a
LIST(APPEND C908_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${THEAD_RVV_SRCS} ${C908_SRCS})
add_library(c908_static STATIC ${C908_LST})
SET_TARGET_PROPERTIES(c908_static PROPERTIES OUTPUT_NAME "shl_c908")
set(C908_BUILD_FLAGS -march=rv64gcv_zfh_xtheadc_xtheadv -mabi=lp64d -DSHL_BUILD_C908 -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_BUILD_RVV)
target_compile_options(c908_static PRIVATE ${C908_BUILD_FLAGS})
install(TARGETS c908_static DESTINATION lib)
# build pnna so
LIST(APPEND PNNA_LST ${NN2_SRCS} ${REF_SRCS} ${PNNA_SRCS})
add_library(pnna_share SHARED ${PNNA_LST})
SET_TARGET_PROPERTIES(pnna_share PROPERTIES OUTPUT_NAME "shl_pnna")
set(PNNA_BUILD_FLAGS -DSHL_BUILD_PNNA)
target_compile_options(pnna_share PRIVATE ${PNNA_BUILD_FLAGS})
target_include_directories(pnna_share PRIVATE module/nna_ddk_install/include/)
set(PNNA_LINK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/module/nna_ddk_install/light/)
target_link_libraries(pnna_share PRIVATE -L${PNNA_LINK_DIR} -limgdnn -lnnasession)
install(TARGETS pnna_share DESTINATION lib)
# build heterogeneous pnna so
LIST(APPEND HLIGHT_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${PNNA_SRCS})
add_library(hlight_share SHARED ${HLIGHT_LST})
SET_TARGET_PROPERTIES(hlight_share PROPERTIES OUTPUT_NAME "shl_hlight")
set(HLIGHT_BUILD_FLAGS -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_BUILD_PNNA)
target_compile_options(hlight_share PRIVATE ${HLIGHT_BUILD_FLAGS})
target_include_directories(hlight_share PRIVATE module/nna_ddk_install/include/)
set(PNNA_LINK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/module/nna_ddk_install/light/)
target_link_libraries(hlight_share PRIVATE -L${PNNA_LINK_DIR} -limgdnn -lnnasession)
install(TARGETS hlight_share DESTINATION lib)
endif()
if(BUILD_RISCV_ELF)
# build c906 elf a
LIST(APPEND C906_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${THEAD_RVV_SRCS} ${C906_SRCS})
add_library(c906_elf_static STATIC ${C906_LST})
SET_TARGET_PROPERTIES(c906_elf_static PROPERTIES OUTPUT_NAME "shl_c906_rtos")
set(C906_BUILD_FLAGS -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d -mcmodel=medany -DSHL_BUILD_C906 -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_BUILD_RTOS)
target_compile_options(c906_elf_static PRIVATE ${C906_BUILD_FLAGS})
install(TARGETS c906_elf_static DESTINATION lib)
# build ASP elf a
LIST(APPEND ASP_LST ${NN2_SRCS} ${REF_SRCS} ${GREF_SRCS} ${ASP_SRCS})
add_library(asp_elf_static STATIC ${ASP_LST})
SET_TARGET_PROPERTIES(asp_elf_static PROPERTIES OUTPUT_NAME "shl_asp")
set(ASP_BUILD_FLAGS -march=rv32imafdcp -mabi=ilp32d -DSHL_BUILD_ASP -DSHL_BUILD_REF -DSHL_BUILD_GREF -DSHL_USE_ATAT_MALLOC -DSHL_BUILD_RTOS)
target_compile_options(asp_elf_static PRIVATE ${ASP_BUILD_FLAGS})
install(TARGETS asp_elf_static DESTINATION lib)
endif()
if(BUILD_CSKY)
# build openvx so
LIST(APPEND OPENVX_LST ${NN2_SRCS} ${OPENVX_SRCS})
add_library(openvx_share SHARED ${OPENVX_LST})
SET_TARGET_PROPERTIES(openvx_share PROPERTIES OUTPUT_NAME "shl_openvx")
set(OPENVX_BUILD_FLAGS -mcpu=c860v -fPIC -DSHL_BUILD_OPENVX -mhard-float)
target_compile_options(openvx_share PRIVATE ${OPENVX_BUILD_FLAGS})
set(OPENVX_LINK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/module/acuity-driver/driver/build/sdk/drivers)
target_link_libraries(openvx_share PRIVATE -mcpu=c860v -fPIC -mhard-float -L${OPENVX_LINK_DIR} -lArchModelSw -lNNArchPerf -lOpenVX -lOpenVXU -lCLC -lVSC -lGAL -lNNGPUBinary -lovxlib -lOvx12VXCBinary)
target_include_directories(openvx_share PRIVATE module/acuity-driver/lib/acuity-ovxlib-dev/include/)
target_include_directories(openvx_share PRIVATE module/acuity-driver/driver/build/sdk/include/)
install(TARGETS openvx_share DESTINATION lib)
# build c860 a
LIST(APPEND C860_LST ${NN2_SRCS} ${REF_SRCS} ${C860_SRCS})
add_library(c860_static STATIC ${C860_LST})
SET_TARGET_PROPERTIES(c860_static PROPERTIES OUTPUT_NAME "shl_c860")
set(C860_BUILD_FLAGS -mcpu=c860v -DSHL_BUILD_REF)
target_compile_options(c860_static PRIVATE ${C860_BUILD_FLAGS})
install(TARGETS c860_static DESTINATION lib)
endif()
if(BUILD_CSKY_ELF)
# build i805 ref a
LIST(APPEND I805_REF_LST ${NN2_SRCS} ${REF_SRCS} ${I805_REF_SRCS})
add_library(i805_ref_static STATIC ${I805_REF_LST})
SET_TARGET_PROPERTIES(i805_ref_static PROPERTIES OUTPUT_NAME "shl_ref_i805")
set(I805_REF_BUILD_FLAGS -DSHL_BUILD_REF_I805 -DSHL_BUILD_RTOS -mcpu=i805)
target_compile_options(i805_ref_static PRIVATE ${I805_REF_BUILD_FLAGS})
target_include_directories(i805_ref_static PRIVATE source/i805_ref)
install(TARGETS i805_ref_static DESTINATION lib)
# build i805 a
LIST(APPEND I805_LST ${NN2_SRCS} ${REF_SRCS} ${I805_SRCS})
add_library(i805_static STATIC ${I805_LST})
SET_TARGET_PROPERTIES(i805_static PROPERTIES OUTPUT_NAME "shl_i805")
set(I805_BUILD_FLAGS -DSHL_BUILD_I805 -DSHL_BUILD_RTOS -mcpu=ck805ef -mhard-float)
target_compile_options(i805_static PRIVATE ${I805_BUILD_FLAGS})
target_include_directories(i805_static PRIVATE source/i805_opt)
install(TARGETS i805_static DESTINATION lib)
# build e804 a
LIST(APPEND E804_LST ${NN2_SRCS} ${REF_SRCS} ${E804_SRCS})
add_library(e804_static STATIC ${E804_LST})
SET_TARGET_PROPERTIES(e804_static PROPERTIES OUTPUT_NAME "shl_e804")
set(E804_BUILD_FLAGS -DSHL_BUILD_E804 -mcpu=e804d -DSHL_BUILD_RTOS -mno-required-attr-fpu-abi)
target_compile_options(e804_static PRIVATE ${E804_BUILD_FLAGS})
target_include_directories(e804_static PRIVATE source/e804_opt)
install(TARGETS e804_static DESTINATION lib)
endif()
# coverage options
OPTION(ENABLE_GCOV "Enable gcov" OFF)
if(ENABLE_GCOV)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov")
endif()
install(DIRECTORY "include/." DESTINATION "include" FILES_MATCHING PATTERN "*.h")