Parcourir la source

add apache arrow. (#1045)

* add apache arrow.

* use add_configs directly.

* try to fix CMAKE_SYSTEM_PROCESSOR not set when using clang.

* add platforms bsd.
Chen Yufei il y a 3 ans
Parent
commit
3b8e1fe540
1 fichiers modifiés avec 110 ajouts et 0 suppressions
  1. 110 0
      packages/a/arrow/xmake.lua

+ 110 - 0
packages/a/arrow/xmake.lua

@@ -0,0 +1,110 @@
+package("arrow")
+
+    set_homepage("https://arrow.apache.org/")
+    set_description("Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing")
+    set_license("Apache-2.0")
+
+    add_urls("https://github.com/apache/arrow/archive/refs/tags/apache-arrow-$(version).tar.gz",
+             "https://github.com/apache/arrow.git")
+    add_versions('7.0.0', '57e13c62f27b710e1de54fd30faed612aefa22aa41fa2c0c3bacd204dd18a8f3')
+
+    add_configs(csv,      {description = "CSV reader module", default = true, type = "boolean"})
+    add_configs(json,     {description = "JSON reader module", default = false, type = "boolean"})
+    add_configs(engine,   {description = "Build the Arrow Execution Engine", default = true, type = "boolean"})
+    add_configs(dataset,  {description = "Dataset API, implies the Filesystem API", default = true, type = "boolean"})
+    add_configs(orc,      {description = "Arrow integration with Apache ORC", default = false, type = "boolean"})
+    add_configs(parquet,  {description = "Apache Parquet libraries and Arrow integration", default = false, type = "boolean"})
+    add_configs(python,   {description = "Enable Python C++ integration library. Requires python and numpy (not managed by xrepo).", default = false, type = "boolean"})
+    -- Arrow uses vendored mimalloc and jemalloc. Do not add these two libraries to configdeps.
+    add_configs(mimalloc, {description = "Build the Arrow mimalloc-based allocator", default = true, type = "boolean"})
+    add_configs(jemalloc, {description = "Build the Arrow jemalloc-based allocator", default = false, type = "boolean"})
+
+    -- Some libraries are required for build with our default config settings.
+    local configdeps = {
+        re2 = "re2", utf8proc = "utf8proc",
+        -- compression libraries
+        brotli = "brotli", bz2 = "bz2", snappy = "snappy", lz4 = "lz4", zlib = "zlib", zstd = "std",
+    }
+    for config, dep in pairs(configdeps) do
+        add_configs(config, {description = "Enable " .. dep .. " support.", default = false, type = "boolean"})
+    end
+
+    add_deps("cmake", "boost")
+
+    on_load(function (package)
+        for name, dep in pairs(configdeps) do
+            if package:config(name) then
+                package:add("deps", dep)
+            end
+        end
+
+        if package:config("python") then
+            package:add("deps", "rapidjson")
+        end
+        if package:config("json") then
+            package:add("deps", "rapidjson")
+        end
+        if package:config("orc") then
+            package:add("deps", "protobuf-cpp")
+            package:add("deps", "lz4")
+            package:add("deps", "snappy")
+            package:add("deps", "zlib")
+            package:add("deps", "zstd")
+        end
+        if package:config("parquet") then
+            cprint([[
+${yellow}In case of boost dependency conflicts, please use following code (order is important):
+
+    local boost_config = {configs = {system = true}} -- change this according to what your need
+    add_requires("thrift")
+    add_requireconfs("thrift.boost", boost_config)
+    add_requires("arrow", {configs = {parquet = true}})
+    add_requireconfs("arrow.boost", boost_config)
+]])
+            package:add("deps", "thrift", configs)
+        end
+    end)
+
+    on_install("linux", "macosx", "bsd", function (package)
+        local configs = {
+            "-DARROW_BUILD_TESTS=OFF",
+            "-DARROW_DEPENDENCY_SOURCE=SYSTEM",
+        }
+
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
+
+        local shared = package:config("shared")
+        table.insert(configs, "-DARROW_BUILD_STATIC=" .. (shared and "OFF" or "ON"))
+        table.insert(configs, "-DDARROW_BUILD_SHARED=" .. (shared and "ON" or "OFF"))
+        table.insert(configs, "-DARROW_DEPENDENCY_USE_SHARED=" .. (shared and "ON" or "OFF"))
+
+        for config, enabled in pairs(package:configs()) do
+            if not package:extraconf("configs", config, "builtin") and configdeps[config] == nil then
+                table.insert(configs, "-DARROW_" .. string.upper(config)  .. "=" .. (enabled and "ON" or "OFF"))
+            end
+        end
+
+        for config, dep in pairs(configdeps) do
+            table.insert(configs, "-DARROW_WITH_" .. string.upper(config)  .. "=" .. (package:config(config) and "ON" or "OFF"))
+        end
+
+        -- To fix arrow src/arrow/CMakeLists.txt:538, when CMAKE_SYSTEM_NAME set but CMAKE_SYSTEM_PROCESSOR is not causing error.
+        table.insert(configs, "-DCMAKE_SYSTEM_PROCESSOR=" .. (package:is_arch("x86_64") and "x86_64" or "x86"))
+
+        os.cd("cpp")
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        if package:config("python") then
+            -- test links to all libs, including python binding, which causes link error.
+            return
+        end
+        assert(package:check_cxxsnippets({test = [[
+            void test() {
+                arrow::MemoryPool* pool = arrow::default_memory_pool();
+                arrow::Int64Builder id_builder(pool);
+                (void)id_builder;
+            }
+        ]]}, {configs = {languages = "c++11"}, includes = "arrow/api.h"}))
+    end)