Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARROW-12876: [R] Fix build flags on Raspberry Pi #10404

Closed
wants to merge 8 commits into from

Conversation

thisisnic
Copy link
Member

@thisisnic thisisnic commented May 26, 2021

Checks if installing on Raspberry PI OS, and if so, adds an additional build flag so that the compiler can link to one of the necessary libraries.

@github-actions
Copy link

r/configure Outdated Show resolved Hide resolved
r/configure Outdated Show resolved Hide resolved
@westonpace
Copy link
Member

While this is cool (thanks for creating this) it seems to me that it might be more appropriate to put this check into the C++ layer. That's where we express other runtime dependencies (like the compression libs). Then (I think, I'm not an expert on the build process) you don't need to add it here.

@westonpace
Copy link
Member

Maybe CC @kou @kszucs ?

@kou
Copy link
Member

kou commented May 26, 2021

@thisisnic Can we build Apache Arrow C++ without additional C++ flag (-latomic) on Raspberry Pi? If we can't, we should fix it in Apache Arrow C++.

@kiszk
Copy link
Member

kiszk commented May 31, 2021

Interesting. I found similar reports (e.g. redis/redis#6275) in other places.
It would be great to put the log of this failure into here.

Is this only R buid problem?

@nealrichardson
Copy link
Member

According to the discussion and logs on ARROW-12860, where this was originally reported, the Arrow C++ (static) library builds but the shared library that R builds with it fails to load due to missing symbols. IIUC, a workaround in the R package is appropriate for now, and the "right" solution is to do ARROW-6312 and in that code include -latomic on this platform.

Also somewhat related: ARROW-8041

@westonpace
Copy link
Member

It appears that it is essentially a private dependency of libc which is not listed in libc.so. It's very similar to -lrt. I suspect we could probably add it here:

list(APPEND ARROW_SYSTEM_LINK_LIBS rt)

@nealrichardson 's solution is mostly correct and would work for R (and other consumers of the Arrow static library) but would fail for anyone consuming Arrow as a shared library on a raspberry pi. So I think, in addition to listing it as a private lib, Arrow will still need to link it when building the shared library.

The Arrow shared library would build without -latomic because Arrow doesn't make any calls to -latomic (those calls are made by libc.so).

@thisisnic thisisnic marked this pull request as draft June 9, 2021 18:30
@thisisnic thisisnic marked this pull request as ready for review June 9, 2021 18:50
@thisisnic
Copy link
Member Author

@westonpace
Like this (710ff09) or did you mean something else?

@westonpace
Copy link
Member

@thisisnic Not quite. We don't want to link to libatomic on all non-windows non-apple architectures. Most Linux architectures will have atomics provided by gcc itself.

I googled a bit and it seems there are several options.

  • You could add an ARROW_IS_RPI cmake flag but, as I understand it, this is the least preferred because it passes the burden back on the user to pass it in at the right time.
  • Probably the ideal would be to identify a C function that is missing without libatomic and use the test they use for pow in this example: https://stackoverflow.com/questions/32816646/can-cmake-detect-if-i-need-to-link-to-libm-when-using-pow-in-c
  • However, I don't think libatomic actually adds new functions. Instead it adds supports for C builtin language features. However, you could create a small C program and try to compile that, there is an example of that on the same SO page.
  • Perhaps there is some existing cmake flag or test you could perform to see if you are on raspberry pi, similar to how we detect simd level.

Sorry for so many options. I just don't really know which one would be the best to choose.

@nealrichardson
Copy link
Member

@kou @westonpace any objection to merging the R-only fix for this and ticketing a C++ followup to do it right? Or can one of you push a fix to cmake that does this the way you prefer?

@kou
Copy link
Member

kou commented Jun 26, 2021

Can we see the build error log without this change?

@nealrichardson
Copy link
Member

Can we see the build error log without this change?

The original failure log is on ARROW-12860.

@thisisnic
Copy link
Member Author

@kou @westonpace any objection to merging the R-only fix for this and ticketing a C++ followup to do it right? Or can one of you push a fix to cmake that does this the way you prefer?

Sorry, had not done anything on this myself as it's beyond my skillset, and was focussing on other things ahead of the release. If we do merge the R-only fix, we should end up dropping the last commit and merging up to the previous one.

@kou
Copy link
Member

kou commented Jun 30, 2021

@thisisnic Could you try the following change with #10626 on Raspberry Pi?

diff --git a/r/configure b/r/configure
index aa7e7a8d0..899a4a9f8 100755
--- a/r/configure
+++ b/r/configure
@@ -82,9 +82,8 @@ else
   pkg-config --version >/dev/null 2>&1
   if [ $? -eq 0 ] && [ "$ARROW_USE_PKG_CONFIG" != "false" ]; then
     PKGCONFIG_CFLAGS=`pkg-config --cflags --silence-errors ${PKG_CONFIG_NAME}`
-    PKGCONFIG_LIBS=`pkg-config --libs-only-l --silence-errors ${PKG_CONFIG_NAME}`
-    PKGCONFIG_DIRS=`pkg-config --libs-only-L --silence-errors ${PKG_CONFIG_NAME}`
-    # TODO: what about --libs-only-other?
+    PKGCONFIG_LIBS=`pkg-config --libs-only-l --libs-only-other --static --silence-errors ${PKG_CONFIG_NAME}`
+    PKGCONFIG_DIRS=`pkg-config --libs-only-L --static --silence-errors ${PKG_CONFIG_NAME}`
   fi
 
   if [ "$PKGCONFIG_CFLAGS" ] && [ "$PKGCONFIG_LIBS" ]; then

@@ -51,7 +51,7 @@ public static async Task Main(string[] args)
using (var writer = new ArrowFileWriter(stream, recordBatch.Schema))
{
await writer.WriteRecordBatchAsync(recordBatch);
await writer.WriteFooterAsync();
await writer.WriteEndAsync();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a bad merge. Were you expecting to make a change here? Can this be reverted?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was planning to revert this, will mark this PR as a draft to flag this, sorry!

@thisisnic thisisnic marked this pull request as draft June 30, 2021 20:14
@thisisnic
Copy link
Member Author

I'm super lost trying to work out what to do with this. I've tried installing a version of the R package which has the build flags changed in the case of Raspberry Pi for the R package. I've created a .tar.gz file and the installed it via install.packages("arrow.tar.gz", repos = NULL, type = "source"). This results in the successful installation of the R package, but no C++ installation - so the atomic issue is fixed I guess.

The lack of successful C++ installation is due to the code in tools/nixlibs.R which uses the R package version to try to install the correct released version of Arrow and fails if it ends in .9000, which is the version number in the dev R package.

I've tried taking the released version of Arrow 4.0.1 and just updating the configure script to include the above lines, and the ones I added to add the -latomic flag. This successfully install the R package and retrieves the C++ package (I am waiting to see if it installs it properly - it's currently building but it'll take a while).

I have no idea how I'd add in the change from #10626 given the current setup, unless I suppose I was manually installing the C++ libraries myself and then setting up the R install to look at these.

It's been a while since I looked at it, but I'm pretty sure the change I made to add the -latomic flag to the R build worked fine previously with an existing Arrow C++ installation.

I'm a bit lost in the above conversation, but it sounds like what is going on here is:

  • the atomic library being missing is the main focus here. It can be achieved via R but the correct way to do it is via the changes in the PR mentioned above
  • I need to test out whether the changes in the PR mentioned above work to install things on the Pi (without the changes I made, as these are supposed to be instead of those not as well as those)
  • so I need to build the Arrow C++ library with the changes suggested above by @kou , and all being well, the R package should the install successfully without me adding the -latomic flag

@westonpace
Copy link
Member

I'm a bit lost in the above conversation, but it sounds like what is going on here is:

* the atomic library being missing is the main focus here.  It can be achieved via R _but_ the correct way to do it is via the changes in the PR mentioned above

* I need to test out whether the changes in the PR mentioned above work to install things on the Pi (_without_ the changes I made, as these are supposed to be _instead_ of those not _as well as_ those)

* so I need to build the Arrow C++ library with the changes suggested above by @kou , and all being well, the R package should the install successfully without me adding the -latomic flag

I think that is a very good summary. Yesterday I spent a little bit of time trying to setup a docker environment where the -latomic flag is needed but it seems that it is less "what software is present" (which docker can control) and more "what hardware is present" (which docker doesn't control as much) so I wasn't able to produce a "raspberry-pi-like environment" to test in. A friend of mine agreed to mail me a spare Pi that he wasn't using so I can take a look a week or so.

@thisisnic
Copy link
Member Author

I wiped my Pi and started again just to make sure I hadn't installed things which aren't mentioned in the dev guides which may need adding, etc.

I got an install error this time, but I'm a bit unsure as to which bit points to the relevant missing components. Is it re2, or are there other relevant bits in the output here?

pi@raspberrypi:~/arrow/cpp/build $ cmake   -DCMAKE_INSTALL_PREFIX=$ARROW_HOME   -DCMAKE_INSTALL_LIBDIR=lib   -DARROW_COMPUTE=ON   -DARROW_CSV=ON   -DARROW_DATASET=ON   -DARROW_EXTRA_ERROR_CONTEXT=ON   -DARROW_FILESYSTEM=ON   -DARROW_INSTALL_NAME_RPATH=OFF   -DARROW_JEMALLOC=ON   -DARROW_JSON=ON   -DARROW_PARQUET=ON   -DARROW_WITH_SNAPPY=ON   -DARROW_WITH_ZLIB=ON -DBoost_SOURCE=BUNDLED -DThrift_SOURCE=bundled -DCMAKE_BUILD_TYPE=debug  ..
-- Building using CMake version: 3.7.2
-- Arrow version: 5.0.0 (full: '5.0.0-SNAPSHOT')
-- Arrow SO version: 500 (full: 500.0.0)
-- clang-tidy not found
-- clang-format not found
-- Could NOT find ClangTools (missing:  CLANG_FORMAT_BIN CLANG_TIDY_BIN) 
-- infer not found
-- Found cpplint executable at /home/pi/arrow/cpp/build-support/cpplint.py
-- System processor: armv7l
-- Arrow build warning level: CHECKIN
Using ld linker
Configured for DEBUG build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})
-- Build Type: DEBUG
-- Using AUTO approach to find dependencies
-- ARROW_ABSL_BUILD_VERSION: 0f3bb466b868b523cf1dc9b2aaaed65c77b28862
-- ARROW_AWSSDK_BUILD_VERSION: 1.8.133
-- ARROW_AWS_CHECKSUMS_BUILD_VERSION: v0.1.10
-- ARROW_AWS_C_COMMON_BUILD_VERSION: v0.5.10
-- ARROW_AWS_C_EVENT_STREAM_BUILD_VERSION: v0.1.5
-- ARROW_BOOST_BUILD_VERSION: 1.75.0
-- ARROW_BROTLI_BUILD_VERSION: v1.0.9
-- ARROW_BZIP2_BUILD_VERSION: 1.0.8
-- ARROW_CARES_BUILD_VERSION: 1.17.1
-- ARROW_GBENCHMARK_BUILD_VERSION: v1.5.2
-- ARROW_GFLAGS_BUILD_VERSION: v2.2.2
-- ARROW_GLOG_BUILD_VERSION: v0.4.0
-- ARROW_GRPC_BUILD_VERSION: v1.35.0
-- ARROW_GTEST_BUILD_VERSION: 1.10.0
-- ARROW_JEMALLOC_BUILD_VERSION: 5.2.1
-- ARROW_LZ4_BUILD_VERSION: v1.9.3
-- ARROW_MIMALLOC_BUILD_VERSION: v1.6.4
-- ARROW_ORC_BUILD_VERSION: 1.6.6
-- ARROW_PROTOBUF_BUILD_VERSION: v3.14.0
-- ARROW_RAPIDJSON_BUILD_VERSION: 1a803826f1197b5e30703afe4b9c0e7dd48074f5
-- ARROW_RE2_BUILD_VERSION: 2021-02-02
-- ARROW_SNAPPY_BUILD_VERSION: 1.1.8
-- ARROW_THRIFT_BUILD_VERSION: 0.13.0
-- ARROW_THRIFT_BUILD_MD5_CHECKSUM: 38a27d391a2b03214b444cb13d5664f1
-- ARROW_UTF8PROC_BUILD_VERSION: v2.6.1
-- ARROW_XSIMD_BUILD_VERSION: e9234cd6e6f4428fc260073b2c34ffe86fda1f34
-- ARROW_ZLIB_BUILD_VERSION: 1.2.11
-- ARROW_ZSTD_BUILD_VERSION: v1.4.8
-- Boost include dir: /home/pi/arrow/cpp/build/boost_ep-prefix/src/boost_ep
-- Boost libraries: boost_system_static;boost_filesystem_static
-- Could NOT find Snappy (missing:  Snappy_LIB Snappy_INCLUDE_DIR) 
-- Building snappy from source
-- Building without OpenSSL support. Minimum OpenSSL version 1.0.2 required.
-- Building (vendored) jemalloc from source
CMake Warning at cmake_modules/FindRapidJSONAlt.cmake:25 (find_package):
  By not providing "FindRapidJSON.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "RapidJSON", but CMake did not find one.

  Could not find a package configuration file provided by "RapidJSON"
  (requested version 1.1.0) with any of the following names:

    RapidJSONConfig.cmake
    rapidjson-config.cmake

  Add the installation prefix of "RapidJSON" to CMAKE_PREFIX_PATH or set
  "RapidJSON_DIR" to a directory containing one of the above files.  If
  "RapidJSON" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  cmake_modules/ThirdpartyToolchain.cmake:225 (find_package)
  cmake_modules/ThirdpartyToolchain.cmake:1887 (resolve_dependency)
  CMakeLists.txt:515 (include)


-- Could NOT find RapidJSONAlt (missing:  RAPIDJSON_INCLUDE_DIR) (Required is at least version "1.1.0")
-- Building RapidJSON from source
-- Building xsimd from source
CMake Warning at cmake_modules/Findre2Alt.cmake:25 (find_package):
  By not providing "Findre2.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "re2", but
  CMake did not find one.

  Could not find a package configuration file provided by "re2" with any of
  the following names:

    re2Config.cmake
    re2-config.cmake

  Add the installation prefix of "re2" to CMAKE_PREFIX_PATH or set "re2_DIR"
  to a directory containing one of the above files.  If "re2" provides a
  separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
  cmake_modules/ThirdpartyToolchain.cmake:225 (find_package)
  cmake_modules/ThirdpartyToolchain.cmake:2150 (resolve_dependency)
  CMakeLists.txt:515 (include)


-- Checking for module 're2'
--   No package 're2' found
-- Could NOT find re2Alt (missing:  RE2_LIB RE2_INCLUDE_DIR) 
-- Building RE2 from source
-- Could NOT find utf8proc: Found unsuitable version "", but required is at least "2.2.0" (found utf8proc_LIB-NOTFOUND)
-- Building utf8proc from source
-- Found hdfs.h at: /home/pi/arrow/cpp/thirdparty/hadoop/include/hdfs.h
-- All bundled static libraries: Snappy::snappy;jemalloc::jemalloc;re2::re2;utf8proc::utf8proc
-- CMAKE_C_FLAGS:  -ggdb -O0  -Wall -Wno-conversion -Wno-deprecated-declarations -Wno-sign-conversion -Werror -fno-semantic-interposition 
-- CMAKE_CXX_FLAGS:   -fdiagnostics-color=always -ggdb -O0  -Wall -Wno-conversion -Wno-deprecated-declarations -Wno-sign-conversion -Werror -fno-semantic-interposition 
-- Creating bundled static library target arrow_bundled_dependencies at /home/pi/arrow/cpp/build/debug/libarrow_bundled_dependencies.a
-- ---------------------------------------------------------------------
-- Arrow version:                                 5.0.0-SNAPSHOT
-- 
-- Build configuration summary:
--   Generator: Unix Makefiles
--   Build type: DEBUG
--   Source directory: /home/pi/arrow/cpp
--   Install prefix: 
-- 
-- Compile and link options:
-- 
--   ARROW_CXXFLAGS="" [default=""]
--       Compiler flags to append when compiling Arrow
--   ARROW_BUILD_STATIC=ON [default=ON]
--       Build static libraries
--   ARROW_BUILD_SHARED=ON [default=ON]
--       Build shared libraries
--   ARROW_PACKAGE_KIND="" [default=""]
--       Arbitrary string that identifies the kind of package
--       (for informational purposes)
--   ARROW_GIT_ID=0feb16af7173999eaf8217caf3e0fde36a841f83 [default=""]
--       The Arrow git commit id (if any)
--   ARROW_GIT_DESCRIPTION=apache-arrow-0.1.0-9292-g0feb16af7-dirty [default=""]
--       The Arrow git commit description (if any)
--   ARROW_NO_DEPRECATED_API=OFF [default=OFF]
--       Exclude deprecated APIs from build
--   ARROW_USE_CCACHE=ON [default=ON]
--       Use ccache when compiling (if available)
--   ARROW_USE_LD_GOLD=OFF [default=OFF]
--       Use ld.gold for linking on Linux (if available)
--   ARROW_USE_PRECOMPILED_HEADERS=OFF [default=OFF]
--       Use precompiled headers when compiling
--   ARROW_SIMD_LEVEL=SSE4_2 [default=NONE|SSE4_2|AVX2|AVX512]
--       Compile-time SIMD optimization level
--   ARROW_RUNTIME_SIMD_LEVEL=MAX [default=NONE|SSE4_2|AVX2|AVX512|MAX]
--       Max runtime SIMD optimization level
--   ARROW_ARMV8_ARCH=armv8-a [default=armv8-a|armv8-a+crc+crypto]
--       Arm64 arch and extensions
--   ARROW_ALTIVEC=ON [default=ON]
--       Build with Altivec if compiler has support
--   ARROW_RPATH_ORIGIN=OFF [default=OFF]
--       Build Arrow libraries with RATH set to $ORIGIN
--   ARROW_INSTALL_NAME_RPATH=OFF [default=ON]
--       Build Arrow libraries with install_name set to @rpath
--   ARROW_GGDB_DEBUG=ON [default=ON]
--       Pass -ggdb flag to debug builds
-- 
-- Test and benchmark options:
-- 
--   ARROW_BUILD_EXAMPLES=OFF [default=OFF]
--       Build the Arrow examples
--   ARROW_BUILD_TESTS=OFF [default=OFF]
--       Build the Arrow googletest unit tests
--   ARROW_ENABLE_TIMING_TESTS=ON [default=ON]
--       Enable timing-sensitive tests
--   ARROW_BUILD_INTEGRATION=OFF [default=OFF]
--       Build the Arrow integration test executables
--   ARROW_BUILD_BENCHMARKS=OFF [default=OFF]
--       Build the Arrow micro benchmarks
--   ARROW_BUILD_BENCHMARKS_REFERENCE=OFF [default=OFF]
--       Build the Arrow micro reference benchmarks
--   ARROW_TEST_LINKAGE=shared [default=shared|static]
--       Linkage of Arrow libraries with unit tests executables.
--   ARROW_FUZZING=OFF [default=OFF]
--       Build Arrow Fuzzing executables
--   ARROW_LARGE_MEMORY_TESTS=OFF [default=OFF]
--       Enable unit tests which use large memory
-- 
-- Lint options:
-- 
--   ARROW_ONLY_LINT=OFF [default=OFF]
--       Only define the lint and check-format targets
--   ARROW_VERBOSE_LINT=OFF [default=OFF]
--       If off, 'quiet' flags will be passed to linting tools
--   ARROW_GENERATE_COVERAGE=OFF [default=OFF]
--       Build with C++ code coverage enabled
-- 
-- Checks options:
-- 
--   ARROW_TEST_MEMCHECK=OFF [default=OFF]
--       Run the test suite using valgrind --tool=memcheck
--   ARROW_USE_ASAN=OFF [default=OFF]
--       Enable Address Sanitizer checks
--   ARROW_USE_TSAN=OFF [default=OFF]
--       Enable Thread Sanitizer checks
--   ARROW_USE_UBSAN=OFF [default=OFF]
--       Enable Undefined Behavior sanitizer checks
-- 
-- Project component options:
-- 
--   ARROW_BUILD_UTILITIES=OFF [default=OFF]
--       Build Arrow commandline utilities
--   ARROW_COMPUTE=ON [default=OFF]
--       Build the Arrow Compute Modules
--   ARROW_CSV=ON [default=OFF]
--       Build the Arrow CSV Parser Module
--   ARROW_CUDA=OFF [default=OFF]
--       Build the Arrow CUDA extensions (requires CUDA toolkit)
--   ARROW_DATASET=ON [default=OFF]
--       Build the Arrow Dataset Modules
--   ARROW_FILESYSTEM=ON [default=OFF]
--       Build the Arrow Filesystem Layer
--   ARROW_FLIGHT=OFF [default=OFF]
--       Build the Arrow Flight RPC System (requires GRPC, Protocol Buffers)
--   ARROW_GANDIVA=OFF [default=OFF]
--       Build the Gandiva libraries
--   ARROW_HDFS=OFF [default=OFF]
--       Build the Arrow HDFS bridge
--   ARROW_HIVESERVER2=OFF [default=OFF]
--       Build the HiveServer2 client and Arrow adapter
--   ARROW_IPC=ON [default=ON]
--       Build the Arrow IPC extensions
--   ARROW_JEMALLOC=ON [default=ON]
--       Build the Arrow jemalloc-based allocator
--   ARROW_JNI=OFF [default=OFF]
--       Build the Arrow JNI lib
--   ARROW_JSON=ON [default=OFF]
--       Build Arrow with JSON support (requires RapidJSON)
--   ARROW_MIMALLOC=OFF [default=OFF]
--       Build the Arrow mimalloc-based allocator
--   ARROW_PARQUET=ON [default=OFF]
--       Build the Parquet libraries
--   ARROW_ORC=OFF [default=OFF]
--       Build the Arrow ORC adapter
--   ARROW_PLASMA=OFF [default=OFF]
--       Build the plasma object store along with Arrow
--   ARROW_PLASMA_JAVA_CLIENT=OFF [default=OFF]
--       Build the plasma object store java client
--   ARROW_PYTHON=OFF [default=OFF]
--       Build the Arrow CPython extensions
--   ARROW_S3=OFF [default=OFF]
--       Build Arrow with S3 support (requires the AWS SDK for C++)
--   ARROW_TENSORFLOW=OFF [default=OFF]
--       Build Arrow with TensorFlow support enabled
--   ARROW_TESTING=OFF [default=OFF]
--       Build the Arrow testing libraries
-- 
-- Thirdparty toolchain options:
-- 
--   ARROW_DEPENDENCY_SOURCE=AUTO [default=AUTO|BUNDLED|SYSTEM|CONDA|VCPKG|BREW]
--       Method to use for acquiring arrow's build dependencies
--   ARROW_VERBOSE_THIRDPARTY_BUILD=OFF [default=OFF]
--       Show output from ExternalProjects rather than just logging to files
--   ARROW_DEPENDENCY_USE_SHARED=ON [default=ON]
--       Link to shared libraries
--   ARROW_BOOST_USE_SHARED=ON [default=ON]
--       Rely on boost shared libraries where relevant
--   ARROW_BROTLI_USE_SHARED=ON [default=ON]
--       Rely on Brotli shared libraries where relevant
--   ARROW_BZ2_USE_SHARED=ON [default=ON]
--       Rely on Bz2 shared libraries where relevant
--   ARROW_GFLAGS_USE_SHARED=ON [default=ON]
--       Rely on GFlags shared libraries where relevant
--   ARROW_GRPC_USE_SHARED=ON [default=ON]
--       Rely on gRPC shared libraries where relevant
--   ARROW_LZ4_USE_SHARED=ON [default=ON]
--       Rely on lz4 shared libraries where relevant
--   ARROW_OPENSSL_USE_SHARED=ON [default=ON]
--       Rely on OpenSSL shared libraries where relevant
--   ARROW_PROTOBUF_USE_SHARED=ON [default=ON]
--       Rely on Protocol Buffers shared libraries where relevant
--   ARROW_THRIFT_USE_SHARED=ON [default=ON]
--       Rely on thrift shared libraries where relevant
--   ARROW_UTF8PROC_USE_SHARED=ON [default=ON]
--       Rely on utf8proc shared libraries where relevant
--   ARROW_SNAPPY_USE_SHARED=ON [default=ON]
--       Rely on snappy shared libraries where relevant
--   ARROW_UTF8PROC_USE_SHARED=ON [default=ON]
--       Rely on utf8proc shared libraries where relevant
--   ARROW_ZSTD_USE_SHARED=ON [default=ON]
--       Rely on zstd shared libraries where relevant
--   ARROW_USE_GLOG=OFF [default=OFF]
--       Build libraries with glog support for pluggable logging
--   ARROW_WITH_BACKTRACE=ON [default=ON]
--       Build with backtrace support
--   ARROW_WITH_BROTLI=OFF [default=OFF]
--       Build with Brotli compression
--   ARROW_WITH_BZ2=OFF [default=OFF]
--       Build with BZ2 compression
--   ARROW_WITH_LZ4=OFF [default=OFF]
--       Build with lz4 compression
--   ARROW_WITH_SNAPPY=ON [default=OFF]
--       Build with Snappy compression
--   ARROW_WITH_ZLIB=ON [default=OFF]
--       Build with zlib compression
--   ARROW_WITH_ZSTD=OFF [default=OFF]
--       Build with zstd compression
--   ARROW_WITH_UTF8PROC=ON [default=ON]
--       Build with support for Unicode properties using the utf8proc library
--       (only used if ARROW_COMPUTE is ON or ARROW_GANDIVA is ON)
--   ARROW_WITH_RE2=ON [default=ON]
--       Build with support for regular expressions using the re2 library
--       (only used if ARROW_COMPUTE or ARROW_GANDIVA is ON)
-- 
-- Parquet options:
-- 
--   PARQUET_MINIMAL_DEPENDENCY=OFF [default=OFF]
--       Depend only on Thirdparty headers to build libparquet.
--       Always OFF if building binaries
--   PARQUET_BUILD_EXECUTABLES=OFF [default=OFF]
--       Build the Parquet executable CLI tools. Requires static libraries to be built.
--   PARQUET_BUILD_EXAMPLES=OFF [default=OFF]
--       Build the Parquet examples. Requires static libraries to be built.
--   PARQUET_REQUIRE_ENCRYPTION=OFF [default=OFF]
--       Build support for encryption. Fail if OpenSSL is not found
-- 
-- Gandiva options:
-- 
--   ARROW_GANDIVA_JAVA=OFF [default=OFF]
--       Build the Gandiva JNI wrappers
--   ARROW_GANDIVA_STATIC_LIBSTDCPP=OFF [default=OFF]
--       Include -static-libstdc++ -static-libgcc when linking with
--       Gandiva static libraries
--   ARROW_GANDIVA_PC_CXX_FLAGS="" [default=""]
--       Compiler flags to append when pre-compiling Gandiva operations
-- 
-- Advanced developer options:
-- 
--   ARROW_EXTRA_ERROR_CONTEXT=ON [default=OFF]
--       Compile with extra error context (line numbers, code)
--   ARROW_OPTIONAL_INSTALL=OFF [default=OFF]
--       If enabled install ONLY targets that have already been built. Please be
--       advised that if this is enabled 'install' will fail silently on components
--       that have not been built
--   Outputting build configuration summary to /home/pi/arrow/cpp/build/cmake_summary.json
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
THRIFT_INCLUDE_DIR
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/testing
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/array
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/c
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/io
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/tensor
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/util
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/datetime
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/vendored/double-conversion
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/csv
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/kernels
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/compute/exec
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/dataset
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/filesystem
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/ipc
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/arrow/json
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/api
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/arrow
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/src/parquet/encryption
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet
   used as include directory in directory /home/pi/arrow/cpp/tools/parquet

-- Configuring incomplete, errors occurred!
See also "/home/pi/arrow/cpp/build/CMakeFiles/CMakeOutput.log".
See also "/home/pi/arrow/cpp/build/CMakeFiles/CMakeError.log".

@nealrichardson
Copy link
Member

We will need to do more work to wire up the changes that kou made, I think. I can help next week.

@thisisnic
Copy link
Member Author

OK, thanks @nealrichardson , will give you a shout then then

@nealrichardson nealrichardson marked this pull request as ready for review July 26, 2021 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants