1 #
   2 # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
   3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 #
   5 # This code is free software; you can redistribute it and/or modify it
   6 # under the terms of the GNU General Public License version 2 only, as
   7 # published by the Free Software Foundation.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 #
  27 # Defnitions for all platforms.
  28 #
  29 # Normally the convention is that these alternate definitions of
  30 #   primary make variables are never defined inside the Makefiles anywhere
  31 #   but are defined via environment variables or set on the make command
  32 #   line. So you should never see an ALT_* variable defined in any
  33 #   makefiles, just used. This is the convention and there are some
  34 #   exceptions, either mistakes or unusual circumstances.
  35 #
  36 # The naming convention for the default value of one of these variables
  37 #   that has an ALT_* override capability is to name the default value with a
  38 #   leading underscore (_). So for XXX you would have:
  39 #      _XXX      default value
  40 #      ALT_XXX   any override the user is providing if any
  41 #      XXX       the final value, either the default _XXX or the ALT_XXX value.
  42 #
  43 
  44 # On Directory names. In very rare cases should the Windows directory
  45 #    names use the backslash, please use the C:/ style of windows paths.
  46 #    Avoid duplicating the // characters in paths, this has known to cause
  47 #    strange problems with jar and other utilities, e.g. /a//b/ != /a/b/.
  48 #    Some of these variables have an explicit trailing / character, but in
  49 #    general, they should NOT have the trailing / character.
  50 
  51 # Get shared system utilities macros defined
  52 include $(BUILDDIR)/common/shared/Defs-utils.gmk
  53 
  54 # Assumes ARCH, PLATFORM, etc. have been defined.
  55 
  56 # Simple pwd path
  57 define PwdPath
  58 $(shell cd $1 2> $(DEV_NULL) && pwd)
  59 endef
  60 
  61 # Checks an ALT value for spaces (should be one word), 
  62 #       warns and returns Check_ALT_$1 if spaces
  63 define AltCheckSpaces
  64 $(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1))
  65 endef
  66 
  67 # Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty
  68 define AltCheckValue
  69 $(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1)
  70 endef
  71 
  72 # Checks any value for empty, warns and returns $2 if empty
  73 define CheckValue
  74 $(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2)
  75 endef
  76 
  77 # Prefix for a utility prefix path, if empty leave alone, otherwise end with a /
  78 define PrefixPath
  79 $(if $1,$(subst //,/,$1/),)
  80 endef
  81 
  82 # Select a directory if it exists, or the alternate 2 or the alternate 3
  83 define DirExists
  84 $(shell \
  85   if [ -d "$1" ]; then  \
  86     echo "$1"; \
  87   elif [ -d "$2" ]; then \
  88     echo "$2"; \
  89   else \
  90     echo "$3"; \
  91   fi)
  92 endef
  93 
  94 # Select a writable directory if it exists and is writable, or the alternate
  95 define WriteDirExists
  96 $(shell \
  97   if [ -d "$1" -a -w "$1" ]; then  \
  98     echo "$1"; \
  99   else \
 100     echo "$2"; \
 101   fi)
 102 endef
 103 
 104 # Select a file if it exists, or the alternate 1, or the alternate 2
 105 define FileExists
 106 $(shell \
 107   if [ -r "$1" ]; then \
 108     echo "$1"; \
 109   elif [ -r "$2" ]; then \
 110     echo "$2"; \
 111   else \
 112     echo "NO_FILE_EXISTS"; \
 113   fi)
 114 endef
 115 
 116 # Given a line of text, get the major.minor version number from it
 117 define GetVersion
 118 $(shell echo $1 | sed -e 's@[^1-9]*\([1-9][0-9]*\.[0-9][0-9]*\).*@\1@' )
 119 endef
 120 
 121 # Given a major.minor.micro version, return the major, minor, or micro number
 122 define MajorVersion
 123 $(if $(word 1, $(subst ., ,$1)),$(word 1, $(subst ., ,$1)),0)
 124 endef
 125 define MinorVersion
 126 $(if $(word 2, $(subst ., ,$1)),$(word 2, $(subst ., ,$1)),0)
 127 endef
 128 define MicroVersion
 129 $(if $(word 3, $(subst ., ,$1)),$(word 3, $(subst ., ,$1)),0)
 130 endef
 131 
 132 # Macro that returns missing, same, newer, or older $1=version $2=required
 133 #  (currently does not check the micro number)
 134 define CheckVersions
 135 $(shell \
 136   if [ "$1" = "" -o "$2" = "" ]; then \
 137     echo missing; \
 138   else \
 139     if [ "$1" = "$2" ]; then \
 140       echo same; \
 141     else \
 142       if [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \
 143         echo older; \
 144       else \
 145         if [ $(call MajorVersion,$1) -eq $(call MajorVersion,$2) -a \
 146              $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
 147           echo older; \
 148         else \
 149           echo newer; \
 150         fi; \
 151       fi; \
 152     fi; \
 153   fi)
 154 endef
 155 
 156 # Make sure certain variables are non-empty at this point
 157 _check_values:=\
 158 $(call CheckValue,ARCH,),\
 159 $(call CheckValue,ARCH_DATA_MODEL,),\
 160 $(call CheckValue,VARIANT,),\
 161 $(call CheckValue,PLATFORM,)
 162 
 163 # Misc common settings for all workspaces
 164 #   This determines the version of the product, and the previous version or boot
 165 ifndef JDK_MAJOR_VERSION
 166   JDK_MAJOR_VERSION      = 1
 167   PREVIOUS_MAJOR_VERSION = 1
 168 endif
 169 
 170 ifndef JDK_MINOR_VERSION
 171   JDK_MINOR_VERSION      = 7
 172   PREVIOUS_MINOR_VERSION = 6
 173 endif
 174 
 175 ifndef JDK_MICRO_VERSION
 176   JDK_MICRO_VERSION      = 0
 177   PREVIOUS_MICRO_VERSION = 0
 178 endif
 179 
 180 ifndef MILESTONE
 181   MILESTONE = internal
 182 endif
 183 
 184 ifndef BUILD_NUMBER
 185   JDK_BUILD_NUMBER = b00
 186 else
 187   ifndef JDK_BUILD_NUMBER
 188     JDK_BUILD_NUMBER = $(BUILD_NUMBER)
 189   endif
 190 endif
 191 
 192 # Default variant is the optimized version of everything
 193 #    can be OPT or DBG,  default is OPT
 194 #    Determine the extra pattern to add to the release name for debug/fastdebug.
 195 #    Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over.
 196 #
 197 ifeq ($(VARIANT), DBG)
 198   BUILD_VARIANT_RELEASE=-debug
 199 else
 200   BUILD_VARIANT_RELEASE=
 201 endif
 202 ifeq ($(FASTDEBUG), true)
 203   VARIANT=DBG
 204   BUILD_VARIANT_RELEASE=-fastdebug
 205   _JDK_IMPORT_VARIANT=/fastdebug
 206 endif
 207 
 208 # Depending on the flavor of the build, add a -debug or -fastdebug to the name
 209 ifdef DEBUG_NAME
 210   BUILD_VARIANT_RELEASE=-$(DEBUG_NAME)
 211 endif
 212 
 213 JDK_VERSION  = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
 214 JDK_UNDERSCORE_VERSION =  $(subst .,_,$(JDK_VERSION))
 215 
 216 # RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set
 217 ifneq ($(MILESTONE),fcs)
 218   RELEASE      = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE)
 219 else
 220   RELEASE      = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE)
 221 endif
 222 
 223 # FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set
 224 ifndef FULL_VERSION
 225   ifdef BUILD_NUMBER
 226     FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER)
 227   else
 228     BUILD_NUMBER = b00
 229     USER_RELEASE_SUFFIX := $(shell echo $(USER)_`date '+%d_%b_%Y_%H_%M' | tr "A-Z" "a-z"`)
 230     FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER)
 231   endif
 232   export FULL_VERSION
 233 endif
 234 
 235 # Promoted build location
 236 PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted
 237 PROMOTED_BUILD_LATEST = latest
 238 PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST)
 239 PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries
 240 
 241 # OPT: Changes what the optimizations settings (in _OPT)
 242 POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)
 243 
 244 # PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel.
 245 #  If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set
 246 #  to parallel.
 247 #
 248 #  Recommended setting: 2 seems to be ideal for single cpu machines,
 249 #                       2 times the number of CPU's is a basic formula, 
 250 #                       but probably not more than 4 if the machine is 
 251 #                       being shared by others, or the machine is limited 
 252 #                       in RAM or swap.
 253 #
 254 ifdef ALT_PARALLEL_COMPILE_JOBS
 255   PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS)
 256 else
 257   PARALLEL_COMPILE_JOBS=2
 258 endif
 259 
 260 # Previous JDK release (version of BOOTDIR version)
 261 ifdef ALT_PREVIOUS_JDK_VERSION
 262   PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION)
 263 else
 264   PREVIOUS_JDK_VERSION  = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION)
 265 endif
 266 export PREVIOUS_JDK_VERSION
 267 PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION)
 268 PREVIOUS_JDK_VERSION:=$(call AltCheckValue,PREVIOUS_JDK_VERSION)
 269 
 270 # Version with _ instead of . in number
 271 ifeq ($(PREVIOUS_MINOR_VERSION),5)
 272   PREVIOUS_JDK_UNDERSCORE_VERSION =  $(subst .,_,$(PREVIOUS_JDK_VERSION))
 273 else
 274   PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION)
 275 endif
 276 
 277 # Get platform specific settings
 278 include $(BUILDDIR)/common/shared/Defs-$(PLATFORM).gmk
 279 
 280 # Components
 281 ifdef ALT_LANGTOOLS_DIST
 282   LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST))
 283 else
 284   LANGTOOLS_DIST =
 285 endif
 286 
 287 # These are the same on all platforms but require the above platform include 1st
 288 
 289 # BOOTDIR: Bootstrap JDK, previous released JDK.
 290 #   _BOOTDIR1 and _BOOTDIR2 picked by platform
 291 ifdef ALT_BOOTDIR
 292   BOOTDIR =$(ALT_BOOTDIR)
 293 else
 294   BOOTDIR  :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR)
 295 endif
 296 export BOOTDIR
 297 BOOTDIR:=$(call AltCheckSpaces,BOOTDIR)
 298 BOOTDIR:=$(call AltCheckValue,BOOTDIR)
 299 
 300 # OUTPUTDIR: Location of all output for the build
 301 _BACKUP_OUTPUTDIR = $(TEMP_DISK)/$(USER)/jdk-outputdir
 302 ifdef ALT_OUTPUTDIR
 303   _POSSIBLE_OUTPUTDIR =$(subst \,/,$(ALT_OUTPUTDIR))
 304 else
 305   ifndef _OUTPUTDIR
 306     _OUTPUTDIR = $(_BACKUP_OUTPUTDIR)
 307   endif
 308   _POSSIBLE_OUTPUTDIR =$(_OUTPUTDIR)
 309 endif
 310 _create_outputdir1:=$(shell mkdir -p $(_POSSIBLE_OUTPUTDIR) > $(DEV_NULL) 2>&1)
 311 OUTPUTDIR:=$(call WriteDirExists,$(_POSSIBLE_OUTPUTDIR),$(_BACKUP_OUTPUTDIR))
 312 _create_outputdir2:=$(shell mkdir -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1)
 313 ifeq "$(OUTPUTDIR)" "$(_BACKUP_OUTPUTDIR)"
 314   _outputdir_warning:=$(warning "WARNING: OUTPUTDIR '$(_POSSIBLE_OUTPUTDIR)' not writable, will use '$(_BACKUP_OUTPUTDIR)'")
 315 endif
 316 OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR)
 317 OUTPUTDIR:=$(call AltCheckValue,OUTPUTDIR)
 318 
 319 # Bin directory
 320 #   NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64
 321 BINDIR      = $(OUTPUTDIR)/bin$(ISA_DIR)
 322   
 323 # Absolute path to output directory
 324 ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR))
 325 
 326