-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
218 lines (184 loc) · 6.57 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
CMAKE_MINIMUM_REQUIRED(VERSION 3.15.3)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
enable_language( C CXX ASM )
set(CMAKE_BUILD_TYPE Debug)
# set(CMAKE_BUILD_TYPE Release)
project(pyju)
# 该选项解决clang不支持operator delete(void*, size_t)的问题
# if (COMPILER_GCC OR COMPILER_CLANG)
# # Enable C++14 sized global deallocation functions. It should be enabled by setting -std=c++14 but I'm not sure.
# endif ()
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsized-deallocation")
message("Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")
message("Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
# use clang libabixx
# if (CMAKE_CXX_COMPILER_ID STREQUAL Clang)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I~/opt/llvm/include")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I~/opt/llvm/include/c++/v1")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isysroot ~/opt/llvm/include/c++/v1")
# MESSAGE(STATUS "--------------------- CMAKE CXX FLAGS : ${CMAKE_CXX_FLAGS}")
# endif ()
option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ON)
# Turns on all external libs like nuraft, ODBC, ...
option(ENABLE_LIBRARIES "Enable all external libraries by default" ON)
message(STATUS "Enable all external libraries:" ${ENABLE_LIBRARIES})
# 解决zstd.h中deprecated报错的问题
add_definitions(-DZSTD_DISABLE_DEPRECATE_WARNINGS)
# include(cmake/cpu_features.cmake)
include (cmake/add_warning.cmake)
include (cmake/warnings.cmake)
include (cmake/version.cmake)
include (cmake/arch.cmake)
include (cmake/target.cmake)
include (cmake/embed_binary.cmake)
# Ignore export() since we don't use it,
# but it gets broken with a global targets via link_libraries()
# 由于global-group为全局的链接库,为了避免这个库被llvm使用(在编译llvm时报找不到global-grou),我们使用如下的宏来断开link_libraries链接的库
# 如果不添加如下两行配置,LLVM编译报错
macro (export)
endmacro ()
# Global libraries
# See:
# - default_libs.cmake
add_library(global-libs INTERFACE)
add_library(global-group INTERFACE)
if (OS_LINUX OR OS_ANDROID)
include(cmake/linux/default_libs.cmake)
elseif (OS_DARWIN)
include(cmake/darwin/default_libs.cmake)
elseif (OS_FREEBSD)
include(cmake/freebsd/default_libs.cmake)
endif ()
link_libraries(global-group)
if (WERROR)
# Don't pollute CMAKE_CXX_FLAGS with -Werror as it will break some CMake checks.
# Instead, adopt modern cmake usage requirement.
target_compile_options(global-group INTERFACE "-Werror")
endif ()
# Make this extra-checks for correct library dependencies.
if (OS_LINUX AND NOT SANITIZE)
target_link_options(global-group INTERFACE "-Wl,--no-undefined")
endif ()
if (TARGET global-group)
install (EXPORT global DESTINATION cmake)
endif ()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/contrib)
if (NOT ENABLE_JEMALLOC)
message (WARNING "jemalloc allocator is disabled. This is not recommended for production builds.")
endif ()
include_directories(
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/base
${PROJECT_SOURCE_DIR}/base/loggers
)
file(GLOB_RECURSE
PYJU_SRC
CONFIGURE_DEPENDS # Ask CMake to regenerate the build system if these files change.
${PROJECT_SOURCE_DIR}/src/ast/*.cpp
${PROJECT_SOURCE_DIR}/src/ast/*.h
${PROJECT_SOURCE_DIR}/src/Client/*.cpp
${PROJECT_SOURCE_DIR}/src/Client/*.h
${PROJECT_SOURCE_DIR}/src/Common/*.cpp
${PROJECT_SOURCE_DIR}/src/Common/*.h
${PROJECT_SOURCE_DIR}/src/Compression/*.cpp
${PROJECT_SOURCE_DIR}/src/Compression/*.h
${PROJECT_SOURCE_DIR}/src/Core/*.cpp
${PROJECT_SOURCE_DIR}/src/Core/*.h
${PROJECT_SOURCE_DIR}/src/Disks/*.cpp
${PROJECT_SOURCE_DIR}/src/Disks/*.h
${PROJECT_SOURCE_DIR}/src/Formats/*.cpp
${PROJECT_SOURCE_DIR}/src/Formats/*.h
${PROJECT_SOURCE_DIR}/src/interpreter/*.cpp
${PROJECT_SOURCE_DIR}/src/interpreter/*.h
${PROJECT_SOURCE_DIR}/src/IO/*.cpp
${PROJECT_SOURCE_DIR}/src/IO/*.h
${PROJECT_SOURCE_DIR}/src/Parser/*.cpp
${PROJECT_SOURCE_DIR}/src/Parser/*.h
${PROJECT_SOURCE_DIR}/base/loggers/*.cpp
${PROJECT_SOURCE_DIR}/base/loggers/*.h
)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/base)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/vm)
message(STATUS "PYJU_SRC " ${PYJU_SRC})
add_library(pyju_core SHARED
${PYJU_SRC}
)
target_link_libraries(pyju_core
PUBLIC
Poco::Net
Poco::Foundation
Poco::Util
Poco::Net::SSL
boost::headers_only
boost::program_options
ch_contrib::magic_enum
ch_contrib::replxx
ch_contrib::cityhash
ch_contrib::cctz
base
# loggers
pcg_random
readpassphrase
widechar_width
ch_contrib::re2_st
ch_contrib::re2
ch_contrib::yaml_cpp
ch_contrib::double_conversion
ch_contrib::miniselect
ch_contrib::dragonbox_to_chars
ch_contrib::fast_float
ch_contrib::lz4
ch_contrib::zstd
ch_contrib::xz
ch_contrib::brotli
ch_contrib::bzip2
ch_contrib::zlib
ch_contrib::fmt
OpenSSL::SSL
OpenSSL::Crypto
ch_contrib::cpuid
ch_contrib::llvm
ch_contrib::utf8proc
ch_contrib::gtest_all
ch_contrib::gbenchmark_all
)
if (OS_LINUX)
target_link_libraries(pyju_core
PUBLIC
${CMAKE_DL_LIBS}
ch_contrib::jemalloc
)
endif ()
add_executable(pyju
programs/pyju.cpp
programs/TestTags.cpp
programs/Client.cpp
programs/pyju_main.cpp
)
target_link_libraries(pyju
PUBLIC
pyju_core
pyju_vm
)
# test
add_subdirectory(test/llvm/HowToUseJIT)
add_subdirectory(test/llvm/HowToUseLLJIT)
add_subdirectory(test/llvm/OrcV2Example)
add_subdirectory(test/cpp_hpc)
option(ENABLE_TESTS "Provide unit_test_dbms target with Google.Test unit tests" ON)
option(ENABLE_BENCHMARKS "Build all benchmark programs in 'benchmarks' subdirectories" OFF)
if (ENABLE_TESTS)
message (STATUS "Unit tests are enabled")
else()
message(STATUS "Unit tests are disabled")
endif ()
enable_testing() # Enable for tests without binary
include (configure_config.cmake)
configure_file (src/Common/config.h.in "${CMAKE_CURRENT_BINARY_DIR}/src/Common/config.h")
configure_file (src/Common/config_version.h.in "${CMAKE_CURRENT_BINARY_DIR}/src/Common/config_version.h")
configure_file (src/Core/config_core.h.in "${CMAKE_CURRENT_BINARY_DIR}/src/Core/config_core.h")
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src/Core)