Hi,
Thank you, that made me think about what was installed on my sysroot, which was part of the problem (some dev packages had to be added). I added some packages to the sysroot and got the build further along, but for some reason there is still a failure to find pthread.h from standard include locations. Even though all of the pthread dev is installed on both host and sysroot,making pthread.h available in both "/usr/include" of the host and "sysroot/usr/include" of the sysroot, I keep getting missing headers. The "--includedir=" has no effect.
One sample configure I'm trying, where "/mnt" is a loopback mounted clone of the aarch64 system: ${SRC}/configure --prefix=/usr/local/aarch64-linux-gnu/gcc-linaro-6.1-2016.07 --target=aarch64-linux-gnu \ --with-build-sysroot=/mnt \ --enable-languages=c,c++ \ --includedir=/mnt/usr/include Much earlier in the build with this configuration, long before the build halts, I see this: cc1: error: no include path in which to search for stdc-predef.h ...I have to wonder why this is even though the compile does not halt (with sysroot it doesn't halt here, but it seems sysroot didn't actually provide its version of stdc-predef.h).
The build actually terminates with several missing pthread.h messages, e.g.: In file included from /home/build/linaro/gcc-linaro-snapshot-6.1-2016.07/libgcc/gthr.h:148:0, from /home/build/linaro/gcc-linaro-snapshot-6.1-2016.07/libgcc/libgcov-interface.c:27:./gthr-default.h:35:21: fatal error: pthread.h: No such file or directory #include <pthread.h> ^compilation terminated.Makefile:883: recipe for target '_gcov_dump.o' failedmake[2]: *** [_gcov_dump.o] Error 1
Various experiments with "--includedir" options (sysroot/usr/include, sysroot/) in configure failed to change anything. What am I missing? Is this a configure option I need to change? Is this sysroot missing something?
Thanks!
----- Original Message -----From: Jim Wilson jim.wilson@linaro.orgTo: stimits@comcast.netCc: Linaro Toolchain Mailman List linaro-toolchain@lists.linaro.orgSent: Sat, 13 Aug 2016 23:16:29 -0000 (UTC)Subject: Re: stdc-predef.h failed during gcc-linaro-snapshot-6.1-2016.07 compile
On Sat, Aug 13, 2016 at 3:17 PM, stimits@comcast.net wrote:> I've been trying to build the c and c++ cross-compiler for triplet> aarch64-linux-gnu (--target=aarch64-linux-gnu --enable-languages=c,c++) on> snapshot for 6.1-2016.07, and cannot get past this:> cc1: error: no include path in which to search for stdc-predef.h
stdc-predef.h is a glibc header file that defines macros that the ISOC standard requires that the compiler define by default. So gccincludes the file by default for linux targets, unless you use-ffreestanding or -nostdinc. The real problem here is that you areapparently trying to build a cross compiler without glibc, and thatdoesn't work. Glibc is required for the compiler build when buildingfor a linux target.
If you have a target OS that already has a userspace filesystem, thenyou can create a sysroot that contains /lib, /usr/lib, /usr/include(and other library dirs if they exist), put a copy on the machinewhere you are doing the compiler build, and then use a --sysrootconfigure option to point at the sysroot. This also requires thatbinutils is configured with the same --sysroot option. If you don'tcare about the target OS, you could grab one of the sysroots that thetcwg team builds and releases.
Alternatively, you can build gcc and glibc at the same time. This iscomplicated, because of the circular dependencies between gcc andglibc, so it is best to use a script. Linaro uses ABE for toolchainbuilds. https://wiki.linaro.org/ABEBut there are other choices, like crosstools-ng and Open Embedded.
I wouldn't recommend modifying gcc sources to work around this, asthen you will get a compiler that doesn't fully conform to the ISO Cstandard.
Jim