automake issue

Jon Turney jon.turney@dronecode.org.uk
Thu Oct 21 13:08:02 GMT 2021


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!').


More information about the Cygwin-developers mailing list