Skip to content

Commit f3b60bf

Browse files
committed
Some basic fixes to build system, clang IR generation, suppress endogenous LLVM warnings with MSVC 2017
Lots of visibility fixes. Add CountTrailingZeros compatibility bit-util function More Windows fixes, date/time compatibility More fixes, make sure gandiva-precompiled tests are part of gandiva-tests label More date/time fixes Linting fixes Fix date_time_test.cc Restore accidental change to arrow/CMakeLists.txt Fix pragma Remove debugging output Add missing include for date.h on non Windows It's needed on all platforms. Compile again after rebasing. Make DecimalTypeUtil internal Code review comments IR compilation fixes since Arrow symbols are being compiled to bitcode Don't use static linking in any gandiva unit tests Linux fixes Change-Id: Id40cf6a034bffd20433445857245b96f9ed916f0 Move ARROW_BUILD_GANDIVA to global scope in appveyor.yml Change-Id: I678c0933912d8695b264b361070f29a992b1f255 Fixes after rebase ARROW-3846: minor fixes (#5) * ARROW-3846: minor fixes * ARROW-3846: comment out new test
1 parent 7d1a9e7 commit f3b60bf

58 files changed

Lines changed: 582 additions & 191 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

appveyor.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ matrix:
4747
environment:
4848
global:
4949
USE_CLCACHE: true
50+
ARROW_BUILD_GANDIVA: "OFF"
5051
PYTHON: "3.6"
5152
ARCH: "64"
5253

ci/appveyor-cpp-build.bat

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ conda create -n arrow -q -y -c conda-forge ^
104104

105105
call activate arrow
106106

107+
set ARROW_LLVM_VERSION=6.0.1
108+
109+
if "%ARROW_BUILD_GANDIVA%" == "ON" (
110+
@rem Install llvmdev in the toolchain if building gandiva.dll
111+
conda install -q -y llvmdev=%ARROW_LLVM_VERSION% || exit /B
112+
)
113+
107114
@rem Use Boost from Anaconda
108115
set BOOST_ROOT=%CONDA_PREFIX%\Library
109116
set BOOST_LIBRARYDIR=%CONDA_PREFIX%\Library\lib

ci/cpp-msvc-build-main.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ cmake -G "%GENERATOR%" %CMAKE_ARGS% ^
5555
-DARROW_VERBOSE_THIRDPARTY_BUILD=ON ^
5656
-DARROW_CXXFLAGS="%ARROW_CXXFLAGS%" ^
5757
-DCMAKE_CXX_FLAGS_RELEASE="/MD %CMAKE_CXX_FLAGS_RELEASE%" ^
58+
-DARROW_GANDIVA=%ARROW_BUILD_GANDIVA% ^
5859
-DARROW_PARQUET=ON ^
5960
-DARROW_PYTHON=ON ^
6061
.. || exit /B

cpp/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,12 @@ Note that this requires linking Boost statically"
309309

310310
set(BROTLI_MSVC_STATIC_LIB_SUFFIX "-static" CACHE STRING
311311
"Brotli static lib suffix used on Windows with MSVC (default -static)")
312+
set(PROTOBUF_MSVC_STATIC_LIB_SUFFIX "" CACHE STRING
313+
"Protobuf static lib suffix used on Windows with MSVC (default is empty string)")
314+
set(RE2_MSVC_STATIC_LIB_SUFFIX "_static" CACHE STRING
315+
"re2 static lib suffix used on Windows with MSVC (default is _static)")
312316
set(SNAPPY_MSVC_STATIC_LIB_SUFFIX "_static" CACHE STRING
313-
"Snappy static lib suffix used on Windows with MSVC (default is empty string)")
317+
"Snappy static lib suffix used on Windows with MSVC (default is _static)")
314318
set(LZ4_MSVC_STATIC_LIB_SUFFIX "_static" CACHE STRING
315319
"Lz4 static lib suffix used on Windows with MSVC (default _static)")
316320
set(ZSTD_MSVC_STATIC_LIB_SUFFIX "_static" CACHE STRING

cpp/cmake_modules/FindProtobuf.cmake

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ if (EXISTS "${_protobuf_path}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
4444
set (lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}" ${lib_dirs})
4545
endif ()
4646

47-
find_library (PROTOBUF_LIBRARY NAMES protobuf PATHS
47+
find_library (PROTOBUF_LIBRARY NAMES protobuf libprotobuf PATHS
4848
${_protobuf_path}
4949
NO_DEFAULT_PATH
5050
PATH_SUFFIXES ${lib_dirs})
5151

52-
find_library (PROTOC_LIBRARY NAMES protoc PATHS
52+
find_library (PROTOC_LIBRARY NAMES protoc libprotoc PATHS
5353
${_protobuf_path}
5454
NO_DEFAULT_PATH
5555
PATH_SUFFIXES ${lib_dirs})
@@ -66,7 +66,7 @@ if (PROTOBUF_INCLUDE_DIR AND PROTOBUF_LIBRARY AND PROTOC_LIBRARY AND PROTOBUF_EX
6666
get_filename_component (PROTOBUF_LIBS ${PROTOBUF_LIBRARY} PATH)
6767
set (PROTOBUF_LIB_NAME protobuf)
6868
set (PROTOC_LIB_NAME protoc)
69-
set (PROTOBUF_STATIC_LIB ${PROTOBUF_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PROTOBUF_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
69+
set (PROTOBUF_STATIC_LIB ${PROTOBUF_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PROTOBUF_LIB_NAME}${PROTOBUF_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
7070
set (PROTOC_STATIC_LIB ${PROTOBUF_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PROTOC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
7171
else ()
7272
set (PROTOBUF_FOUND FALSE)
@@ -81,7 +81,7 @@ if (PROTOBUF_FOUND)
8181
message (STATUS "Found the Protoc executable: ${PROTOBUF_EXECUTABLE}")
8282
else()
8383
if (_protobuf_path)
84-
set (PROTOBUF_ERR_MSG "Could not find Protobuf. Looked in ${_protobuf_path}.")
84+
set (PROTOBUF_ERR_MSG "Could not find Protobuf. Looked in ${_protobuf_path}")
8585
else ()
8686
set (PROTOBUF_ERR_MSG "Could not find Protobuf in system search paths.")
8787
endif()
@@ -100,4 +100,3 @@ mark_as_advanced (
100100
PROTOBUF_STATIC_LIB
101101
PROTOC_STATIC_LIB
102102
)
103-

cpp/cmake_modules/FindRE2.cmake

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,18 @@ if (EXISTS "${_re2_path}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
4545
set (lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}" ${lib_dirs})
4646
endif ()
4747

48-
find_library(RE2_STATIC_LIB NAMES libre2${CMAKE_STATIC_LIBRARY_SUFFIX}
48+
set(RE2_LIB_NAME re2)
49+
set(RE2_STATIC_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}${RE2_LIB_NAME}${RE2_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
50+
set(RE2_SHARED_LIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${RE2_LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
51+
52+
find_library(RE2_STATIC_LIB NAMES ${RE2_STATIC_LIB_NAME}
4953
PATHS ${_re2_path}
5054
NO_DEFAULT_PATH
5155
PATH_SUFFIXES ${lib_dirs}
5256
DOC "Google's re2 regex static library"
5357
)
5458

55-
find_library(RE2_SHARED_LIB NAMES libre2${CMAKE_SHARED_LIBRARY_SUFFIX}
59+
find_library(RE2_SHARED_LIB NAMES ${RE2_SHARED_LIB_NAME}
5660
PATHS ${_re2_path}
5761
NO_DEFAULT_PATH
5862
PATH_SUFFIXES ${lib_dirs}

cpp/src/arrow/util/bit-util-test.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,30 @@ TEST(BitUtil, CountLeadingZeros) {
788788
EXPECT_EQ(BitUtil::CountLeadingZeros(U64(ULLONG_MAX)), 0);
789789
}
790790

791+
TEST(BitUtil, CountTrailingZeros) {
792+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(0)), 32);
793+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(1) << 31), 31);
794+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(1) << 30), 30);
795+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(1) << 29), 29);
796+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(1) << 28), 28);
797+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(8)), 3);
798+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(4)), 2);
799+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(2)), 1);
800+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(1)), 0);
801+
EXPECT_EQ(BitUtil::CountTrailingZeros(U32(ULONG_MAX)), 0);
802+
803+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(0)), 64);
804+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(1) << 63), 63);
805+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(1) << 62), 62);
806+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(1) << 61), 61);
807+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(1) << 60), 60);
808+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(8)), 3);
809+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(4)), 2);
810+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(2)), 1);
811+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(1)), 0);
812+
EXPECT_EQ(BitUtil::CountTrailingZeros(U64(ULLONG_MAX)), 0);
813+
}
814+
791815
#undef U32
792816
#undef U64
793817

