-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
231 lines (187 loc) · 7.47 KB
/
CMakeLists.txt
File metadata and controls
231 lines (187 loc) · 7.47 KB
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
# SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: CC0-1.0
cmake_minimum_required(VERSION 3.10)
project(deepin-ocr)
#玲珑构建依赖目录
include_directories(${CMAKE_INSTALL_PREFIX}/include)
set(ENABLE_Qt6 ON CACHE BOOL "Build with Qt6")
find_package(Qt6 QUIET)
if(ENABLE_Qt6 AND Qt6_FOUND)
set(DTK_VERSION_MAJOR 6)
set(QT_VERSION_MAJOR 6)
set(SUPPORT_QT6 TRUE)
else()
set(QT_VERSION_MAJOR 5)
endif()
message(STATUS "--- Current Qt verison: ${QT_VERSION_MAJOR}")
# 玲珑构建依赖目录
include_directories(${CMAKE_INSTALL_PREFIX}/include)
# for Qt
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(QtModule Core Gui Widgets DBus LinguistTools)
if(DOTEST)
set(QtModule ${QtModule} Test)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined,address,leak -fno-omit-frame-pointer -g -fprofile-arcs -ftest-coverage -lgcov -fno-rtti")
endif()
endif()
if (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wl,--as-need -fPIE")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=incompatible-pointer-types -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wl,--as-need -fPIE -Wno-error=incompatible-pointer-types")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -Wl,-z,relro -Wl,-z,now")
endif()
find_package(Qt${QT_VERSION_MAJOR} REQUIRED ${QtModule})
add_definitions(${QT_DEFINITIONS})
include(CMakePackageConfigHelpers)
# for ocr plugin manager
# find_package(dtkocr)
# include_directories(${dtkocr_INCLUDE_DIRS})
# for OpenMP
find_package(OpenMP REQUIRED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
# for project files
include_directories(.)
include_directories(view)
include_directories(service)
include_directories(engine)
include_directories(util)
include_directories(utils)
aux_source_directory(. allSource)
aux_source_directory(./view allSource)
aux_source_directory(./service allSource)
aux_source_directory(./engine allSource)
aux_source_directory(./util allSource)
aux_source_directory(./utils allSource)
# translation
file(GLOB TargetTsFiles LIST_DIRECTORIES false ../translations/${PROJECT_NAME}*.ts)
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1)
if(NOT(${CMAKE_BUILD_TYPE} MATCHES "Debug"))
if(SUPPORT_QT6)
qt_create_translation(LangSrcs ${allSource} ${TargetTsFiles} OPTIONS)
qt_add_translation(${TargetTsFiles})
else()
qt5_create_translation(LangSrcs ${allSource} ${TargetTsFiles} OPTIONS)
qt5_add_translation(${TargetTsFiles})
endif()
endif()
set_source_files_properties(${qmfiles} PROPERTIES OUTPUT_LOCATION "translations")
# QRC file
set(AllQRC ../resource.qrc)
add_executable(${PROJECT_NAME} ${allSource} ${LangSrcs} ${AllQRC})
# for test
if(DOTEST)
SET(PROJECT_NAME_TEST ${PROJECT_NAME}_test)
include_directories(./../tests/)
include_directories(./../3rdparty/stub_linux/)
aux_source_directory(./../tests/ allTestSource)
aux_source_directory(./view allTestSource)
aux_source_directory(./service allTestSource)
aux_source_directory(./paddleocr-ncnn allTestSource)
aux_source_directory(../3rdparty/clipper allTestSource)
FILE(GLOB allTestSource1
"./frame.cpp"
"./loadingwidget.cpp"
"./ocrapplication.cpp"
"./mainwidget.cpp"
"./mainwindow.cpp"
"./resulttextview.cpp"
"./textloadwidget.cpp"
)
add_executable(${PROJECT_NAME_TEST} ${allHeaders} ${allTestSource} ${allTestSource1})
target_link_libraries(${PROJECT_NAME_TEST} gmock gtest pthread)
add_test(${PROJECT_NAME_TEST} COMMAND ${PROJECT_NAME_TEST})
# ------------------------------ 创建'make test'指令---------------------------------------
add_custom_target(test
COMMAND mkdir -p coverageResult
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_custom_command(TARGET test
COMMAND echo " =================== CREAT LCOV REPROT BEGIN ==================== "
COMMAND lcov --directory ./CMakeFiles/${PROJECT_NAME_TEST}.dir --zerocounters
COMMAND lcov --directory ./CMakeFiles/${PROJECT_NAME}.dir --zerocounters
COMMAND ./${PROJECT_NAME}/${PROJECT_NAME_TEST}
COMMAND lcov --directory . --capture --output-file ./coverageResult/${PROJECT_NAME}_Coverage.info
COMMAND echo " =================== do filter begin ==================== "
COMMAND lcov --remove ./coverageResult/${PROJECT_NAME}_Coverage.info
'*/${PROJECT_NAME_TEST}_autogen/*' '*/${PROJECT_NAME}_autogen/*' '*/usr/include/*' '*/tests/*' '*/googletest/*'
-o ./coverageResult/${PROJECT_NAME}_Coverage.info
COMMAND echo " =================== do filter end ==================== "
COMMAND genhtml -o ./coverageResult/report ./coverageResult/${PROJECT_NAME}_Coverage.info
COMMAND echo " =================== CREAT LCOV REPROT END ==================== "
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_dependencies(test ${PROJECT_NAME_TEST})
endif()
# for dtk
find_package(PkgConfig REQUIRED)
if(SUPPORT_QT6)
pkg_check_modules(ocr_lib REQUIRED dtk6ocr)
else()
pkg_check_modules(ocr_lib REQUIRED dtkocr)
endif()
pkg_check_modules(InferenceEngine REQUIRED ncnn opencv_mobile)
target_include_directories(${PROJECT_NAME} PUBLIC ${ocr_lib_INCLUDE_DIRS})
find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core Widget)
if(NOT SUPPORT_QT6)
qt5_use_modules(${PROJECT_NAME} ${QtModule})
endif()
if(DOTEST AND NOT SUPPORT_QT6)
qt5_use_modules(${PROJECT_NAME_TEST} ${QtModule})
endif()
target_link_libraries(${PROJECT_NAME}
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Dtk${DTK_VERSION_MAJOR}::Core
Dtk${DTK_VERSION_MAJOR}::Widget
${InferenceEngine_LIBRARIES}
${ocr_lib_LIBRARIES}
pthread
)
if(DOTEST)
target_link_libraries(${PROJECT_NAME_TEST}
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Dtk${DTK_VERSION_MAJOR}::Core
Dtk${DTK_VERSION_MAJOR}::Widget
${ocr_lib_LIBRARIES}
pthread
)
endif()
# dde项目,期望CMAKE_INSTALL_PREFIX为/usr
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif()
#dde项目,期望CMAKE_INSTALL_PREFIX为/usr
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif ()
# install
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(TranslationDir ${PREFIX}/share/${PROJECT_NAME}/translations)
set(DesktopDir ${PREFIX}/share/applications/)
set(AppIconDir ${PREFIX}/share/icons/hicolor/scalable/apps)
set(DBusServiceDir ${PREFIX}/share/dbus-1/services)
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION ${PREFIX}/lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION ${PREFIX}/bin
INCLUDES DESTINATION allHeaders)
install(FILES ${LangSrcs} DESTINATION ${TranslationDir})
install(FILES ../deepin-ocr.desktop DESTINATION ${DesktopDir})
install(FILES ../assets/deepin-ocr.svg DESTINATION ${AppIconDir})
install(FILES ../com.deepin.Ocr.service DESTINATION ${DBusServiceDir})
include(${CMAKE_SOURCE_DIR}/install_dconfig.cmake)
INSTALL_DCONFIG("deepin-ocr.common.json")