Makefile revision 32:46a989ab9329
1# 2# Copyright 1995-2008 Sun Microsystems, Inc. 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. Sun designates this 8# particular file as subject to the "Classpath" exception as provided 9# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22# CA 95054 USA or visit www.sun.com if you need additional information or 23# have any questions. 24# 25 26BUILD_PARENT_DIRECTORY=. 27 28ifndef TOPDIR 29 TOPDIR:=. 30endif 31 32ifndef CONTROL_TOPDIR 33 CONTROL_TOPDIR=$(TOPDIR) 34endif 35 36# Openjdk sources (only used if SKIP_OPENJDK_BUILD!=true) 37OPENJDK_SOURCETREE=$(TOPDIR)/openjdk 38OPENJDK_BUILDDIR:=$(shell \ 39 if [ -r $(OPENJDK_SOURCETREE)/Makefile ]; then \ 40 echo "$(OPENJDK_SOURCETREE)"; \ 41 else \ 42 echo "."; \ 43 fi) 44 45ifndef JDK_TOPDIR 46 JDK_TOPDIR=$(TOPDIR)/jdk 47endif 48ifndef JDK_MAKE_SHARED_DIR 49 JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared 50endif 51 52# For start and finish echo lines 53TITLE_TEXT = Control $(PLATFORM) $(ARCH) $(RELEASE) 54DAYE_STAMP = `$(DATE) '+%y-%m-%d %H:%M'` 55START_ECHO = echo "$(TITLE_TEXT) $@ build started: $(DATE_STAMP)" 56FINISH_ECHO = echo "$(TITLE_TEXT) $@ build finished: $(DATE_STAMP)" 57 58default: all 59 60include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk 61include ./make/Defs-internal.gmk 62include ./make/sanity-rules.gmk 63include ./make/hotspot-rules.gmk 64include ./make/langtools-rules.gmk 65include ./make/corba-rules.gmk 66include ./make/jaxp-rules.gmk 67include ./make/jaxws-rules.gmk 68include ./make/jdk-rules.gmk 69include ./make/install-rules.gmk 70include ./make/sponsors-rules.gmk 71include ./make/deploy-rules.gmk 72 73# What "all" means 74all:: 75 @$(START_ECHO) 76 77all:: openjdk_check sanity 78 79ifeq ($(SKIP_FASTDEBUG_BUILD), false) 80 all:: fastdebug_build 81endif 82 83ifeq ($(SKIP_DEBUG_BUILD), false) 84 all:: debug_build 85endif 86 87ifneq ($(SKIP_OPENJDK_BUILD), true) 88 all:: openjdk_build 89endif 90 91all:: all_product_build 92 93all:: 94 @$(FINISH_ECHO) 95 96# Everything for a full product build 97all_product_build:: 98 @$(START_ECHO) 99 100ifeq ($(SKIP_PRODUCT_BUILD), false) 101 102 all_product_build:: product_build 103 104 ifeq ($(BUILD_INSTALL), true) 105 all_product_build:: $(INSTALL) 106 clobber:: install-clobber 107 endif 108 109 ifeq ($(BUILD_SPONSORS), true) 110 all_product_build:: $(SPONSORS) 111 clobber:: sponsors-clobber 112 endif 113 114 ifneq ($(SKIP_COMPARE_IMAGES), true) 115 all_product_build:: compare-image 116 endif 117 118endif 119 120all_product_build:: 121 @$(FINISH_ECHO) 122 123# Generis build of basic repo series 124generic_build_repo_series:: 125 $(MKDIR) -p $(OUTPUTDIR) 126 $(MKDIR) -p $(OUTPUTDIR)/j2sdk-image 127 128ifeq ($(BUILD_LANGTOOLS), true) 129 generic_build_repo_series:: langtools 130 clobber:: langtools-clobber 131endif 132 133ifeq ($(BUILD_CORBA), true) 134 generic_build_repo_series:: corba 135 clobber:: corba-clobber 136endif 137 138ifeq ($(BUILD_JAXP), true) 139 generic_build_repo_series:: jaxp 140 clobber:: jaxp-clobber 141endif 142 143ifeq ($(BUILD_JAXWS), true) 144 generic_build_repo_series:: jaxws 145 clobber:: jaxws-clobber 146endif 147 148ifeq ($(BUILD_HOTSPOT), true) 149 generic_build_repo_series:: $(HOTSPOT) 150 clobber:: hotspot-clobber 151endif 152 153ifeq ($(BUILD_JDK), true) 154 generic_build_repo_series:: $(JDK_JAVA_EXE) 155 clobber:: jdk-clobber 156endif 157 158ifeq ($(BUILD_DEPLOY), true) 159 generic_build_repo_series:: $(DEPLOY) 160 clobber:: deploy-clobber 161endif 162 163ifeq ($(BUILD_JDK), true) 164 ifeq ($(BUNDLE_RULES_AVAILABLE), true) 165 generic_build_repo_series:: openjdk-binary-plugs-bundles 166 endif 167endif 168 169# The debug build, fastdebug or debug. Needs special handling. 170# Note that debug builds do NOT do INSTALL steps, but must be done 171# after the product build and before the INSTALL step of the product build. 172# 173# DEBUG_NAME is fastdebug or debug 174# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix 175# The resulting j2sdk-image is used by the install makefiles to create a 176# debug install bundle jdk-*-debug-** bundle (tar or zip) 177# which will install in the debug or fastdebug subdirectory of the 178# normal product install area. 179# The install process needs to know what the DEBUG_NAME is, so 180# look for INSTALL_DEBUG_NAME in the install rules. 181# 182 183# Location of fresh bootdir output 184ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk 185FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image 186FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME)/j2sdk-image 187 188create_fresh_product_bootdir: FRC 189 @$(START_ECHO) 190 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 191 NO_DOCS=true \ 192 BOOT_CYCLE_SETTINGS= \ 193 build_product_image 194 @$(FINISH_ECHO) 195 196create_fresh_debug_bootdir: FRC 197 @$(START_ECHO) 198 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 199 NO_DOCS=true \ 200 BOOT_CYCLE_DEBUG_SETTINGS= \ 201 build_debug_image 202 @$(FINISH_ECHO) 203 204create_fresh_fastdebug_bootdir: FRC 205 @$(START_ECHO) 206 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 207 NO_DOCS=true \ 208 BOOT_CYCLE_DEBUG_SETTINGS= \ 209 build_fastdebug_image 210 @$(FINISH_ECHO) 211 212# Create boot image? 213ifeq ($(SKIP_BOOT_CYCLE),false) 214 ifneq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64) 215 DO_BOOT_CYCLE=true 216 endif 217endif 218 219ifeq ($(DO_BOOT_CYCLE),true) 220 221 # Create the bootdir to use in the build 222 product_build:: create_fresh_product_bootdir 223 debug_build:: create_fresh_debug_bootdir 224 fastdebug_build:: create_fresh_fastdebug_bootdir 225 226 # Define variables to be used now for the boot jdk 227 BOOT_CYCLE_SETTINGS= \ 228 ALT_BOOTDIR=$(FRESH_BOOTDIR) \ 229 ALT_JDK_IMPORT_PATH=$(FRESH_BOOTDIR) 230 BOOT_CYCLE_DEBUG_SETTINGS= \ 231 ALT_BOOTDIR=$(FRESH_DEBUG_BOOTDIR) \ 232 ALT_JDK_IMPORT_PATH=$(FRESH_DEBUG_BOOTDIR) 233 234else 235 236 # Use the supplied ALT_BOOTDIR as the boot 237 BOOT_CYCLE_SETTINGS= 238 BOOT_CYCLE_DEBUG_SETTINGS= 239 240endif 241 242build_product_image: 243 @$(START_ECHO) 244 $(MAKE) \ 245 SKIP_FASTDEBUG_BUILD=true \ 246 SKIP_DEBUG_BUILD=true \ 247 $(BOOT_CYCLE_SETTINGS) \ 248 generic_build_repo_series 249 @$(FINISH_ECHO) 250 251generic_debug_build: 252 @$(START_ECHO) 253 $(MAKE) \ 254 ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)-$(DEBUG_NAME) \ 255 DEBUG_NAME=$(DEBUG_NAME) \ 256 NO_DOCS=true \ 257 $(BOOT_CYCLE_DEBUG_SETTINGS) \ 258 generic_build_repo_series 259 @$(FINISH_ECHO) 260 261build_debug_image: 262 $(MAKE) DEBUG_NAME=debug generic_debug_build 263 264build_fastdebug_image: 265 $(MAKE) DEBUG_NAME=fastdebug generic_debug_build 266 267# Build final image 268product_build:: build_product_image 269debug_build:: build_debug_image 270fastdebug_build:: build_fastdebug_image 271 272# Check on whether we really can build the openjdk, need source etc. 273openjdk_check: FRC 274ifneq ($(SKIP_OPENJDK_BUILD), true) 275 @$(ECHO) " " 276 @$(ECHO) "=================================================" 277 @if [ ! -r $(OPENJDK_BUILDDIR)/Makefile ] ; then \ 278 $(ECHO) "ERROR: No openjdk source tree available at: $(OPENJDK_BUILDDIR)"; \ 279 exit 1; \ 280 else \ 281 $(ECHO) "OpenJDK will be built after JDK is built"; \ 282 $(ECHO) " OPENJDK_BUILDDIR=$(OPENJDK_BUILDDIR)"; \ 283 fi 284 @$(ECHO) "=================================================" 285 @$(ECHO) " " 286endif 287 288# If we have bundle rules, we have a chance here to do a complete cycle 289# build, of production and open build. 290# FIXUP: We should create the openjdk source bundle and build that? 291# But how do we reliable create or get at a formal openjdk source tree? 292# The one we have needs to be trimmed of built bits and closed dirs. 293# The repositories might not be available. 294# The openjdk source bundle is probably not available. 295 296ifneq ($(SKIP_OPENJDK_BUILD), true) 297 ifeq ($(BUILD_JDK), true) 298 ifeq ($(BUNDLE_RULES_AVAILABLE), true) 299 300OPENJDK_PLUGS=$(ABS_OUTPUTDIR)/$(OPENJDK_BINARY_PLUGS_INAME) 301OPENJDK_OUTPUTDIR=$(ABS_OUTPUTDIR)/open-output 302OPENJDK_BUILD_NAME \ 303 = openjdk-$(JDK_MINOR_VERSION)-$(BUILD_NUMBER)-$(PLATFORM)-$(ARCH)-$(BUNDLE_DATE) 304OPENJDK_BUILD_BINARY_ZIP=$(ABS_BIN_BUNDLEDIR)/$(OPENJDK_BUILD_NAME).zip 305BUILT_IMAGE=$(ABS_OUTPUTDIR)/j2sdk-image 306ifeq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64) 307 OPENJDK_BOOTDIR=$(BOOTDIR) 308 OPENJDK_IMPORTJDK=$(JDK_IMPORT_PATH) 309else 310 OPENJDK_BOOTDIR=$(BUILT_IMAGE) 311 OPENJDK_IMPORTJDK=$(BUILT_IMAGE) 312endif 313 314openjdk_build: 315 @$(START_ECHO) 316 @$(ECHO) " " 317 @$(ECHO) "=================================================" 318 @$(ECHO) "Starting openjdk build" 319 @$(ECHO) " Using: ALT_JDK_DEVTOOLS_DIR=$(JDK_DEVTOOLS_DIR)" 320 @$(ECHO) "=================================================" 321 @$(ECHO) " " 322 $(RM) -r $(OPENJDK_OUTPUTDIR) 323 $(MKDIR) -p $(OPENJDK_OUTPUTDIR) 324 ($(CD) $(OPENJDK_BUILDDIR) && $(MAKE) \ 325 OPENJDK=true \ 326 NO_DOCS=true \ 327 ALT_JDK_DEVTOOLS_DIR=$(JDK_DEVTOOLS_DIR) \ 328 ALT_OUTPUTDIR=$(OPENJDK_OUTPUTDIR) \ 329 ALT_BINARY_PLUGS_PATH=$(OPENJDK_PLUGS) \ 330 ALT_BOOTDIR=$(OPENJDK_BOOTDIR) \ 331 ALT_JDK_IMPORT_PATH=$(OPENJDK_IMPORTJDK) \ 332 product_build ) 333 $(RM) $(OPENJDK_BUILD_BINARY_ZIP) 334 ( $(CD) $(OPENJDK_OUTPUTDIR)/j2sdk-image && \ 335 $(ZIPEXE) -q -r $(OPENJDK_BUILD_BINARY_ZIP) .) 336 $(RM) -r $(OPENJDK_OUTPUTDIR) 337 @$(ECHO) " " 338 @$(ECHO) "=================================================" 339 @$(ECHO) "Finished openjdk build" 340 @$(ECHO) " Binary Bundle: $(OPENJDK_BUILD_BINARY_ZIP)" 341 @$(ECHO) "=================================================" 342 @$(ECHO) " " 343 @$(FINISH_ECHO) 344 345 endif 346 endif 347endif 348 349clobber:: 350 $(RM) -r $(OUTPUTDIR)/* 351 $(RM) -r $(OUTPUTDIR)-debug/* 352 $(RM) -r $(OUTPUTDIR)-fastdebug/* 353 -($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE)) 354 355clean: clobber 356 357# 358# Dev builds 359# 360 361dev : dev-build 362 363dev-build: 364 $(MAKE) DEV_ONLY=true all 365dev-sanity: 366 $(MAKE) DEV_ONLY=true sanity 367dev-clobber: 368 $(MAKE) DEV_ONLY=true clobber 369 370# 371# Quick jdk verification build 372# 373jdk_only: 374 $(MAKE) SKIP_FASTDEBUG_BUILD=true BUILD_HOTSPOT=false all 375 376 377# 378# Quick jdk verification fastdebug build 379# 380jdk_fastdebug_only: 381 $(MAKE) DEBUG_NAME=fastdebug BUILD_HOTSPOT=false BUILD_DEPLOY=false \ 382 BUILD_INSTALL=false BUILD_SPONSORS=false generic_debug_build 383 384# 385# Quick deploy verification fastdebug build 386# 387deploy_fastdebug_only: 388 $(MAKE) \ 389 DEBUG_NAME=fastdebug \ 390 BUILD_HOTSPOT=false \ 391 BUILD_JDK=false \ 392 BUILD_LANGTOOLS=false \ 393 BUILD_CORBA=false \ 394 BUILD_JAXP=false \ 395 BUILD_JAXWS=false \ 396 BUILD_INSTALL=false \ 397 BUILD_SPONSORS=false \ 398 generic_debug_build 399 400# 401# Product build (skip debug builds) 402# 403product_only: 404 $(MAKE) SKIP_FASTDEBUG_BUILD=true all 405 406# 407# Check target 408# 409 410check: variable_check 411 412# 413# Help target 414# 415help: intro_help target_help variable_help notes_help examples_help 416 417# Intro help message 418intro_help: 419 @$(ECHO) "\ 420Makefile for the JDK builds (all the JDK). \n\ 421" 422 423# Target help 424target_help: 425 @$(ECHO) "\ 426--- Common Targets --- \n\ 427all -- build the core JDK (default target) \n\ 428help -- Print out help information \n\ 429check -- Check make variable values for correctness \n\ 430sanity -- Perform detailed sanity checks on system and settings \n\ 431fastdebug_build -- build the core JDK in 'fastdebug' mode (-g -O) \n\ 432debug_build -- build the core JDK in 'debug' mode (-g) \n\ 433clean -- remove all built and imported files \n\ 434clobber -- same as clean \n\ 435" 436 437# Variable help (only common ones used by this Makefile) 438variable_help: variable_help_intro variable_list variable_help_end 439variable_help_intro: 440 @$(ECHO) "--- Common Variables ---" 441variable_help_end: 442 @$(ECHO) " " 443 444# One line descriptions for the variables 445OUTPUTDIR.desc = Output directory 446PARALLEL_COMPILE_JOBS.desc = Solaris/Linux parallel compile run count 447SLASH_JAVA.desc = Root of all build tools, e.g. /java or J: 448BOOTDIR.desc = JDK used to boot the build 449JDK_IMPORT_PATH.desc = JDK used to import components of the build 450COMPILER_PATH.desc = Compiler install directory 451CACERTS_FILE.desc = Location of certificates file 452DEVTOOLS_PATH.desc = Directory containing zip and gnumake 453CUPS_HEADERS_PATH.desc = Include directory location for CUPS header files 454DXSDK_PATH.desc = Root directory of DirectX SDK 455MSDEVTOOLS_PATH.desc = Root directory of VC++ tools (e.g. rc.exe) 456MSVCRT_DLL_PATH.desc = Directory containing mscvrt.dll 457 458# Make variables to print out (description and value) 459VARIABLE_PRINTVAL_LIST += \ 460 OUTPUTDIR \ 461 PARALLEL_COMPILE_JOBS \ 462 SLASH_JAVA \ 463 BOOTDIR \ 464 JDK_IMPORT_PATH \ 465 COMPILER_PATH \ 466 CACERTS_FILE \ 467 DEVTOOLS_PATH 468 469# Make variables that should refer to directories that exist 470VARIABLE_CHECKDIR_LIST += \ 471 SLASH_JAVA \ 472 BOOTDIR \ 473 JDK_IMPORT_PATH \ 474 COMPILER_PATH \ 475 DEVTOOLS_PATH 476 477# Make variables that should refer to files that exist 478VARIABLE_CHECKFIL_LIST += \ 479 CACERTS_FILE 480 481# Some are windows specific 482ifeq ($(PLATFORM), windows) 483 484VARIABLE_PRINTVAL_LIST += \ 485 DXSDK_PATH \ 486 MSDEVTOOLS_PATH \ 487 MSVCRT_DLL_PATH 488 489VARIABLE_CHECKDIR_LIST += \ 490 DXSDK_PATH \ 491 MSDEVTOOLS_PATH \ 492 MSVCRT_DLL_PATH 493 494endif 495 496# For pattern rules below, so all are treated the same 497DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval) 498DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir) 499DO_CHECKFIL_LIST=$(VARIABLE_CHECKFIL_LIST:%=%.checkfil) 500 501# Complete variable check 502variable_check: $(DO_CHECKDIR_LIST) $(DO_CHECKFIL_LIST) 503variable_list: $(DO_PRINTVAL_LIST) variable_check 504 505# Pattern rule for printing out a variable 506%.printval: 507 @$(ECHO) " ALT_$* - $($*.desc)" 508 @$(ECHO) " \t $*=$($*)" 509 510# Pattern rule for checking to see if a variable with a directory exists 511%.checkdir: 512 @if [ ! -d $($*) ] ; then \ 513 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 514 fi 515 516# Pattern rule for checking to see if a variable with a file exists 517%.checkfil: 518 @if [ ! -f $($*) ] ; then \ 519 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 520 fi 521 522# Misc notes on help 523notes_help: 524 @$(ECHO) "\ 525--- Notes --- \n\ 526- All builds use same output directory unless overridden with \n\ 527 \t ALT_OUTPUTDIR=<dir>, changing from product to fastdebug you may want \n\ 528 \t to use the clean target first. \n\ 529- JDK_IMPORT_PATH must refer to a compatible build, not all past promoted \n\ 530 \t builds or previous release JDK builds will work. \n\ 531- The fastest builds have been when the sources and the BOOTDIR are on \n\ 532 \t local disk. \n\ 533" 534 535examples_help: 536 @$(ECHO) "\ 537--- Examples --- \n\ 538 $(MAKE) fastdebug_build \n\ 539 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 540 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar fastdebug_build \n\ 541 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 542 $(MAKE) ALT_BOOTDIR=/opt/java/jdk1.5.0 \n\ 543 $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk1.6.0 \n\ 544" 545 546################################################################ 547# Source and binary plug bundling 548################################################################ 549ifeq ($(BUNDLE_RULES_AVAILABLE), true) 550 include $(BUNDLE_RULES) 551endif 552 553################################################################ 554# JPRT rule to build 555################################################################ 556 557include ./make/jprt.gmk 558 559################################################################ 560# PHONY 561################################################################ 562 563.PHONY: all \ 564 generic_build_repo_series \ 565 what clobber insane \ 566 dev dev-build dev-sanity dev-clobber \ 567 product_build \ 568 fastdebug_build \ 569 debug_build \ 570 build_product_image \ 571 build_debug_image \ 572 build_fastdebug_image \ 573 create_fresh_product_bootdir \ 574 create_fresh_debug_bootdir \ 575 create_fresh_fastdebug_bootdir \ 576 generic_debug_build 577 578# Force target 579FRC: 580 581