cpp/src/arrow/util/bit-util.h

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#if defined(_MSC_VER)
4646
#include <intrin.h>
4747
#pragma intrinsic(_BitScanReverse)
48+
#pragma intrinsic(_BitScanForward)
4849
#define ARROW_BYTE_SWAP64 _byteswap_uint64
4950
#define ARROW_BYTE_SWAP32 _byteswap_ulong
5051
#else
@@ -182,6 +183,56 @@ static inline int CountLeadingZeros(uint64_t value) {
182183
#endif
183184
}
184185

186+
static inline int CountTrailingZeros(uint32_t value) {
187+
#if defined(__clang__) || defined(__GNUC__)
188+
if (value == 0) return 32;
189+
return static_cast<int>(__builtin_ctzl(value));
190+
#elif defined(_MSC_VER)
191+
unsigned long index; // NOLINT
192+
if (_BitScanForward(&index, value)) {
193+
return static_cast<int>(index);
194+
} else {
195+
return 32;
196+
}
197+
#else
198+
int bitpos = 0;
199+
if (value) {
200+
while (value & 1 == 0) {
201+
value >>= 1;
202+
++bitpos;
203+
}
204+
} else {
205+
bitpos = 32;
206+
}
207+
return bitpos;
208+
#endif
209+
}
210+
211+
static inline int CountTrailingZeros(uint64_t value) {
212+
#if defined(__clang__) || defined(__GNUC__)
213+
if (value == 0) return 64;
214+
return static_cast<int>(__builtin_ctzll(value));
215+
#elif defined(_MSC_VER)
216+
unsigned long index; // NOLINT
217+
if (_BitScanForward64(&index, value)) {
218+
return static_cast<int>(index);
219+
} else {
220+
return 64;
221+
}
222+
#else
223+
int bitpos = 0;
224+
if (value) {
225+
while (value & 1 == 0) {
226+
value >>= 1;
227+
++bitpos;
228+
}
229+
} else {
230+
bitpos = 64;
231+
}
232+
return bitpos;
233+
#endif
234+
}
235+
185236
// Returns the minimum number of bits needed to represent an unsigned value
186237
static inline int NumRequiredBits(uint64_t x) { return 64 - CountLeadingZeros(x); }
187238

