Problems with ALT_OUTPUTDIR in debug build

Kelly O'Hair Kelly.Ohair at Sun.COM
Fri Jan 11 16:32:37 UTC 2008


Remove the last two MKDIR lines. I don't think they are needed and that might help.

-kto

Volker Simonis wrote:
> Ok, I think I can live with ALT_OUTPUTDIR=$(OUTPUTDIR)-$(DEBUG_NAME)
> as well. This at least honours the original user setting of
> ALT_OUTPUTDIR (though with a "-debug" suffix).
> 
> But it will create FOUR outputdirectories, if we say "make debug_build
>  ALT_OUTPUTDIR=xxx" of which only "xxx-debug" will be used:
> 
> xxx
> xxx-debug
> xxx-debug-fastdebug
> xxx-fastdebug
> 
> If we say "make fastdebug_build  ALT_OUTPUTDIR=xxx" if will create
> THREE directories, of which only "xxx-fastdebug", will be used:
> 
> xxx
> xxx-fastdebug
> xxx-fastdebug-fastdebug
> 
> I still think this is quite confusing (especially
> "xxx-debug-fastdebug" and "xxx-fastdebug-fastdebug" - what should they
> be good for).
> 
> The main cause for this hassle is the setup rule in the top-level
> Makefile (and the recursive invocation of this makefile for the
> "debug" and "fasdebug" targets) :
> 
> setup:
>        $(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
>        $(MKDIR) -p $(ABS_OUTPUTDIR)/j2sdk-image
>        $(MKDIR) -p $(OUTPUTDIR)-fastdebug/j2sdk-image
>        $(MKDIR) -p $(ABS_OUTPUTDIR)-fastdebug/j2sdk-image
> 
> I still don't understand why it is necessary, because if I remove all
> the MKDIRs, (and with ALT_OUTPUTDIR=$(OUTPUTDIR)-$(DEBUG_NAME) as
> suggested above), at least on my Linux box everything works fine:
> 
> "make debug_build  ALT_OUTPUTDIR=xxx" creates two directories and puts
> the output to "xxx-debug":
> 
> xxx
> xxx-debug
> 
> "make fastdebug_build  ALT_OUTPUTDIR=xxx" creates two directories and
> puts the output to "xxx-fastdebug":
> 
> xxx
> xxx-fastdebug
> 
> and "make all  ALT_OUTPUTDIR=xxx" creates just "xxx" and puts the output into.
> 
> This seams reasonable to me!
> 
> You wrote that the "MKDIRs" in the setup rules are only needed to
> workaround a windows problem. I didn't built an Windows, but perhaps
> somebody can try if they are still needed (Ted?). And if they will be
> really needed, perhaps we can conditionally enable them on Windows
> only, so we don't clutter the Unix build with usless directories?
> 
> Regards,
> Volker
> 
> On 1/10/08, Kelly O'Hair <Kelly.Ohair at sun.com> wrote:
>> ALT_OUTPUTDIR=$(OUTPUTDIR)
>> doesn't make sense to me.
>>
>> The makefiles will define OUTPUTDIR to be equal to $(ALT_OUTPUTDIR) if
>> ALT_OUTPUTDIR is set.
>> The _OUTPUTDIR is the default build location, when ALT_OUTPUTDIR is not set.
>>
>> The original idea here in setting ALT_OUTPUTDIR=$(_OUTPUTDIR)-$(DEBUG_NAME)
>> was to put all the results of a debug build in a completely different
>> directory, which I still think is right.
>> I suspect this needs to be:
>>     ALT_OUTPUTDIR=$(OUTPUTDIR)-$(DEBUG_NAME)
>>
>> A long time ago, the debug files were built along side the normal files, and
>> all debug files had that "_g" suffix (e.g. jvm_g.dll, etc.) but we completely
>> got rid of that because it was a nightmare.
>> The debug builds then just became a second pass over the source with the same
>> makefiles but just a different output directory so they didn't mix.
>> I'm afraid using ALT_OUTPUTDIR=$(OUTPUTDIR) will mix up the optimized files
>> with the debug files, which won't be good.
>>
>> -kto
>>
>> Volker Simonis wrote:
>>> I would suggest to fix the top-level  Makefile such that
>>> COMMON_DEBUG_FLAGS uses $(OUTPUTDIR) instead of $(_OUTPUTDIR)
>>> and doesn't append "-$(DEBUG_NAME)" to ALT_OUTPUTDIR like so:
>>>
>>> COMMON_DEBUG_FLAGS= \
>>>         DEBUG_NAME=$(DEBUG_NAME) \
>>>         ALT_OUTPUTDIR=$(OUTPUTDIR) \
>>>         NO_DOCS=true
>>>
>>> We will than always end up with two directories like so:
>>>
>>> xxx
>>> xxx-fastdebug
>>>
>>> if we used "ALT_OUTPUTDIR=xxx".
>>>
>>> "xxx-fastdebug" will always be empty (but needed if I follow your
>>> previous post) so we can remove it after the build. But the user will
>>> get the output in the directory he specified with ALT_OUTPUTDIR and
>>> that seems crucial to me.
>>>
>>> What do you think?
>>>
>>> Volker
>>>
>>> On 1/10/08, Kelly O'Hair <Kelly.Ohair at sun.com> wrote:
>>>> Your final paragraph I think is the answer:
>>>>
>>>>    "In my eyes, the cleanest solution would be if ALT_OUTPUTDIR would be honoured
>>>>     "as is", as the output directory for everything we built, without anything
>>>>     appended to it. So the developer should be free to choose whatever he wants as
>>>>     the output directory. And there should be no additional directories created."
>>>>
>>>> The ongoing problem has been how to make this work in all cases.
>>>> But I'm all for it.
>>>>
>>>> The generally accepted default for an output directory has been a ./build or
>>>> ./dist directory at the top of the source tree you are building.
>>>> With corba, jaxp, jaxws, langtools, hotspot all being independently buildable,
>>>> what exactly are you recommending to fix this?
>>>>
>>>> -kto
>>>>
>>>> Volker Simonis wrote:
>>>>>>> Any comments if this is the right way to do a debug build?
>>>>>> If it works it's fine. I usually just run 'make debug_build', does that not work?
>>>>>>
>>>>> It works, but it has the problems that I detailed in my first mail.
>>>>> Did you also read that one?
>>>>> I may seem that my second mail contained the solution for the first
>>>>> one, but that's not true, its justa partial workaround for the problem
>>>>> described in the first one:
>>>>>
>>>>> http://mail.openjdk.java.net/pipermail/build-dev/2008-January/000669.html
>>>>>
>>>>> Thanks and regards,
>>>>> Volker



More information about the build-dev mailing list