On Fri, 24 Oct 2014, Hans-Peter Nilsson wrote: > > From: Richard Biener <rguent...@suse.de> > > Date: Thu, 23 Oct 2014 10:47:43 +0200 > > > This adds a libcpp host module without NLS and ICONV support > > and properly links genmatch against the build libcpp instead of > > the host one. > > > > Bootstrap running on x86_64-unknown-linux-gnu (stage1 all-gcc > > finished fine). > > > > Ok for trunk? > > > > Thanks, > > Richard. > > > > 2014-10-23 Richard Biener <rguent...@suse.de> > > > > * Makefile.def: Add libcpp build module and dependencies. > > * configure.ac: Add libcpp build module. > > * Makefile.in: Regenerate. > > * configure: Likewise. > > You only exposed a dormant issue, but ever since this commit > (nominally, some commit in "(216573:216588]" but I only see this > one matching) I see, for cross-builds (to cris-elf): > > make[2]: Entering directory > `/tmp/hpautotest-gcc1/cris-elf/gccobj/build-x86_64-unknown-linux-gnu/libcpp' > g++ -I/tmp/hpautotest-gcc1/gcc/libcpp -I. > -I/tmp/hpautotest-gcc1/gcc/libcpp/../include > -I/tmp/hpautotest-gcc1/gcc/libcpp/include -g -O2 -W -Wall -Wwrite-strings > -Wmissing-format-attribute -pedantic -Wno-long-long -fno-exceptions > -fno-rtti -I/tmp/hpautotest-gcc1/gcc/libcpp -I. > -I/tmp/hpautotest-gcc1/gcc/libcpp/../include > -I/tmp/hpautotest-gcc1/gcc/libcpp/include -c -o charset.o -MT charset.o > -MMD -MP -MF .deps/charset.Tpo /tmp/hpautotest-gcc1/gcc/libcpp/charset.c > In file included from /tmp/hpautotest-gcc1/gcc/libcpp/system.h:370, > from /tmp/hpautotest-gcc1/gcc/libcpp/charset.c:21: > /tmp/hpautotest-gcc1/gcc/libcpp/../include/libiberty.h:113: error: new > declaration 'char* basename(const char*)' > /usr/include/string.h:601: error: ambiguates old declaration 'const char* > basename(const char*)' > make[2]: *** [charset.o] Error 1 > make[2]: Leaving directory > `/tmp/hpautotest-gcc1/cris-elf/gccobj/build-x86_64-unknown-linux-gnu/libcpp' > make[1]: *** [all-build-libcpp] Error 2 > make[1]: Leaving directory `/tmp/hpautotest-gcc1/cris-elf/gccobj' > make: *** [all] Error 2 > > Above that, we have: > checking whether basename is declared... (cached) no > > and above that, we have: > make[2]: Leaving directory > `/tmp/hpautotest-gcc1/cris-elf/gccobj/build-x86_64-unknown-linux-gnu/fixincludes' > mkdir -p -- build-x86_64-unknown-linux-gnu/libcpp > Configuring in build-x86_64-unknown-linux-gnu/libcpp > configure: loading cache ../config.cache > > which is apparently set due to (above that, first non-cached): > mkdir -p -- build-x86_64-unknown-linux-gnu/libiberty > Configuring in build-x86_64-unknown-linux-gnu/libiberty > configure: creating cache ../config.cache > ... > checking whether basename is declared... no > > Your commit introduces build-subdirectories for cross-builds. > Build-subdirs share a config.cache (in build-<host>/config.cache), > with subdirs in build-<host> being fixincludes, libcpp and > libiberty. > > But, libiberty and fixincludes are configure-tested and compiled > using gcc, while libcpp is compiled with g++, which causes a > different set of declarations to be exposed, so the shared > config.cache is invalid and its use is bogus. Not sure how this > works for native builds. > > The libcpp configure checks are actually run with gcc which is > bogus by itself, but apparently working. I guess the C vs. C++ > declaration etc. differences for libcpp are mostly hidden by > using _GNU_SOURCE (through AC_USE_SYSTEM_EXTENSIONS), and I'm a > bit surprised that's not used for libiberty and fixincludes. > Still, a red herring. Aligning those options *may* cause the > build to succeed, but I think that'd be too much of sweeping the > issue under the carpet. > > It seems "more correct" to just disable the config.cache sharing > between the differently-configured build-subdirectories, as is > already is done for host-libraries and target-libraries, even if > that may slow down the builds. (Erroring out is infinitely > slower. :) Still, I don't understand exactly how your patch > introduces build-subdirectories where there were none before. > Maybe that "+all-gcc: maybe-all-build-libcpp" was wrong and > should be different?
No, we do need a build-libcpp to build gcc/build/genmatch. Not sure how you got around without a build-libiberty as other gen* programs surely require that. > Anyway, with this, a cris-elf cross build passes the point of > failure; compilers and libraries built, progressing into > testing. > > Ok to commit? Ok. Thanks, Richard. > toplev: > * configure.ac (build_configargs): Don't share > config.cache between build subdirs. > > Index: configure.ac > =================================================================== > --- configure.ac (revision 216610) > +++ configure.ac (working copy) > @@ -2922,8 +2922,10 @@ AC_ARG_VAR([target_configargs], > > # For the build-side libraries, we just need to pretend we're native, > # and not use the same cache file. Multilibs are neither needed nor > -# desired. > -build_configargs="$build_configargs --cache-file=../config.cache ${baseargs}" > +# desired. We can't even use the same cache file for all build-side > +# libraries, as they're compiled differently; some with C, some with > +# C++ or with different feature-enabling options. > +build_configargs="$build_configargs --cache-file=./config.cache ${baseargs}" > > # For host modules, accept cache file option, or specification as blank. > case "${cache_file}" in > Index: configure > =================================================================== > --- configure (revision 216610) > +++ configure (working copy) > @@ -7386,8 +7386,10 @@ tbaseargs="$tbaseargs --disable-option-c > > # For the build-side libraries, we just need to pretend we're native, > # and not use the same cache file. Multilibs are neither needed nor > -# desired. > -build_configargs="$build_configargs --cache-file=../config.cache ${baseargs}" > +# desired. We can't even use the same cache file for all build-side > +# libraries, as they're compiled differently; some with C, some with > +# C++ or with different feature-enabling options. > +build_configargs="$build_configargs --cache-file=./config.cache ${baseargs}" > > # For host modules, accept cache file option, or specification as blank. > case "${cache_file}" in > > brgds, H-P > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer