Volker Simonis wrote:
Hi,

me again. I' found that the additional "-fastdebug" directories are
created unconditionally by the top-level makefile, in the setup-step:

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

Is this really necessary?

Unfortunately yes. Unless we change some other makefile logic that isn't part
of the OpenJDK. I agree it's ugly, but there was a reason. It had something
to do with the Windows and those "short paths" and how the
short path changes if you 'rm -f -r outputdir ; mkdir outputdir' the original
path. The above fixed the problem.

Many of the ugly things in the makefiles were done to deal with Windows issues,
which I tried to bury in the Defs-windows.gmk files when I could.


Morever I found that I can create a debug build that honours the ALT_OUTPUTDIR
setting and leaves me with only one bogus "-fastdebug" directory as follows:

make SKIP_DEBUG_BUILD=false SKIP_FASTDEBUG_BUILD=true DEBUG_NAME=debug
ALT_OUTPUTDIR=/build/my_debug_build

This will create the following two directories in /build:

my_debug_build
my_debug_build-fastdebug

and put all the stuff into "my_debug_build" as desired. After the
build I can remove "my_debug_build-fastdebug" and be happy.

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?

-kto


Regards,
Volker


On 1/10/08, Volker Simonis <[EMAIL PROTECTED]> wrote:
Hi,
there seems to be a problem with the handling of ALT_OUTPUTDIR for debug and
fastdebug builds. The top-level makefile contains the following definitions:

Makefile
--------

include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk

COMMON_DEBUG_FLAGS= \
        DEBUG_NAME=$(DEBUG_NAME) \
        ALT_OUTPUTDIR=$(_OUTPUTDIR)-$(DEBUG_NAME) \
        NO_DOCS=true

generic_debug_build:
        @$(ECHO) $@ build started: `$(DATE) '+%y-%m-%d %H:%M'`
        $(MAKE) $(COMMON_DEBUG_FLAGS) setup build
        @$(ECHO) $@ build finished: `$(DATE) '+%y-%m-%d %H:%M'`


As you can see, it always sets the value of ALT_OUTPUTDIR to
"$(_OUTPUTDIR)-$(DEBUG_NAME)" where _OUTPUTDIR is the default value of the
output directory which is defined in "jdk/make/common/shared/Defs-control.gmk"
as follows (i.e. "linux-i586" on x86/Linux):

jdk/make/common/shared/Defs-control.gmk
---------------------------------------
# Default output directory
_OUTPUTDIR=$(CONTROL_TOPDIR)/build/$(PLATFORM)-$(ARCH)

Shouldn't COMMON_DEBUG_FLAGS use $(OUTPUTDIR) instead of $(_OUTPUTDIR) or
am I missing something.


It is also quite confusing that the build always creates
$(OUTPUTDIR)-fastdebug subdirectories, no matter if we do a fastdebug build or
not. I think that only the directories should be created which are used later
on for the build. If I do for example "make debug_build" without specifying
"ALT_OUTPUT_DIR", make will create four output directories as follows:

linux-i586
linux-i586-debug
linux-i586-debug-fastdebug
linux-i586-fastdebug

in the build directory, while the output only goes to "linux-i586-debug".
What are the "-fastdebug"-directories (especially
"linux-i586-debug-fastdebug") good for?

If I do "make debug_build ALT_OUTPUTDIR=/build/xxx" the build creates:

linux-i586-debug
linux-i586-debug-fastdebug
xxx
xxx-fastdebug

but the output goes to "linux-i586-debug" as in the previous case.

If we fix the top-level Makefile as suggested above, we'll get:

xxx
xxx-debug
xxx-debug-fastdebug
xxx-fastdebug

with all the output going to "xxx-debug". That seems much better, but
still we have three unused directories!

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.

Regards,
Volker

Reply via email to