#
# @(#)Defs.gmk	1.21 07/05/15
#
# Common variables used by all the Java makefiles.  This file should not
# contain rules.
#

include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs-$(PLATFORM).gmk


SHARE_SRC    = $(TOPDIR)/src/share
PLATFORM_SRC = $(TOPDIR)/src/$(PLATFORM)

TARGDIR = 
MINCLUDES = $(TOPDIR)/build/share/minclude/

#
# Default BOOTDIR
#
_BOOTDIR = /usr/local/java/latest

#
# Set BOOTDIR to _BOOTDIR if ALT_BOOTDIR isn't set. Otherwise, set
# it to ALT_BOOTDIR
#
BOOTDIR = $(_BOOTDIR$(ALT_BOOTDIR))$(ALT_BOOTDIR)

#
# Default JAVAHOME
#
ifeq ($(ARCH), sparc)
    _JAVAHOME = /java/re/jdk/1.5.0/archive/fcs/binaries/solaris-sparc
else
    _JAVAHOME = /java/re/jdk/1.5.0/archive/fcs/binaries/solaris-i586
endif

#
# Set JAVAHOME to _JAVAHOME if ALT_JAVAHOME isn't set. Otherwise, set
# it to ALT_JAVAHOME
#
JAVAHOME = $(_JAVAHOME$(ALT_JAVAHOME))$(ALT_JAVAHOME)

JDK         = $(JAVAHOME$(JDK_HOME))$(JDK_HOME)
JDK_BINDIR  = $(JDK)/bin
JDK_INCLUDE = $(JDK)/include
JDK_LIBDIR  = $(JDK)/jre/lib
BINDIR      = $(TOPDIR)/build/$(PLATFORM)/bin
LIBDIR      = $(TOPDIR)/build/$(PLATFORM)/lib
INCLUDEDIR  = $(TOPDIR)/build/$(PLATFORM)/include
CLASSDIR    = $(TOPDIR)/build/$(PLATFORM)/classes
RELEASEDIR  = $(TOPDIR)/build/$(PLATFORM)/release
# Set CLASSBINDIR to CLASSDIR if ALT_CLASSBINDIR isn't set.  Otheriwse set
# it to ALT_CLASSBINDIR
CLASSBINDIR = $(CLASSDIR$(ALT_CLASSBINDIR))$(ALT_CLASSBINDIR)
_SRCDIR     = .
SRCDIR      = $(_SRCDIR$(ALT_SRCDIR))$(ALT_SRCDIR)

INCLUDES = -I. -ICClassHeaders \
	-I$(JDK_INCLUDE) -I$(JDK_INCLUDE)/$(PLATFORM) \
	$(patsubst %,-I%,$(subst :, ,$(VPATH.h))) $(OTHER_INCLUDES)
OTHER_CPPFLAGS = $(INCLUDES)

#
# vpaths.  These are the default locations searched for source files.
# GNUmakefiles of individual areas often override the default settings.
# There are no longer default vpath entries for C and assembler files
# so we can ensure that libraries don't get their hands on JVM files.
#
# We define an intermediate variable for Java files because
# we use its value later to help define $CLASSPATH
#
VPATH.java = $(PLATFORM_SRC)/classes/$(SRCDIR):$(SHARE_SRC)/classes/$(SRCDIR)

vpath %.java $(VPATH.java)

vpath %.class $(CLASSBINDIR)

vpath %.o   $(OBJDIR)

#
# VPATH.h is used elsewhere to generate include flags.  By default, 
# anyone has access to the include files that the JVM area exports,
# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific
# relatives.
#
VPATH.h =   $(PLATFORM_SRC)/javavm/export:$(SHARE_SRC)/javavm/export

vpath %.h   $(VPATH.h)

#
# Object Directories
# Create different object directories for green and native threads
# so that both options can be built without clobbering each other

# Directory name specific to type of threads: green or native
# If THREADS_FLAG is not set or not equal to green or native, then no threads
# specific object directories are made. This would enable to quickly move to
# a build environment with a single threads type, in the future.
# TSOBJDIR = Thread Specific object directory

ifdef BUILD_REENTRANT_LIBS
	TSOBJDIR = .
else
ifeq ($(THREADS_FLAG), native)
	TSOBJDIR = native_threads
else
ifeq ($(THREADS_FLAG), green)
	TSOBJDIR = green_threads
else
	TSOBJDIR = .
endif
endif
endif

