On Wed, Dec 12, 2012 at 10:01 AM, Paolo Bonzini <bonz...@gnu.org> wrote: > Il 12/12/2012 18:30, H.J. Lu ha scritto: >> On Wed, Dec 12, 2012 at 6:46 AM, Paolo Bonzini <bonz...@gnu.org> wrote: >>> Il 12/12/2012 15:41, H.J. Lu ha scritto: >>>> MAKEOVERRIDES is used for multilib. I got >>>> >>>> /bin/sh ../libtool --tag=CXX --mode=compile -D_GNU_SOURCE -D_DEBUG >>>> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS >>>> -DASAN_HAS_EXCEPTIONS=1 -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=0 >>>> -DASAN_NEEDS_SEGV=1 -I. >>>> -I/export/gnu/import/git/gcc/libsanitizer/asan -I >>>> /export/gnu/import/git/gcc/libsanitizer/include -I >>>> /export/gnu/import/git/gcc/libsanitizer -Wall -W >>>> -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC >>>> -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables >>>> -fvisibility=hidden -Wno-variadic-macros -Wno-c99-extensions >>>> -I../../libstdc++-v3/include >>>> -I../../libstdc++-v3/include/x86_64-unknown-linux-gnu >>>> -I/export/gnu/import/git/gcc/libsanitizer/../libstdc++-v3/libsupc++ -g >>>> -O2 -D_GNU_SOURCE -m32 -MT asan_malloc_linux.lo -MD -MP -MF >>>> .deps/asan_malloc_linux.Tpo -c -o asan_malloc_linux.lo >>>> /export/gnu/import/git/gcc/libsanitizer/asan/asan_malloc_linux.cc >>>> libtool: compile: unrecognized option `-D_GNU_SOURCE' >>>> libtool: compile: Try `libtool --help' for more information. >>>> make[8]: *** [asan_allocator.lo] Error 1 >>>> make[8]: *** Waiting for unfinished jobs.... >>>> libtool: compile: unrecognized option `-D_GNU_SOURCE' >>>> libtool: compile: Try `libtool --help' for more information >>>> >>>> I checked in this patch to restore MAKEOVERRIDES. >>> >>> This will break "make CFLAGS=-g". Please revert the AM_MAKEFLAGS change >>> fully. >> >> Done. >> >>> However, your patch that removed AM_MAKEFLAGS similarly broke "make >>> CC=foo". While it is much less useful, this nevertheless may be the >>> sign of a bigger problem. Why did you need to remove CC/CXX from >>> AM_MAKEFLAGS in the first place? >>> >> >> After further investigation, I found >> >> RAW_CXX_TARGET_EXPORTS = \ >> $(BASE_TARGET_EXPORTS) \ >> CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ >> CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; >> export CXX; >> ... >> >> all-stage1-target-libsanitizer: configure-stage1-target-libsanitizer >> @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start >> @r=`${PWD_COMMAND}`; export r; \ >> s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ >> TFLAGS="$(STAGE1_TFLAGS)"; \ >> $(RAW_CXX_TARGET_EXPORTS) \ >> cd $(TARGET_SUBDIR)/libsanitizer && \ >> $(MAKE) $(BASE_FLAGS_TO_PASS) \ >> CFLAGS="$(CFLAGS_FOR_TARGET)" \ >> CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ >> LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ >> CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ >> CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ >> LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ >> $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' >> 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ >> \ >> TFLAGS="$(STAGE1_TFLAGS)" \ >> $(TARGET-stage1-target-libsanitizer) >> >> The problem is >> >> CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' >> >> Those are bogus since >> >> 1. We never set RAW_CXX_FOR_TARGET. >> 2. We have set >> >> CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ >> CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; >> export CXX; >> >> in RAW_CXX_TARGET_EXPORTS. There is no need to do anything. > > Nope, if you remove this you get the wrong definition of CC and CXX from > EXTRA_TARGET_FLAGS. Instead, you need to add RAW_CXX_FOR_TARGET to > AM_MAKEFLAGS and EXTRA_TARGET_FLAGS. >
We have set CXX and CXX_FOR_TARGET before EXTRA_TARGET_FLAGS is used: RAW_CXX_TARGET_EXPORTS = \ $(BASE_TARGET_EXPORTS) \ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; Shouldn't we the right CXX and CXX_FOR_TARGET? -- H.J.