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
9 # http://www.apache.org/licenses/LICENSE-2.0
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
18 set(GANDIVA_VERSION "${ARROW_VERSION}")
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)
26 add_dependencies(gandiva-all gandiva gandiva-tests gandiva-benchmarks)
28 find_package(LLVMAlt REQUIRED)
30 if(LLVM_VERSION_MAJOR LESS "10")
31 set(GANDIVA_CXX_STANDARD ${CMAKE_CXX_STANDARD})
33 # LLVM 10 or later requires C++ 14
34 if(CMAKE_CXX_STANDARD LESS 14)
35 set(GANDIVA_CXX_STANDARD 14)
37 set(GANDIVA_CXX_STANDARD ${CMAKE_CXX_STANDARD})
41 add_definitions(-DGANDIVA_LLVM_VERSION=${LLVM_VERSION_MAJOR})
43 find_package(OpenSSLAlt REQUIRED)
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")
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)
69 expression_registry.cc
70 exported_funcs_registry.cc
72 function_ir_builder.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
93 random_generator_holder.cc
94 ${GANDIVA_PRECOMPILED_CC_PATH})
96 set(GANDIVA_SHARED_PRIVATE_LINK_LIBS arrow_shared LLVM::LLVM_INTERFACE
97 ${GANDIVA_OPENSSL_LIBS})
99 set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE ${GANDIVA_OPENSSL_LIBS})
101 if(ARROW_GANDIVA_STATIC_LIBSTDCPP AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX
103 set(GANDIVA_STATIC_LINK_LIBS ${GANDIVA_STATIC_LINK_LIBS} -static-libstdc++
108 # # Symbols that need to be made public in gandiva.dll for LLVM IR
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}")
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}")
122 add_arrow_lib(gandiva
130 "$<$<COMPILE_LANGUAGE:CXX>:gandiva/pch.h>"
137 $<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
138 ${GANDIVA_OPENSSL_INCLUDE_DIR}
139 ${UTF8PROC_INCLUDE_DIR}
141 ${GANDIVA_SHARED_LINK_FLAGS}
144 SHARED_PRIVATE_LINK_LIBS
145 ${GANDIVA_SHARED_PRIVATE_LINK_LIBS}
147 ${GANDIVA_STATIC_LINK_LIBS})
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})
154 if(ARROW_BUILD_STATIC AND WIN32)
155 target_compile_definitions(gandiva_static PUBLIC GANDIVA_STATIC)
158 add_dependencies(gandiva ${GANDIVA_LIBRARIES})
160 arrow_install_all_headers("gandiva")
162 set(GANDIVA_STATIC_TEST_LINK_LIBS gandiva_static ${ARROW_TEST_LINK_LIBS})
164 set(GANDIVA_SHARED_TEST_LINK_LIBS gandiva_shared ${ARROW_TEST_LINK_LIBS})
166 function(ADD_GANDIVA_TEST REL_TEST_NAME)
167 set(options USE_STATIC_LINKING)
169 set(multi_value_args)
170 cmake_parse_arguments(ARG
173 "${multi_value_args}"
186 ${ARG_UNPARSED_ARGUMENTS})
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}
194 ${GANDIVA_STATIC_TEST_LINK_LIBS}
195 ${ARG_UNPARSED_ARGUMENTS})
197 add_test_case(${REL_TEST_NAME}
200 ${GANDIVA_SHARED_TEST_LINK_LIBS}
201 ${ARG_UNPARSED_ARGUMENTS})
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})
209 set(GANDIVA_INTERNALS_TEST_ARGUMENTS)
212 GANDIVA_INTERNALS_TEST_ARGUMENTS
215 ${GANDIVA_OPENSSL_LIBS})
217 add_gandiva_test(internals-test
219 bitmap_accumulator_test.cc
221 function_registry_test.cc
222 function_signature_test.cc
224 llvm_generator_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
234 replace_holder_test.cc
235 decimal_type_util_test.cc
236 random_generator_holder_test.cc
238 gdv_function_stubs_test.cc
241 ${GANDIVA_OPENSSL_LIBS}
243 $<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
244 ${GANDIVA_INTERNALS_TEST_ARGUMENTS}
245 ${GANDIVA_OPENSSL_INCLUDE_DIR}
246 ${UTF8PROC_INCLUDE_DIR})
248 if(ARROW_GANDIVA_JAVA)
249 add_subdirectory(jni)
252 add_subdirectory(precompiled)
253 add_subdirectory(tests)