[cfe-users] C/C++ system include dirs when cross-compiling

Patrick Boettcher via cfe-users cfe-users at lists.llvm.org
Thu Mar 31 08:50:41 PDT 2016


Hi,

On Thu, 24 Mar 2016 16:48:30 +0100
Arnaud Allard de Grandmaison <arnaud.adegm at gmail.com> wrote:

> Hi Patrick,
> 
> This is a common case when cross compiling, so clang knows how to use
> a gcc-toolchain installation: you just have to pass it the
> "--sysroot=..." and "--toolchain=..." arguments, and it will get the
> header files and linker / assembler for your target --- assuming your
> gcc-toolchain has a standard layout.

I'm getting back to you after (some vacations and) having compared
linaro's latest toolchain to the one I built.

Linaro provides a sysroot-package which does not contain
c++-header-files. Instead they are located in the gcc-package, as in
my package, in

  <target>/include/c++/<gcc-version>/

I'm unable to convince clang(++) to include this search-dir using any
combination of the following options with variations on the path name.

  --gcc-toolchain=
  -B
  --sysroot=

sysroot works a little bit, but only for c-include which are located in
<sysroot-dir>/usr/include.

Using gcc-linaro-5.3-2016.02-x86_64_aarch64-elf I would highly
appreciate an example of how to invoke clang++ for cross-compilation
with this gcc and its includes?

My current try is:

TARGET=aarch64-elf \
GCC_ROOT=~/Downloads/gcc-linaro-5.3-2016.02-x86_64_aarch64-elf \
~/devel/upstream/build/bin/clang++ \
		-v \
		--target=$TARGET \
		--gcc-toolchain=$GCC_ROOT/$TARGET \
		--sysroot=$GCC_ROOT/$TARGET/sysroot \
		-nostdlib \
		-o testCCompiler.cpp.obj -c \
		-std=c++11 \
		test.cpp

test.cpp is empty except #include <cstdint> which it doesn't find.

Linaro's gcc has all include paths in its search list.

Thanks in advance for any help,
--
Patrick.




More information about the cfe-users mailing list