]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/cpp/src/gandiva/CMakeLists.txt
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / cpp / src / gandiva / CMakeLists.txt
1 # Licensed to the Apache Software Foundation (ASF) under one
2 # or more contributor license agreements. See the NOTICE file
3 # distributed with this work for additional information
4 # regarding copyright ownership. The ASF licenses this file
5 # to you under the Apache License, Version 2.0 (the
6 # "License"); you may not use this file except in compliance
7 # with the License. You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing,
12 # software distributed under the License is distributed on an
13 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 # KIND, either express or implied. See the License for the
15 # specific language governing permissions and limitations
16 # under the License.
17
18 set(GANDIVA_VERSION "${ARROW_VERSION}")
19
20 # For "make gandiva" to build everything Gandiva-related
21 add_custom_target(gandiva-all)
22 add_custom_target(gandiva)
23 add_custom_target(gandiva-tests)
24 add_custom_target(gandiva-benchmarks)
25
26 add_dependencies(gandiva-all gandiva gandiva-tests gandiva-benchmarks)
27
28 find_package(LLVMAlt REQUIRED)
29
30 if(LLVM_VERSION_MAJOR LESS "10")
31 set(GANDIVA_CXX_STANDARD ${CMAKE_CXX_STANDARD})
32 else()
33 # LLVM 10 or later requires C++ 14
34 if(CMAKE_CXX_STANDARD LESS 14)
35 set(GANDIVA_CXX_STANDARD 14)
36 else()
37 set(GANDIVA_CXX_STANDARD ${CMAKE_CXX_STANDARD})
38 endif()
39 endif()
40
41 add_definitions(-DGANDIVA_LLVM_VERSION=${LLVM_VERSION_MAJOR})
42
43 find_package(OpenSSLAlt REQUIRED)
44
45 # Set the path where the bitcode file generated, see precompiled/CMakeLists.txt
46 set(GANDIVA_PRECOMPILED_BC_PATH "${CMAKE_CURRENT_BINARY_DIR}/irhelpers.bc")
47 set(GANDIVA_PRECOMPILED_CC_PATH "${CMAKE_CURRENT_BINARY_DIR}/precompiled_bitcode.cc")
48 set(GANDIVA_PRECOMPILED_CC_IN_PATH
49 "${CMAKE_CURRENT_SOURCE_DIR}/precompiled_bitcode.cc.in")
50
51 # add_arrow_lib will look for this not yet existing file, so flag as generated
52 set_source_files_properties(${GANDIVA_PRECOMPILED_CC_PATH} PROPERTIES GENERATED TRUE)
53
54 set(SRC_FILES
55 annotator.cc
56 bitmap_accumulator.cc
57 cache.cc
58 cast_time.cc
59 configuration.cc
60 context_helper.cc
61 decimal_ir.cc
62 decimal_type_util.cc
63 decimal_xlarge.cc
64 engine.cc
65 date_utils.cc
66 expr_decomposer.cc
67 expr_validator.cc
68 expression.cc
69 expression_registry.cc
70 exported_funcs_registry.cc
71 filter.cc
72 function_ir_builder.cc
73 function_registry.cc
74 function_registry_arithmetic.cc
75 function_registry_datetime.cc
76 function_registry_hash.cc
77 function_registry_math_ops.cc
78 function_registry_string.cc
79 function_registry_timestamp_arithmetic.cc
80 function_signature.cc
81 gdv_function_stubs.cc
82 hash_utils.cc
83 llvm_generator.cc
84 llvm_types.cc
85 like_holder.cc
86 literal_holder.cc
87 projector.cc
88 regex_util.cc
89 replace_holder.cc
90 selection_vector.cc
91 tree_expr_builder.cc
92 to_date_holder.cc
93 random_generator_holder.cc
94 ${GANDIVA_PRECOMPILED_CC_PATH})
95
96 set(GANDIVA_SHARED_PRIVATE_LINK_LIBS arrow_shared LLVM::LLVM_INTERFACE
97 ${GANDIVA_OPENSSL_LIBS})
98
99 set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE ${GANDIVA_OPENSSL_LIBS})
100
101 if(ARROW_GANDIVA_STATIC_LIBSTDCPP AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX
102 ))
103 set(GANDIVA_STATIC_LINK_LIBS ${GANDIVA_STATIC_LINK_LIBS} -static-libstdc++
104 -static-libgcc)
105 endif()
106
107 # if (MSVC)
108 # # Symbols that need to be made public in gandiva.dll for LLVM IR
109 # # compilation
110 # set(MSVC_SYMBOL_EXPORTS _Init_thread_header)
111 # foreach(SYMBOL ${MSVC_SYMBOL_EXPORTS})
112 # set(GANDIVA_SHARED_LINK_FLAGS "${GANDIVA_SHARED_LINK_FLAGS} /EXPORT:${SYMBOL}")
113 # endforeach()
114 # endif()
115 if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
116 set(GANDIVA_VERSION_SCRIPT_FLAGS
117 "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/symbols.map")
118 set(GANDIVA_SHARED_LINK_FLAGS
119 "${GANDIVA_SHARED_LINK_FLAGS} ${GANDIVA_VERSION_SCRIPT_FLAGS}")
120 endif()
121
122 add_arrow_lib(gandiva
123 CMAKE_PACKAGE_NAME
124 Gandiva
125 PKG_CONFIG_NAME
126 gandiva
127 SOURCES
128 ${SRC_FILES}
129 PRECOMPILED_HEADERS
130 "$<$<COMPILE_LANGUAGE:CXX>:gandiva/pch.h>"
131 OUTPUTS
132 GANDIVA_LIBRARIES
133 DEPENDENCIES
134 arrow_dependencies
135 precompiled
136 EXTRA_INCLUDES
137 $<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
138 ${GANDIVA_OPENSSL_INCLUDE_DIR}
139 ${UTF8PROC_INCLUDE_DIR}
140 SHARED_LINK_FLAGS
141 ${GANDIVA_SHARED_LINK_FLAGS}
142 SHARED_LINK_LIBS
143 arrow_shared
144 SHARED_PRIVATE_LINK_LIBS
145 ${GANDIVA_SHARED_PRIVATE_LINK_LIBS}
146 STATIC_LINK_LIBS
147 ${GANDIVA_STATIC_LINK_LIBS})
148
149 foreach(LIB_TARGET ${GANDIVA_LIBRARIES})
150 target_compile_definitions(${LIB_TARGET} PRIVATE GANDIVA_EXPORTING)
151 set_target_properties(${LIB_TARGET} PROPERTIES CXX_STANDARD ${GANDIVA_CXX_STANDARD})
152 endforeach()
153
154 if(ARROW_BUILD_STATIC AND WIN32)
155 target_compile_definitions(gandiva_static PUBLIC GANDIVA_STATIC)
156 endif()
157
158 add_dependencies(gandiva ${GANDIVA_LIBRARIES})
159
160 arrow_install_all_headers("gandiva")
161
162 set(GANDIVA_STATIC_TEST_LINK_LIBS gandiva_static ${ARROW_TEST_LINK_LIBS})
163
164 set(GANDIVA_SHARED_TEST_LINK_LIBS gandiva_shared ${ARROW_TEST_LINK_LIBS})
165
166 function(ADD_GANDIVA_TEST REL_TEST_NAME)
167 set(options USE_STATIC_LINKING)
168 set(one_value_args)
169 set(multi_value_args)
170 cmake_parse_arguments(ARG
171 "${options}"
172 "${one_value_args}"
173 "${multi_value_args}"
174 ${ARGN})
175
176 if(NO_TESTS)
177 return()
178 endif()
179
180 set(TEST_ARGUMENTS
181 ENABLED
182 PREFIX
183 "gandiva"
184 LABELS
185 "gandiva-tests"
186 ${ARG_UNPARSED_ARGUMENTS})
187
188 # and uses less disk space, but in some cases we need to force static
189 # linking (see rationale below).
190 if(ARG_USE_STATIC_LINKING OR ARROW_TEST_LINKAGE STREQUAL "static")
191 add_test_case(${REL_TEST_NAME}
192 ${TEST_ARGUMENTS}
193 STATIC_LINK_LIBS
194 ${GANDIVA_STATIC_TEST_LINK_LIBS}
195 ${ARG_UNPARSED_ARGUMENTS})
196 else()
197 add_test_case(${REL_TEST_NAME}
198 ${TEST_ARGUMENTS}
199 STATIC_LINK_LIBS
200 ${GANDIVA_SHARED_TEST_LINK_LIBS}
201 ${ARG_UNPARSED_ARGUMENTS})
202 endif()
203
204 set(TEST_NAME gandiva-${REL_TEST_NAME})
205 string(REPLACE "_" "-" TEST_NAME ${TEST_NAME})
206 set_target_properties(${TEST_NAME} PROPERTIES CXX_STANDARD ${GANDIVA_CXX_STANDARD})
207 endfunction()
208
209 set(GANDIVA_INTERNALS_TEST_ARGUMENTS)
210 if(WIN32)
211 list(APPEND
212 GANDIVA_INTERNALS_TEST_ARGUMENTS
213 EXTRA_LINK_LIBS
214 LLVM::LLVM_INTERFACE
215 ${GANDIVA_OPENSSL_LIBS})
216 endif()
217 add_gandiva_test(internals-test
218 SOURCES
219 bitmap_accumulator_test.cc
220 engine_llvm_test.cc
221 function_registry_test.cc
222 function_signature_test.cc
223 llvm_types_test.cc
224 llvm_generator_test.cc
225 annotator_test.cc
226 tree_expr_test.cc
227 expr_decomposer_test.cc
228 expression_registry_test.cc
229 selection_vector_test.cc
230 greedy_dual_size_cache_test.cc
231 to_date_holder_test.cc
232 simple_arena_test.cc
233 like_holder_test.cc
234 replace_holder_test.cc
235 decimal_type_util_test.cc
236 random_generator_holder_test.cc
237 hash_utils_test.cc
238 gdv_function_stubs_test.cc
239 EXTRA_DEPENDENCIES
240 LLVM::LLVM_INTERFACE
241 ${GANDIVA_OPENSSL_LIBS}
242 EXTRA_INCLUDES
243 $<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
244 ${GANDIVA_INTERNALS_TEST_ARGUMENTS}
245 ${GANDIVA_OPENSSL_INCLUDE_DIR}
246 ${UTF8PROC_INCLUDE_DIR})
247
248 if(ARROW_GANDIVA_JAVA)
249 add_subdirectory(jni)
250 endif()
251
252 add_subdirectory(precompiled)
253 add_subdirectory(tests)