[ 
https://issues.apache.org/jira/browse/ARROW-1659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16682613#comment-16682613
 ] 

Wes McKinney commented on ARROW-1659:
-------------------------------------

[~alonamid] pinging you again on this; if you can post instructions about 
cross-compiling for RISC-V

> "stdlib.h: No such file or directory" when cross-compiling for RISC-V with 
> GCC 7.2
> ----------------------------------------------------------------------------------
>
>                 Key: ARROW-1659
>                 URL: https://issues.apache.org/jira/browse/ARROW-1659
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: C++
>         Environment: RISC-V, Cross-compiling for RISC-V Linux with GCC 7.2
>            Reporter: Alon Amid
>            Priority: Major
>
> I’ve been attempting to cross-compile Arrow for RISC-V.
> I was trying to build Arrow with Plasma and Python, but without the 
> compression libraries (snappy, brotli, zstd, lz4).
> I was 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-arrow/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-arrow/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 checked 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})
> Since compiling for RISC-V requires GCC 7.2, It is likely that this is the 
> same issue that is exposed by using GCC version 6.0 and above is the 
> previously mentioned references 
> (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 and 
> https://github.com/OpenLightingProject/ola/pull/1132)
> I mitigated the issue temporarily by setting the following in 
> cpp/CMakeLists.txt:
> set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I ") 
> However, I think this should be done anytime GCC 6.0 or higher is used.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to