@@ -31,6 +31,7 @@ if (NOT "$ENV{ARROW_BUILD_TOOLCHAIN}" STREQUAL "")
3131 set (BROTLI_HOME "$ENV{ARROW_BUILD_TOOLCHAIN} " )
3232 set (LZ4_HOME "$ENV{ARROW_BUILD_TOOLCHAIN} " )
3333 set (ZSTD_HOME "$ENV{ARROW_BUILD_TOOLCHAIN} " )
34+ set (THRIFT_HOME "$ENV{ARROW_BUILD_TOOLCHAIN} " )
3435
3536 if (NOT DEFINED ENV{BOOST_ROOT})
3637 # Since we have to set this in the environment, we check whether
@@ -79,6 +80,10 @@ if (DEFINED ENV{PROTOBUF_HOME})
7980 set (PROTOBUF_HOME "$ENV{PROTOBUF_HOME} " )
8081endif ()
8182
83+ if (DEFINED ENV{THRIFT_HOME})
84+ set (THRIFT_HOME "$ENV{THRIFT_HOME} " )
85+ endif ()
86+
8287# ----------------------------------------------------------------------
8388# Versions and URLs for toolchain builds, which also can be used to configure
8489# offline builds
@@ -192,6 +197,12 @@ else()
192197 set (ORC_SOURCE_URL "https://github.com/apache/orc/archive/rel/release-${ORC_VERSION} .tar.gz" )
193198endif ()
194199
200+ if (DEFINED ENV{ARROW_THRIFT_URL})
201+ set (THRIFT_SOURCE_URL "$ENV{ARROW_THRIFT_URL} " )
202+ else ()
203+ set (THRIFT_SOURCE_URL "http://archive.apache.org/dist/thrift/${THRIFT_VERSION} /thrift-${THRIFT_VERSION} .tar.gz" )
204+ endif ()
205+
195206# ----------------------------------------------------------------------
196207# ExternalProject options
197208
@@ -1084,3 +1095,136 @@ if (ARROW_ORC)
10841095 endif ()
10851096
10861097endif ()
1098+
1099+ # ----------------------------------------------------------------------
1100+ # Thrift
1101+
1102+ if (ARROW_HIVESERVER2)
1103+
1104+ # find thrift headers and libs
1105+ find_package (Thrift )
1106+
1107+ if (NOT THRIFT_FOUND)
1108+ set (ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /zlib_ep/src/zlib_ep-install" )
1109+ set (ZLIB_HOME "${ZLIB_PREFIX} " )
1110+ set (ZLIB_INCLUDE_DIR "${ZLIB_PREFIX} /include" )
1111+ if (MSVC )
1112+ if (${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG" )
1113+ set (ZLIB_STATIC_LIB_NAME zlibstaticd.lib)
1114+ else ()
1115+ set (ZLIB_STATIC_LIB_NAME zlibstatic.lib)
1116+ endif ()
1117+ else ()
1118+ set (ZLIB_STATIC_LIB_NAME libz.a)
1119+ endif ()
1120+ set (ZLIB_STATIC_LIB "${ZLIB_PREFIX} /lib/${ZLIB_STATIC_LIB_NAME} " )
1121+ set (ZLIB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE }
1122+ -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}
1123+ -DCMAKE_C_FLAGS=${EP_C_FLAGS}
1124+ -DBUILD_SHARED_LIBS=OFF )
1125+ ExternalProject_Add (zlib_ep
1126+ URL "http://zlib.net/fossils/zlib-1.2.8.tar.gz"
1127+ BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB} "
1128+ ${ZLIB_BUILD_BYPRODUCTS}
1129+ ${EP_LOG_OPTIONS}
1130+ CMAKE_ARGS ${ZLIB_CMAKE_ARGS} )
1131+
1132+ set (THRIFT_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /thrift_ep/src/thrift_ep-install" )
1133+ set (THRIFT_HOME "${THRIFT_PREFIX} " )
1134+ set (THRIFT_INCLUDE_DIR "${THRIFT_PREFIX} /include" )
1135+ set (THRIFT_COMPILER "${THRIFT_PREFIX} /bin/thrift" )
1136+ set (THRIFT_CMAKE_ARGS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE } "
1137+ "-DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS} "
1138+ "-DCMAKE_C_FLAGS=${EP_C_FLAGS} "
1139+ "-DCMAKE_INSTALL_PREFIX=${THRIFT_PREFIX} "
1140+ "-DCMAKE_INSTALL_RPATH=${THRIFT_PREFIX} /lib"
1141+ "-DBUILD_SHARED_LIBS=OFF"
1142+ "-DBUILD_TESTING=OFF"
1143+ "-DBUILD_EXAMPLES=OFF"
1144+ "-DBUILD_TUTORIALS=OFF"
1145+ "-DWITH_QT4=OFF"
1146+ "-DWITH_C_GLIB=OFF"
1147+ "-DWITH_JAVA=OFF"
1148+ "-DWITH_PYTHON=OFF"
1149+ "-DWITH_HASKELL=OFF"
1150+ "-DWITH_CPP=ON"
1151+ "-DWITH_STATIC_LIB=ON"
1152+ "-DWITH_LIBEVENT=OFF"
1153+ )
1154+
1155+ # Thrift also uses boost. Forward important boost settings if there were ones passed.
1156+ if (DEFINED BOOST_ROOT)
1157+ set (THRIFT_CMAKE_ARGS ${THRIFT_CMAKE_ARGS} "-DBOOST_ROOT=${BOOST_ROOT} " )
1158+ endif ()
1159+ if (DEFINED Boost_NAMESPACE)
1160+ set (THRIFT_CMAKE_ARGS ${THRIFT_CMAKE_ARGS} "-DBoost_NAMESPACE=${Boost_NAMESPACE} " )
1161+ endif ()
1162+
1163+ set (THRIFT_STATIC_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX } thrift" )
1164+ if (MSVC )
1165+ if (ARROW_USE_STATIC_CRT)
1166+ set (THRIFT_STATIC_LIB_NAME "${THRIFT_STATIC_LIB_NAME} mt" )
1167+ set (THRIFT_CMAKE_ARGS ${THRIFT_CMAKE_ARGS} "-DWITH_MT=ON" )
1168+ else ()
1169+ set (THRIFT_STATIC_LIB_NAME "${THRIFT_STATIC_LIB_NAME} md" )
1170+ set (THRIFT_CMAKE_ARGS ${THRIFT_CMAKE_ARGS} "-DWITH_MT=OFF" )
1171+ endif ()
1172+ endif ()
1173+ if (${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG" )
1174+ set (THRIFT_STATIC_LIB_NAME "${THRIFT_STATIC_LIB_NAME} d" )
1175+ endif ()
1176+ set (THRIFT_STATIC_LIB "${THRIFT_PREFIX} /lib/${THRIFT_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX } " )
1177+
1178+ if (MSVC )
1179+ set (WINFLEXBISON_VERSION 2.4.9)
1180+ set (WINFLEXBISON_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /winflexbison_ep/src/winflexbison_ep-install" )
1181+ ExternalProject_Add (winflexbison_ep
1182+ URL https://github.com/lexxmark/winflexbison/releases/download/v.${WINFLEXBISON_VERSION} /win_flex_bison-${WINFLEXBISON_VERSION} .zip
1183+ URL_HASH MD5=a2e979ea9928fbf8567e995e9c0df765
1184+ SOURCE_DIR ${WINFLEXBISON_PREFIX}
1185+ CONFIGURE_COMMAND ""
1186+ BUILD_COMMAND ""
1187+ INSTALL_COMMAND ""
1188+ ${EP_LOG_OPTIONS} )
1189+ set (THRIFT_DEPENDENCIES ${THRIFT_DEPENDENCIES} winflexbison_ep)
1190+
1191+ set (THRIFT_CMAKE_ARGS "-DFLEX_EXECUTABLE=${WINFLEXBISON_PREFIX} /win_flex.exe"
1192+ "-DBISON_EXECUTABLE=${WINFLEXBISON_PREFIX} /win_bison.exe"
1193+ "-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} "
1194+ "-DZLIB_LIBRARY=${ZLIB_STATIC_LIB} "
1195+ "-DWITH_SHARED_LIB=OFF"
1196+ "-DWITH_PLUGIN=OFF"
1197+ ${THRIFT_CMAKE_ARGS} )
1198+ set (THRIFT_DEPENDENCIES ${THRIFT_DEPENDENCIES} zlib_ep)
1199+ elseif (APPLE )
1200+ if (DEFINED BISON_EXECUTABLE)
1201+ set (THRIFT_CMAKE_ARGS "-DBISON_EXECUTABLE=${BISON_EXECUTABLE} "
1202+ ${THRIFT_CMAKE_ARGS} )
1203+ endif ()
1204+ endif ()
1205+
1206+ ExternalProject_Add (thrift_ep
1207+ URL ${THRIFT_SOURCE_URL}
1208+ BUILD_BYPRODUCTS "${THRIFT_STATIC_LIB} " "${THRIFT_COMPILER} "
1209+ CMAKE_ARGS ${THRIFT_CMAKE_ARGS}
1210+ DEPENDS ${THRIFT_DEPENDENCIES}
1211+ ${EP_LOG_OPTIONS} )
1212+
1213+ set (THRIFT_VENDORED 1)
1214+ else ()
1215+ set (THRIFT_VENDORED 0)
1216+ endif ()
1217+
1218+ include_directories (SYSTEM ${THRIFT_INCLUDE_DIR} ${THRIFT_INCLUDE_DIR} /thrift )
1219+ message (STATUS "Thrift include dir: ${THRIFT_INCLUDE_DIR} " )
1220+ message (STATUS "Thrift static library: ${THRIFT_STATIC_LIB} " )
1221+ message (STATUS "Thrift compiler: ${THRIFT_COMPILER} " )
1222+ message (STATUS "Thrift version: ${THRIFT_VERSION} " )
1223+ add_library (thriftstatic STATIC IMPORTED )
1224+ set_target_properties (thriftstatic PROPERTIES IMPORTED_LOCATION ${THRIFT_STATIC_LIB} )
1225+
1226+ if (THRIFT_VENDORED)
1227+ add_dependencies (thriftstatic thrift_ep )
1228+ endif ()
1229+
1230+ endif () # ARROW_HIVESERVER2
0 commit comments