Hello

 

I've been attempting to cross-compile Arrow for RISC-V.

I am currently trying to build Arrow with Plasma and Python, but without the
compression libraries (snappy, brotli, zstd, lz4).

I am getting several errors indicating that stdlib.h is missing. An example
error is:

 

| In file included from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/ext/string_conversions.h:41:0,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/bits/basic_string.h:6159,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/string:52,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/stdexcept:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/array:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/tuple:39,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/bits/unique_ptr.h:37,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/memory:80,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/io/interfaces.h:22,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.h:21,

|                  from
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc:18:

|
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/c++/7.2.0/cstdlib:75:15: fatal error:
stdlib.h: No such file or directory

|  #include_next <stdlib.h>

|                ^~~~~~~~~~

| compilation terminated.

 

 

The relevant example call is:

 

cd
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/src/arrow/python &&
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot-native/usr/bin/riscv64-poky-linux/riscv64-poky-linux-g++
-isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/src/rapidjson_ep/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/build/flatbuffers_ep-prefix/src/flatbuffers_ep-install/include -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/thirdparty/hadoop/include
-I/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7
.1-r0/arrow-apache-arrow-0.7.1/cpp/src -isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot-native/usr/lib/python2.7/site-packages/numpy/core/include
-isystem
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/recipe-sysroot/usr/include/python2.7
--sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
rrow/0.7.1-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0=/usr/src/debug/apache-arrow/0.7.1-r0
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0/recipe-sysroot-native=
-fdebug-prefix-map=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux
/apache-arrow/0.7.1-r0/recipe-sysroot=  -fvisibility-inlines-hidden
--sysroot=/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-a
rrow/0.7.1-r0/recipe-sysroot -ggdb -O0 -Wall -std=c++11  -g -fPIC
-std=gnu++11 -o CMakeFiles/arrow_python_objlib.dir/io.cc.o -c
/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.1
-r0/arrow-apache-arrow-0.7.1/cpp/src/arrow/python/io.cc

 

 

When I manually check the highlighted path
(/home/centos/riscv-poky/build/tmp/work/riscv64-poky-linux/apache-arrow/0.7.
1-r0/recipe-sysroot/usr/include), stdlib.h is indeed there.

While googling for similar errors, I found these references:
https://github.com/OpenLightingProject/ola/pull/1132,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129  , which seem to describe
a similar scenario.

As can be seen in the example call, most of the include directories are
included using -isystem rather than -I.

When looking further into Arrow's cmake files, this seems intentional:

 

./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
${Boost_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GTEST_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GFLAGS_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${GBENCHMARK_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${RAPIDJSON_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${FLATBUFFERS_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${JEMALLOC_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:include_directories(SYSTEM
"${HADOOP_HOME}/include")

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${ZLIB_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${SNAPPY_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${BROTLI_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${LZ4_INCLUDE_DIR})

./cpp/cmake_modules/ThirdpartyToolchain.cmake:  include_directories(SYSTEM
${ZSTD_INCLUDE_DIR})

./cpp/src/arrow/gpu/CMakeLists.txt:include_directories(SYSTEM
${CUDA_INCLUDE_DIRS})

./cpp/src/plasma/CMakeLists.txt:include_directories(SYSTEM
${PYTHON_INCLUDE_DIRS})

./cpp/CMakeLists.txt:  include_directories(SYSTEM

./python/CMakeLists.txt:include_directories(SYSTEM

./python/CMakeLists.txt:include_directories(SYSTEM ${ARROW_INCLUDE_DIR})

./python/CMakeLists.txt:  include_directories(SYSTEM ${PARQUET_INCLUDE_DIR})

./python/CMakeLists.txt:  include_directories(SYSTEM ${PLASMA_INCLUDE_DIR})

 

 

I was wondering what is the reason for using -isystem rather than -I, and is
it possible that this indeed results in a similar scenario to what is
described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 and
https://github.com/OpenLightingProject/ola/pull/1132.

If so - what would be the correct way to mitigate this?

 

Thanks

Alon Amid

Reply via email to