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.

Reply via email to