-
Notifications
You must be signed in to change notification settings - Fork 212
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
246 lines (215 loc) · 9.42 KB
/
CMakeLists.txt
File metadata and controls
246 lines (215 loc) · 9.42 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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
cmake_minimum_required( VERSION 3.17 )
project( gstore )
message( STATUS "this is source dir " ${CMAKE_SOURCE_DIR} )
message( STATUS "this is current binary dir " ${CMAKE_BINARY_DIR} )
# default output path bin and lib
set( EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/../bin" )
set( LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib" )
set( GSTORE_ROOT_DIR ${CMAKE_SOURCE_DIR} )
# gdb debug or release, build type, cmake .. -DCMAKE_BUILD_TYPE=
if ( CMAKE_BUILD_TYPE STREQUAL Debug )
message( STATUS "start build ---------------debug--------------------" )
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS_DEBUG "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type -ggdb" )
elseif ( CMAKE_BUILD_TYPE STREQUAL Static )
message( STATUS "start build ---------------static--------------------" )
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_EXE_LINKER_FLAGS "-static" )
elseif (CMAKE_BUILD_TYPE STREQUAL Cpack)
message( STATUS "start build ----------------cpack-----------------------" )
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_EXE_LINKER_FLAGS "-static" )
elseif ( CMAKE_BUILD_TYPE STREQUAL StaticGcc )
# notice:高版本下生成的static-gcc包,在低版本系统运行是不兼容的。
message( STATUS "start build ---------------static-libgcc-libg++--------------------" )
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
elseif ( CMAKE_BUILD_TYPE STREQUAL CpackGcc )
# notice:高版本下生成的static-gcc包,在低版本系统运行是不兼容的。
message( STATUS "start build ---------------Cpack-libgcc-libg++--------------------" )
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
else ()
SET( CMAKE_C_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -c -Wall -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
SET( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX17_ABI=1 $ENV{CXXFLAGS} -O2 -pthread -fopenmp -std=c++17 -Werror=return-type" )
message( STATUS "start build ------------, default!!!" ${CMAKE_BUILD_TYPE} )
endif()
# build generate bin, make pre generate include and lib
set( GSTORE_3RDINCLUDE_DIR ${GSTORE_ROOT_DIR}/include )
set( GSTORE_3RDLIB_DIR ${GSTORE_ROOT_DIR}/lib )
set( GSTORE_PFNLIB_DIR ${GSTORE_ROOT_DIR}/pfn/lib )
set( INCLUDE_3RD_PATH
${GSTORE_ROOT_DIR}/src
${GSTORE_3RDINCLUDE_DIR}
${GSTORE_3RDINCLUDE_DIR}/antlr4
${GSTORE_3RDINCLUDE_DIR}/workflow
${GSTORE_3RDINCLUDE_DIR}/log4cplus
${GSTORE_3RDINCLUDE_DIR}/indicators
${GSTORE_3RDINCLUDE_DIR}/nlohmann
)
add_subdirectory( src )
# init system.db
# add_custom_command( OUTPUT INIT
# COMMAND echo "Compilation ends successfully!"
# COMMAND bash scripts/init.sh
# WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/
# )
# add_custom_target( "init" DEPENDS INIT )
# make pre
add_custom_target( pre
COMMAND [ -d ${GSTORE_3RDINCLUDE_DIR}/antlr4 ] && [ -d ${GSTORE_3RDLIB_DIR} ] || bash init.sh
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/3rdparty/
)
#make clean_pre
add_custom_command( OUTPUT CLEAN
COMMAND bash clean.sh
COMMAND rm -rf ../logs/*.log
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/3rdparty/
)
add_custom_target( "clean_pre" DEPENDS CLEAN )
#make test
add_custom_command( OUTPUT TEST
COMMAND bash scripts/test/test.sh "."
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}
)
add_custom_target( "test" DEPENDS TEST )
#make dist:clean_pre
add_custom_command( OUTPUT DIST
COMMAND rm -rf *.nt *.n3 .debug/*.log .tmp/*.dat *.txt *.db
COMMAND rm -rf cscope* .cproject .settings tags
COMMAND rm -rf *.info
COMMAND backups/*.db
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}
)
add_custom_target( "dist" DEPENDS CLEAN DIST )
#make tarball
add_custom_command( OUTPUT TARBALL
COMMAND bash scripts/tarball.sh
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}
)
add_custom_target( "tarball" DEPENDS TARBALL )
#make APIexample
add_custom_command( OUTPUT APIEXAMPLE
COMMAND bash scripts/APIexample.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "APIexample" DEPENDS APIEXAMPLE )
#make gtest
# add_custom_command( OUTPUT GTEST
# # COMMAND
# WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
# )
# add_custom_target( "gtest" DEPENDS GTEST )
#make sumlines
add_custom_command( OUTPUT SUMLINES
COMMAND bash scripts/sumline.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "sumlines" DEPENDS SUMLINES )
#make tag
add_custom_command( OUTPUT TAG
COMMAND ctags -R
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "tag" DEPENDS TAG )
#make idx
add_custom_command( OUTPUT IDX
COMMAND find `realpath .` -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
COMMAND cscope -bkq #-i cscope.files
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "idx" DEPENDS IDX )
#make cover
add_custom_command( OUTPUT COVER
COMMAND bash scripts/cover.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "cover" DEPENDS COVER )
#make fulltest
add_custom_command( OUTPUT FULLTEST
#NOTICE:compile gstore with -O2 only
#setup new virtuoso and configure it
COMMAND cp ${PROJECT_SOURCE_DIR}/scripts/full_test.sh ./
COMMAND bash full_test.sh
WORKING_DIRECTORY ~
)
add_custom_target( "fulltest" DEPENDS FULLTEST )
#make test-kvstore:test the efficience of kvstore, insert/delete/search, use dbpedia170M by default
add_custom_command( OUTPUT TEST-KVSTORE
# test/kvstore_test.cpp
COMMAND echo "TODO"
)
add_custom_target( "test-kvstore" DEPENDS TEST-KVSTORE )
#make contribution
add_custom_command( OUTPUT CONTRIBUTION
# https://segmentfault.com/a/1190000008542123
COMMAND bash scripts/contribution.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_custom_target( "contribution" DEPENDS CONTRIBUTION )
# make static
add_custom_target( static
COMMAND bash scripts/static.sh
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/
)
# make cpack
add_custom_target( cpack
COMMAND bash scripts/cpack.sh
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/
)
# make pfnbuild
add_custom_target( pfnbuild
COMMAND bash scripts/pfn_build.sh
WORKING_DIRECTORY ${GSTORE_ROOT_DIR}/
)
if (CMAKE_BUILD_TYPE STREQUAL Cpack OR CMAKE_BUILD_TYPE STREQUAL CpackGcc)
# version
set( CPACK_PACKAGE_VERSION "1.4.0" )
set(CPACK_PACKAGE_CONTACT "gsore@pku.edu.cn")
set(CPACK_PACKAGE_DIRECTORY ${GSTORE_ROOT_DIR}/cpack_package)
# architecture
set( SYSTEM_ARCHITECTURE ${CMAKE_HOST_SYSTEM_PROCESSOR} )
cmake_host_system_information(RESULT PRETTY_ID QUERY DISTRIB_ID)
set( SYSTEM_OS ${PRETTY_ID} )
cmake_host_system_information(RESULT PRETTY_VERSION_ID QUERY DISTRIB_VERSION_ID )
if ( ${PRETTY_ID} MATCHES "centos" )
set( PRETTY_ID "el" )
elseif ( ${PRETTY_ID} MATCHES "ubuntu" )
if (${SYSTEM_ARCHITECTURE} STREQUAL "x86_64" )
set( PRETTY_ID "" )
set( SYSTEM_ARCHITECTURE "amd64" )
endif()
endif()
message( STATUS "system ${PRETTY_ID}, architecture:${PRETTY_ID}${PRETTY_VERSION_ID}.${SYSTEM_ARCHITECTURE}" )
set(CPACK_PACKAGE_RELEASE ${PRETTY_ID}${PRETTY_VERSION_ID})
if ( ${SYSTEM_OS} STREQUAL "ubuntu" )
set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local/gstore")
set(CPACK_DEB_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE})
set(CPACK_DEB_PACKAGE_VENDOR ${SYSTEM_OS})
else ()
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local/gstore")
set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE})
set(CPACK_RPM_PACKAGE_VENDOR ${SYSTEM_OS})
endif()
# include dir
install( DIRECTORY conf DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS )
install( DIRECTORY bin DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS )
install( DIRECTORY data DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS )
if (CMAKE_BUILD_TYPE STREQUAL CpackGcc)
install( DIRECTORY pfn DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS )
endif()
install( FILES LICENSE DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} )
install( FILES README.md DESTINATION ${CPACK_PACKAGING_INSTALL_PREFIX} )
if (CMAKE_BUILD_TYPE STREQUAL CpackGcc)
set(CPACK_PACKAGE_FILE_NAME gstore-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${SYSTEM_ARCHITECTURE}.gcc)
else ()
set(CPACK_PACKAGE_FILE_NAME gstore-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${SYSTEM_ARCHITECTURE})
endif()
include(CPack)
endif()