# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Arrow(CMakePackage, CudaPackage):
"""A cross-language development platform for in-memory data.
This package contains the C++ bindings.
"""
homepage = "https://arrow.apache.org"
url = "https://github.com/apache/arrow/archive/apache-arrow-0.9.0.tar.gz"
license("Apache-2.0")
version("14.0.1", sha256="a48e54a09d58168bc04d86b13e7dab04f0aaba18a6f7e4dadf3e9c7bb835c8f1")
version("14.0.0", sha256="39e3388bbaba23faa7a5e8a82ebba7fe4c38ace2c394d6a3f26559715b30f401")
version("13.0.0", sha256="99c27e6a517c750f29c3e6b264836e31251bb8e978dbbf11316680ca3eb8ebda")
version("12.0.1", sha256="f01b76a42ceb30409e7b1953ef64379297dd0c08502547cae6aaafd2c4a4d92e")
version("12.0.0", sha256="f25901c486e1e79cde8b78b3e7b1d889919f942549996003a7341a8ee86addaa")
version("11.0.0", sha256="4a8c0c3d5b39ca81f4a636a41863f1cf5e0ed199f994bf5ead0854ca037eb741")
version("10.0.1", sha256="28c3e0402bc1c3c1e047b6e26cedb8d1d89b2b9497d576af24b0b700eef11701")
version("9.0.0", sha256="bb187b4b0af8dcc027fffed3700a7b891c9f76c9b63ad8925b4afb8257a2bb1b")
version("8.0.0", sha256="19ece12de48e51ce4287d2dee00dc358fbc5ff02f41629d16076f77b8579e272")
version("7.0.0", sha256="57e13c62f27b710e1de54fd30faed612aefa22aa41fa2c0c3bacd204dd18a8f3")
version("4.0.1", sha256="79d3e807df4a179cfab1e7a1ab5f79d95f7b72ac2c33aba030febd125d77eb3b")
version("3.0.0", sha256="fc461c4f0a60e7470a7c58b28e9344aa8fb0be5cc982e9658970217e084c3a82")
version("0.17.1", sha256="ecb6da20f9288c0ca31f9b457ffdd460198765a8af27c1cac4b1382a8d130f86")
version("0.15.1", sha256="ab1c0d371a10b615eccfcead71bb79832245d788f4834cc6b278c03c3872d593")
version("0.15.0", sha256="d1072d8c4bf9166949f4b722a89350a88b7c8912f51642a5d52283448acdfd58")
version("0.14.1", sha256="69d9de9ec60a3080543b28a5334dbaf892ca34235b8bd8f8c1c01a33253926c1")
version("0.12.1", sha256="aae68622edc3dcadaa16b2d25ae3f00290d5233100321993427b03bcf5b1dd3b")
version("0.11.0", sha256="0ac629a7775d86108e403eb66d9f1a3d3bdd6b3a497a86228aa4e8143364b7cc")
version("0.9.0", sha256="65f89a3910b6df02ac71e4d4283db9b02c5b3f1e627346c7b6a5982ae994af91")
version("0.8.0", sha256="c61a60c298c30546fc0b418a35be66ef330fb81b06c49928acca7f1a34671d54")
depends_on("boost@1.60: +filesystem +system")
depends_on("cmake@3.2.0:", type="build")
depends_on("flatbuffers")
depends_on("llvm@:11 +clang", when="+gandiva @:3", type="build")
depends_on("llvm@:12 +clang", when="+gandiva @:4", type="build")
depends_on("llvm@:13 +clang", when="+gandiva @:7", type="build")
depends_on("llvm@:14 +clang", when="+gandiva @8:", type="build")
depends_on("lz4", when="+lz4")
depends_on("ninja", type="build")
depends_on("openssl", when="+gandiva @6.0.0:")
depends_on("openssl", when="@4.0.0:")
depends_on("orc", when="+orc")
depends_on("protobuf", when="+gandiva")
depends_on("py-numpy", when="+python")
depends_on("python", when="+python")
depends_on("rapidjson")
depends_on("re2+shared", when="+compute")
depends_on("re2+shared", when="+gandiva")
depends_on("re2+shared", when="+python")
depends_on("snappy~shared", when="+snappy @9:")
depends_on("snappy~shared", when="@8:")
depends_on("thrift+pic", when="+parquet")
depends_on("utf8proc@2.7.0: +shared", when="+compute")
depends_on("utf8proc@2.7.0: +shared", when="+gandiva")
depends_on("utf8proc@2.7.0: +shared", when="+python")
depends_on("xsimd@8.1.0:", when="@9.0.0:")
depends_on("zlib-api", when="+zlib @9:")
depends_on("zlib-api", when="@:8")
conflicts("^zlib~pic")
depends_on("zstd", when="+zstd @9:")
depends_on("zstd", when="@:8")
variant("brotli", default=False, description="Build support for Brotli compression")
variant(
"build_type",
default="Release",
description="CMake build type",
values=("Debug", "FastDebug", "Release"),
)
variant(
"compute", default=False, description="Computational kernel functions and other support"
)
variant("gandiva", default=False, description="Build Gandiva support")
variant(
"glog",
default=False,
description="Build libraries with glog support for pluggable logging",
)
variant(
"hdfs",
default=False,
description="Integration with libhdfs for accessing the Hadoop Filesystem",
)
variant("ipc", default=True, description="Build the Arrow IPC extensions")
variant("jemalloc", default=False, description="Build the Arrow jemalloc-based allocator")
variant("lz4", default=False, description="Build support for lz4 compression")
variant("orc", default=False, description="Build integration with Apache ORC")
variant("parquet", default=False, description="Build Parquet interface")
variant("python", default=False, description="Build Python interface")
variant("shared", default=True, description="Build shared libs")
variant("snappy", default=False, description="Build support for Snappy compression")
variant("tensorflow", default=False, description="Build Arrow with TensorFlow support enabled")
variant("zlib", default=False, description="Build support for zlib (gzip) compression")
variant("zstd", default=False, description="Build support for ZSTD compression")
root_cmakelists_dir = "cpp"
def patch(self):
"""Prevent `-isystem /usr/include` from appearing, since this confuses gcc."""
filter_file(
r"(include_directories\()SYSTEM ", r"\1", "cpp/cmake_modules/ThirdpartyToolchain.cmake"
)
if self.spec.satisfies("@:2.0.0"):
filter_file(
r'set\(ARROW_LLVM_VERSIONS "10" "9" "8" "7"\)',
'set(ARROW_LLVM_VERSIONS "11" "10" "9" "8" "7")',
"cpp/CMakeLists.txt",
)
filter_file(
r"#include <llvm/Support/DynamicLibrary\.h>",
r"#include <llvm/Support/DynamicLibrary.h>"
+ "\n"
+ r"#include <llvm/Support/Host.h>",
"cpp/src/gandiva/engine.cc",
)
def cmake_args(self):
args = ["-DARROW_DEPENDENCY_SOURCE=SYSTEM", "-DARROW_NO_DEPRECATED_API=ON"]
if self.spec.satisfies("+shared"):
args.append(self.define("BUILD_SHARED", "ON"))
else:
args.append(self.define("BUILD_SHARED", "OFF"))
args.append(self.define("BUILD_STATIC", "ON"))
if self.spec.satisfies("@:0.11.99"):
# ARROW_USE_SSE was removed in 0.12
# see https://issues.apache.org/jira/browse/ARROW-3844
args.append(self.define("ARROW_USE_SSE", "ON"))
args.append(self.define_from_variant("ARROW_COMPUTE", "compute"))
args.append(self.define_from_variant("ARROW_CUDA", "cuda"))
args.append(self.define_from_variant("ARROW_GANDIVA", "gandiva"))
args.append(self.define_from_variant("ARROW_GLOG", "glog"))
args.append(self.define_from_variant("ARROW_HDFS", "hdfs"))
args.append(self.define_from_variant("ARROW_IPC", "ipc"))
args.append(self.define_from_variant("ARROW_JEMALLOC", "jemalloc"))
args.append(self.define_from_variant("ARROW_ORC", "orc"))
args.append(self.define_from_variant("ARROW_PARQUET", "parquet"))
args.append(self.define_from_variant("ARROW_PYTHON", "python"))
args.append(self.define_from_variant("ARROW_TENSORFLOW", "tensorflow"))
args.append(self.define_from_variant("ARROW_WITH_BROTLI", "brotli"))
args.append(self.define_from_variant("ARROW_WITH_LZ4", "lz4"))
args.append(self.define_from_variant("ARROW_WITH_SNAPPY", "snappy"))
args.append(self.define_from_variant("ARROW_WITH_ZLIB", "zlib"))
args.append(self.define_from_variant("ARROW_WITH_ZSTD", "zstd"))
if not self.spec.dependencies("re2"):
args.append(self.define("ARROW_WITH_RE2", False))
if not self.spec.dependencies("utf8proc"):
args.append(self.define("ARROW_WITH_UTF8PROC", False))
if self.spec.satisfies("@:8"):
args.extend(
[
self.define("FLATBUFFERS_HOME", self.spec["flatbuffers"].prefix),
self.define("RAPIDJSON_HOME", self.spec["rapidjson"].prefix),
self.define("ZSTD_HOME", self.spec["zstd"].prefix),
self.define("ZLIB_HOME", self.spec["zlib-api"].prefix),
self.define("ZLIB_LIBRARIES", self.spec["zlib-api"].libs),
]
)
if self.spec.satisfies("+snappy"):
args.append(self.define("SNAPPY_HOME", self.spec["snappy"].prefix))
return args