cpp/src/gandiva/CMakeLists.txt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ set(GANDIVA_BC_INSTALL_DIR
3232
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/gandiva)
3333

3434
set(GANDIVA_BC_FILE_NAME irhelpers.bc)
35-
set(GANDIVA_BC_INSTALL_PATH ${GANDIVA_BC_INSTALL_DIR}/${GANDIVA_BC_FILE_NAME})
36-
set(GANDIVA_BC_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${GANDIVA_BC_FILE_NAME})
35+
set(GANDIVA_BC_INSTALL_PATH "${GANDIVA_BC_INSTALL_DIR}/${GANDIVA_BC_FILE_NAME}")
36+
set(GANDIVA_BC_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/${GANDIVA_BC_FILE_NAME}")
3737
install(FILES
3838
${GANDIVA_BC_OUTPUT_PATH}
3939
DESTINATION ${GANDIVA_BC_INSTALL_DIR})
@@ -95,16 +95,35 @@ if (ARROW_GANDIVA_STATIC_LIBSTDCPP
9595
-static-libgcc)
9696
endif()
9797

98+
# if (MSVC)
99+
# # Symbols that need to be made public in gandiva.dll for LLVM IR
100+
# # compilation
101+
# set(MSVC_SYMBOL_EXPORTS _Init_thread_header)
102+
# foreach(SYMBOL ${MSVC_SYMBOL_EXPORTS})
103+
# set(GANDIVA_SHARED_LINK_FLAGS "${GANDIVA_SHARED_LINK_FLAGS} /EXPORT:${SYMBOL}")
104+
# endforeach()
105+
# endif()
106+
98107
ADD_ARROW_LIB(gandiva
99108
SOURCES ${SRC_FILES}
100109
OUTPUTS GANDIVA_LIBRARIES
101110
DEPENDENCIES arrow_dependencies precompiled
102111
EXTRA_INCLUDES
103112
$<TARGET_PROPERTY:LLVM::LLVM_INTERFACE,INTERFACE_INCLUDE_DIRECTORIES>
113+
SHARED_LINK_FLAGS ${GANDIVA_SHARED_LINK_FLAGS}
104114
SHARED_LINK_LIBS arrow_shared
105115
SHARED_PRIVATE_LINK_LIBS ${GANDIVA_SHARED_PRIVATE_LINK_LIBS}
106116
STATIC_LINK_LIBS ${GANDIVA_STATIC_LINK_LIBS})
107117

118+
foreach(LIB_TARGET ${GANDIVA_LIBRARIES})
119+
target_compile_definitions(${LIB_TARGET}
120+
PRIVATE GANDIVA_EXPORTING)
121+
endforeach()
122+
123+
if (ARROW_BUILD_STATIC AND WIN32)
124+
target_compile_definitions(gandiva_static PUBLIC GANDIVA_STATIC)
125+
endif()
126+
108127
add_dependencies(gandiva ${GANDIVA_LIBRARIES})
109128

110129
# install for gandiva

cpp/src/gandiva/annotator.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@
2727
#include "gandiva/eval_batch.h"
2828
#include "gandiva/gandiva_aliases.h"
2929
#include "gandiva/logging.h"
30+
#include "gandiva/visibility.h"
3031

3132
namespace gandiva {
3233

3334
/// \brief annotate the arrow fields in an expression, and use that
3435
/// to convert the incoming arrow-format row batch to an EvalBatch.
35-
class Annotator {
36+
class GANDIVA_EXPORT Annotator {
3637
public:
3738
Annotator() : buffer_count_(0), local_bitmap_count_(0) {}
3839

0 commit comments

Comments
 (0)