summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/arrow/package.py
blob: c9544e3f0a171268aa14dcd9a293f1c7f1fe855d (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                         
                                                                         
 
                                              
 
                           

 
                                       




                                                                
                                         

                                                                             

                         





                                                                                                
                                                                                                
                                                                                               












                                                                                                
                                                 
                                            










                                                                    
                                          
                                        
                           

                                             
                                            

                                                   
                                             

                                                          
                                                         
                                              


                                            



                                                                                        





                                                 

















                                                                                                
                                                                            





                                                                                                   

                               

                    



                                                                                                   
 












                                                                 
 

                                                                                   
 

                                                          
             
























                                                                               




                                                                  
                                      








                                                                                     

                                              
                                                                                   
 
                   
# 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