#
OBJDIR_NAME     = obj
OBJDIR          = $(OBJDIR_NAME)$(SUFFIX)/$(ARCH)/$(TSOBJDIR)
OBJDIRS         = $(OBJDIR_NAME)$(OPT_SUFFIX)/$(ARCH)/$(TSOBJDIR) \
		  $(OBJDIR_NAME)$(DBG_SUFFIX)/$(ARCH)/$(TSOBJDIR)

#
# LIB_LOCATION must be defined in all cases so that we can link against
# libjava in various places.
#
LIB_LOCATION =  $(LIBDIR)/$(ARCH)
JDK_LIB_LOCATION =  $(JDK_LIBDIR)/$(ARCH)

# Compute the root of each of the object directories
# used to delete whole object directories when making clean and/or clobber

OBJROOTS = $(patsubst %/$(ARCH)/$(TSOBJDIR), %, $(OBJDIRS))

#
# Java header and stub variables
#
ifeq ($(PRODUCT), java)
    CLASSPATH =	$(CLASSBINDIR):$(DEPENDS):$(VPATH.java)
else
    PKG    = $(shell expr $(PACKAGE) : '\([a-z]*\)')
    PKGDIR = $(shell echo $(PACKAGE) | sed 's:\.:/:g')
    CLASSSRCDIR1 = $(PLATFORM_SRC)/classes/$(SRCDIR)
    CLASSSRCDIR2 = $(SHARE_SRC)/classes/$(SRCDIR)
    SRCPATH = $(CLASSSRCDIR1):$(CLASSSRCDIR2)
    CLASSPATH = $(SRCPATH):$(CLASSBINDIR):$(DEPENDS)
endif

CLASSHDRDIR =	CClassHeaders
CLASSHDRS =     $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export)))
CLASSSTUBOBJS = classstubs.o
STUBPREAMBLE=   $(TOPDIR)/build/$(PLATFORM)/classes/StubPreamble.h

#
# Suffixes for various VARIANTs
#
OPT_SUFFIX      =
DBG_SUFFIX      = _g
SUFFIX          = $($(VARIANT)_SUFFIX)

#
# Java executables/scripts [I'm not sure whether we really want to be
# getting the raw executables in the other cases rather than going
# through the wrappers.  Adding JCMD to fix a problem in JAVAC_CMD is
# conservative for now but may not be best.  It's also not clear that
# JCMD should be java$(SUFFIX), but that may be needed for "gnumake
# debug" to do the right thing.  Again, do no harm for now.]
#
ifeq ($(PRODUCT), java)
    JAVA    = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/java$(SUFFIX)
    JAVAH   = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javah$(SUFFIX)
    JAVAC   = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/javac$(SUFFIX)
    JAR     = $(BINDIR)/$(ARCH)/$(TSOBJDIR)/jar$(SUFFIX)
    JCMD    = $(BINDIR)/java$(SUFFIX) -$(THREADS_FLAG)
else
    JAVA    = $(JDK_BINDIR)/java$(SUFFIX)
    JAVAC   = $(JDK_BINDIR)/javac$(SUFFIX)
    JAVAH   = $(JDK_BINDIR)/javah$(SUFFIX)
    JAVADOC = $(JDK_BINDIR)/javadoc$(SUFFIX)
    JAR     = $(JDK_BINDIR)/jar$(SUFFIX)
    JDB	    = $(JDK_BINDIR)/jdb$(SUFFIX)
    JCMD    = $(JAVA)
endif

#
# Invoking the Java compiler
#
JAVAC_CMD = $(JAVAC) -source 1.5

#
# Set opt level to ALT_OPT if set otherwise _OPT
#
POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)

#
# Tool flags
#
CFLAGS          = $(CFLAGS_$(VARIANT)) $(CFLAGS_COMMON) $(OTHER_CFLAGS)
LCFLAGS         = $(CFLAGS_$(VARIANT)) $(LCFLAGS_COMMON) $(OTHER_CFLAGS)
CPPFLAGS        = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \
		  $(DEFINES) $(OPTIONS:%=-D%)
LCPPFLAGS       = $(CPPFLAGS_$(VARIANT)) $(LCPPFLAGS_COMMON) \
		  $(OTHER_CPPFLAGS) $(DEFINES) $(OPTIONS:%=-D%)
ASFLAGS         = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS)
LDFLAGS         = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS)
LDLIBS          = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON)

