On Tue, 11 Jan 2022 at 03:45, Thomas Sobczynski via Gcc-help <gcc-help@xxxxxxxxxxx> wrote: > > Update: I kept peering at the configure scripts and their embedded comments, and concluded that it's at least worth trying to add "--with-newlib" to the configure script parameters. That may not be the right move, but it did get me further into the build process. However, although its configure script finished, the GCC build seems unable to compile libstdc++ (tail end of output below). > > Am I barking up the wrong tree with "--with-newlib"? > > Does it make sense that the build is supplying include search directories from the GCC v11 build tree (compiler being compiled) to the native cross compiler which is GCC v9.x? Yes. You are compiling the libstdc++ from GCC 11, so it has to look at the headers for the GCC 11 version of libstdc++. You can't use GCC 9 to compile libstdc++ from GCC 11, because GCC 9 doesn't support all the C++ features used in the GCC 11 lirbary (this is nothing to do with cross compilation, you can never use a mismatching version of GCC, newer or older, to compile libstdc++, it just doesn't usually happen unless cross compiling like this). You need a newer arm cross compiler (ideally it should exactly match the version of GCC you are trying to build). > I already misunderstood the build/host/target config earlier. Is it perhaps not _a_ GCC cross toolchain that I need, but perhaps I need to build _the_ compiler (v11) and then turn around and use it to build for the non-native Host? No. This might help, it's a script I used last week to build a build!=host compiler. You'll need to adjust the flags for your own case: #!/bin/bash gcc_common_args='--enable-languages=c++ --disable-nls --without-isl --disable-libcc1 --disable-libgomp --disable-libsanitizer --disable-libitm --without-lto --disable-multilib' # Native GCC compiler mkdir -p ~/build-canada/gcc-native cd ~/build-canada/gcc-native $skip1 ~/src/gcc/configure --prefix=$HOME/gcc/12 $gcc_common_args --disable-bootstrap make -j10 && make install # Use the new native GCC PATH=$HOME/gcc/12/bin:$PATH # Cross binutils mkdir -p ~/build-canada/binutils cd ~/build-canada/binutils $skip2 ~/src/binutils-gdb/configure --prefix=$HOME/gcc/aarch64 --disable-gdb --disable-sim --disable-werror \ --target=aarch64-none-linux-gnu \ --build=x86_64-pc-linux-gnu \ --with-sysroot=/home/iains/cross-roots/aarch64-none-linux-gnu make -j10 && make install # Cross GCC mkdir -p ~/build-canada/gcc-cross cd ~/build-canada/gcc-cross $skip3 ~/src/gcc/configure --prefix=$HOME/gcc/aarch64 $gcc_common_args \ --target=aarch64-none-linux-gnu \ --build=x86_64-pc-linux-gnu \ --with-sysroot=/home/iains/cross-roots/aarch64-none-linux-gnu make -j10 && make install # Use new aarch64-none-linux-gnu-ld and aarc64-none-linux-gnu-g++ etc PATH=$PATH:$HOME/gcc/aarch64/bin # "Native cross" GCC mkdir -p ~/build-canada/gcc-native-cross cd ~/build-canada/gcc-native-cross $skip4 ~/src/gcc/configure --prefix=/not/going/to/install $gcc_common_args \ --target=aarch64-none-linux-gnu \ --host=aarch64-none-linux-gnu \ --build=x86_64-pc-linux-gnu \ --with-sysroot=/home/iains/cross-roots/aarch64-none-linux-gnu make -j10 #!/bin/bash