automake issue
Ken Brown
kbrown@cornell.edu
Thu Oct 21 19:33:56 GMT 2021
On 10/21/2021 9:08 AM, Jon Turney wrote:
> On 21/10/2021 11:48, Corinna Vinschen wrote:
>> On Oct 20 16:58, Ken Brown wrote:
>>> I was debugging with what I thought was an unoptimized build of cygwin1.dll
>>> (with -O0 in CXXFLAGS), but then I discovered that malloc.cc was actually
>>> compiled with -O3. This is because of the following snippet from
>>> winsup/cygwin/Makefile.am:
>>>
>>> # If an optimization level is explicitly set in CXXFLAGS, set -O3 for these
>>> files
>>> # XXX: this seems to assume it's not -O0?
>
> Note that this is my observation of a pre-existing issue, not something that's
> introduced by the automake conversion.
>
>>> #
>>> # (the indentation here prevents automake trying to process this as an automake
>>> # conditional)
>>> ifneq "${filter -O%,$(CXXFLAGS)}" ""
>>> malloc_CFLAGS=-O3
>>> sync_CFLAGS=-O3
>>> endif
>>>
>>> I thought I could fix this by changing the snippet to
>>>
>>> ifneq "${filter -O%,$(CXXFLAGS)}" ""
>>> ifeq "${filter -O0,$(CXXFLAGS)}" ""
>>> malloc_CFLAGS=-O3
>>> sync_CFLAGS=-O3
>>> endif
>>> endif
>
> Clever. It didn't occur to me to write something like this.
>
>>> but this didn't work. After running winsup/autogen.sh,
>>> winsup/cygwin/Makefile.in contained
>>>
>>> malloc_CFLAGS = -O3
>>> sync_CFLAGS = -O3
>>>
>>> unconditionally.
>
> Hmm.. yes. That's disappointing. I think it was working at some stage, so idk
> if this is a automake change?
>
>>> So in spite of the comment above about indentation, it seems that the
>>> conditional is being treated as an automake conditional.
>>>
>>> Does anyone know how to fix this so that -O0 really produces an unoptimized
>>> build?
>>
>> I workaround this by setting CFLAGS=-g on the command line. There's no
>> -O then and it should work as desired. The save thing would probably
>> be something like this, though:
>>
>> https://stackoverflow.com/questions/4256609/makefile-conditional-with-automake-autoconf
>>
>
> Using an automake conditional isn't good, because that can't consider the value
> of CXXFLAGS if it's overriden on the 'make' command line.
>
> Really, I'm not sure if this block is a good idea at all. I did consider
> removing it when converting to automake.
>
> I couldn't find any history which suggests these flags are here due to evidence
> ('using -O3 makes this benchmark faster'), rather than guesswork ('these files
> probably contain hotspots, so use -O3 to make it go faster!').
It's too bad we don't know why this was done. In the meantime, I'll work around
the problem by using a private branch in which that block is removed. I tried
Corinna's suggestion of setting CFLAGS=-g, but that didn't produce an
unoptimized build. I still saw '-O2 -g' when building newlib and '-O2 -g -g
-O2' when building cygwin.
Ken
More information about the Cygwin-developers
mailing list