Makefile revision 568:5cf7750c8c43
1188943Sthompsa# 2188943Sthompsa# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. 3188943Sthompsa# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4188943Sthompsa# 5188943Sthompsa# This code is free software; you can redistribute it and/or modify it 6188943Sthompsa# under the terms of the GNU General Public License version 2 only, as 7188943Sthompsa# published by the Free Software Foundation. Oracle designates this 8188943Sthompsa# particular file as subject to the "Classpath" exception as provided 9188943Sthompsa# by Oracle in the LICENSE file that accompanied this code. 10188943Sthompsa# 11188943Sthompsa# This code is distributed in the hope that it will be useful, but WITHOUT 12188943Sthompsa# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13188943Sthompsa# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14188943Sthompsa# version 2 for more details (a copy is included in the LICENSE file that 15188943Sthompsa# accompanied this code). 16188943Sthompsa# 17188943Sthompsa# You should have received a copy of the GNU General Public License version 18188943Sthompsa# 2 along with this work; if not, write to the Free Software Foundation, 19188943Sthompsa# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20188943Sthompsa# 21188943Sthompsa# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22188943Sthompsa# or visit www.oracle.com if you need additional information or have any 23188943Sthompsa# questions. 24188943Sthompsa# 25188943Sthompsa 26188943Sthompsa# If NEWBUILD is defined, use the new build-infra Makefiles and configure. 27188943Sthompsa# See NewMakefile.gmk for more information. 28319182Sngie 29269812Simp# If not specified, select what the default build is 30230972Srmhifndef NEWBUILD 31259123Shselasky NEWBUILD=true 32259123Shselaskyendif 33259123Shselasky 34259123Shselaskyifeq ($(NEWBUILD),true) 35259123Shselasky 36259123Shselasky # The new top level Makefile 37259123Shselasky include NewMakefile.gmk 38259123Shselasky 39259123Shselaskyelse # Original Makefile logic 40259123Shselasky 41259123ShselaskyBUILD_PARENT_DIRECTORY=. 42259123Shselasky 43230972Srmh# Basename of any originally supplied ALT_OUTPUTDIR directory 44230972Srmhifndef ORIG_OUTPUTDIR_BASENAME 45230972Srmh ifdef ALT_OUTPUTDIR 46188943Sthompsa ORIG_OUTPUTDIR_BASENAME := $(shell basename $(ALT_OUTPUTDIR)) 47253789Srpaulo else 48266832Shselasky ORIG_OUTPUTDIR_BASENAME = $(PLATFORM)-$(ARCH) 49253790Srpaulo endif 50324769Swulfendif 51198256Sthompsaexport ORIG_OUTPUTDIR_BASENAME 52222696Shselasky 53281645Shselasky# The three possible directories created for output (3 build flavors) 54258331SmarkjOUTPUTDIR_BASENAME- = $(ORIG_OUTPUTDIR_BASENAME) 55291557SkevloOUTPUTDIR_BASENAME-debug = $(ORIG_OUTPUTDIR_BASENAME)-debug 56188943SthompsaOUTPUTDIR_BASENAME-fastdebug = $(ORIG_OUTPUTDIR_BASENAME)-fastdebug 57188943Sthompsa 58253544Shselasky# Relative path to a debug output area 59188943SthompsaREL_JDK_OUTPUTDIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME)) 60253544Shselasky 61253544Shselasky# The created jdk image directory 62253544ShselaskyJDK_IMAGE_DIRNAME = j2sdk-image 63253544ShselaskyJDK_IMAGE_DIR = $(OUTPUTDIR)/$(JDK_IMAGE_DIRNAME) 64253544ShselaskyABS_JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME) 65253544Shselasky 66253544Shselasky# Relative path from an output directory to the image directory 67230972SrmhREL_JDK_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-$(DEBUG_NAME))/$(JDK_IMAGE_DIRNAME) 68230972SrmhREL_JDK_DEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-debug)/$(JDK_IMAGE_DIRNAME) 69230972SrmhREL_JDK_FASTDEBUG_IMAGE_DIR = ../$(OUTPUTDIR_BASENAME-fastdebug)/$(JDK_IMAGE_DIRNAME) 70230972Srmh 71230972Srmhifndef TOPDIR 72253790Srpaulo TOPDIR:=. 73253790Srpauloendif 74253790Srpaulo 75253790Srpauloifndef JDK_TOPDIR 76230972Srmh JDK_TOPDIR=$(TOPDIR)/jdk 77230972Srmhendif 78211690Simpifndef JDK_MAKE_SHARED_DIR 79193195Sweongyo JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared 80193195Sweongyoendif 81193195Sweongyo 82211690Simpdefault: all 83188943Sthompsa 84188943Sthompsainclude $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk 85232540Shselaskyinclude ./make/Defs-internal.gmk 86232540Shselaskyinclude ./make/sanity-rules.gmk 87232540Shselaskyinclude ./make/hotspot-rules.gmk 88188943Sthompsainclude ./make/langtools-rules.gmk 89188943Sthompsainclude ./make/corba-rules.gmk 90211690Simpinclude ./make/jaxp-rules.gmk 91193195Sweongyoinclude ./make/jaxws-rules.gmk 92193195Sweongyoinclude ./make/jdk-rules.gmk 93193195Sweongyoinclude ./make/install-rules.gmk 94228483Shselaskyinclude ./make/sponsors-rules.gmk 95228483Shselaskyinclude ./make/deploy-rules.gmk 96228483Shselasky 97228483Shselaskyall:: sanity 98266832Shselasky 99266832Shselaskyifeq ($(SKIP_FASTDEBUG_BUILD), false) 100266832Shselasky all:: fastdebug_build 101266832Shselaskyendif 102188943Sthompsa 103ifeq ($(SKIP_DEBUG_BUILD), false) 104 all:: debug_build 105endif 106 107all:: all_product_build 108 109all_product_build:: 110 111# Everything for a full product build 112ifeq ($(SKIP_PRODUCT_BUILD), false) 113 114 all_product_build:: product_build 115 116 ifeq ($(BUILD_INSTALL), true) 117 all_product_build:: $(INSTALL) 118 clobber:: install-clobber 119 endif 120 121 ifeq ($(BUILD_SPONSORS), true) 122 all_product_build:: $(SPONSORS) 123 clobber:: sponsors-clobber 124 endif 125 126 ifneq ($(SKIP_COMPARE_IMAGES), true) 127 all_product_build:: compare-image 128 endif 129 130endif 131 132define StartTimer 133 $(MKDIR) -p $(BUILDTIMESDIR) 134 $(RM) $(BUILDTIMESDIR)/build_time_* 135 $(call RecordStartTime,TOTAL) 136endef 137 138define StopTimer 139 $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) 140endef 141 142# Generic build of basic repo series 143generic_build_repo_series:: $(SOURCE_TIPS) 144 $(MKDIR) -p $(JDK_IMAGE_DIR) 145 @$(call StartTimer) 146 147ifeq ($(BUILD_LANGTOOLS), true) 148 generic_build_repo_series:: langtools 149 clobber:: langtools-clobber 150endif 151 152ifeq ($(BUILD_CORBA), true) 153 generic_build_repo_series:: corba 154 clobber:: corba-clobber 155endif 156 157ifeq ($(BUILD_JAXP), true) 158 generic_build_repo_series:: jaxp 159 clobber:: jaxp-clobber 160endif 161 162ifeq ($(BUILD_JAXWS), true) 163 generic_build_repo_series:: jaxws 164 clobber:: jaxws-clobber 165endif 166 167ifeq ($(BUILD_HOTSPOT), true) 168 generic_build_repo_series:: $(HOTSPOT) 169 clobber:: hotspot-clobber 170endif 171 172ifeq ($(BUILD_JDK), true) 173 generic_build_repo_series:: $(JDK_JAVA_EXE) 174 clobber:: jdk-clobber 175endif 176 177ifeq ($(BUILD_DEPLOY), true) 178 generic_build_repo_series:: $(DEPLOY) 179 clobber:: deploy-clobber 180endif 181 182generic_build_repo_series:: 183 @$(call StopTimer,$(if $(DEBUG_NAME),$(DEBUG_NAME)_build,all_product_build)) 184 185# The debug build, fastdebug or debug. Needs special handling. 186# Note that debug builds do NOT do INSTALL steps, but must be done 187# after the product build and before the INSTALL step of the product build. 188# 189# DEBUG_NAME is fastdebug or debug 190# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix 191# The resulting image directory (j2sdk-image) is used by the install makefiles 192# to create a debug install bundle jdk-*-debug-** bundle (tar or zip) 193# which will install in the debug or fastdebug subdirectory of the 194# normal product install area. 195# The install process needs to know what the DEBUG_NAME is, so 196# look for INSTALL_DEBUG_NAME in the install rules. 197# 198# NOTE: On windows, do not use $(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME). 199# Due to the use of short paths in $(ABS_OUTPUTDIR), this may 200# not be the same location. 201# 202 203# Location of fresh bootdir output 204ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk 205FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(JDK_IMAGE_DIRNAME) 206FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/$(REL_JDK_IMAGE_DIR) 207 208create_fresh_product_bootdir: FRC 209 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 210 GENERATE_DOCS=false \ 211 BOOT_CYCLE_SETTINGS= \ 212 build_product_image 213 214create_fresh_debug_bootdir: FRC 215 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 216 GENERATE_DOCS=false \ 217 BOOT_CYCLE_DEBUG_SETTINGS= \ 218 build_debug_image 219 220create_fresh_fastdebug_bootdir: FRC 221 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 222 GENERATE_DOCS=false \ 223 BOOT_CYCLE_DEBUG_SETTINGS= \ 224 build_fastdebug_image 225 226# Create boot image? 227ifeq ($(SKIP_BOOT_CYCLE),false) 228 ifneq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64) 229 DO_BOOT_CYCLE=true 230 endif 231endif 232 233 234 235ifeq ($(DO_BOOT_CYCLE),true) 236 237 # Create the bootdir to use in the build 238 product_build:: create_fresh_product_bootdir 239 debug_build:: create_fresh_debug_bootdir 240 fastdebug_build:: create_fresh_fastdebug_bootdir 241 242 # Define variables to be used now for the boot jdk 243 BOOT_CYCLE_SETTINGS= \ 244 ALT_BOOTDIR=$(FRESH_BOOTDIR) \ 245 ALT_JDK_IMPORT_PATH=$(FRESH_BOOTDIR) 246 BOOT_CYCLE_DEBUG_SETTINGS= \ 247 ALT_BOOTDIR=$(FRESH_DEBUG_BOOTDIR) \ 248 ALT_JDK_IMPORT_PATH=$(FRESH_DEBUG_BOOTDIR) 249 250else 251 252 # Use the supplied ALT_BOOTDIR as the boot 253 BOOT_CYCLE_SETTINGS= 254 BOOT_CYCLE_DEBUG_SETTINGS= 255 256endif 257 258build_product_image: 259 $(MAKE) \ 260 SKIP_FASTDEBUG_BUILD=true \ 261 SKIP_DEBUG_BUILD=true \ 262 $(BOOT_CYCLE_SETTINGS) \ 263 generic_build_repo_series 264 265# NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME). 266# Due to the use of short paths in $(ABS_OUTPUTDIR), this may 267# not be the same location. 268 269generic_debug_build: 270 $(MAKE) \ 271 ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/$(REL_JDK_OUTPUTDIR) \ 272 DEBUG_NAME=$(DEBUG_NAME) \ 273 GENERATE_DOCS=false \ 274 $(BOOT_CYCLE_DEBUG_SETTINGS) \ 275 generic_build_repo_series 276 277build_debug_image: 278 $(MAKE) DEBUG_NAME=debug generic_debug_build 279 280build_fastdebug_image: 281 $(MAKE) DEBUG_NAME=fastdebug generic_debug_build 282 283# Build final image 284product_build:: build_product_image 285debug_build:: build_debug_image 286fastdebug_build:: build_fastdebug_image 287 288# The source tips are stored with the relative path to the repo. 289# This file will be used when constructing the jdk image. 290source_tips: $(SOURCE_TIPS) 291 $(CAT) $< 292$(SOURCE_TIPS): FRC 293 @$(prep-target) 294 @$(call GetSourceTips) 295 296clobber:: REPORT_BUILD_TIMES= 297clobber:: 298 $(RM) -r $(OUTPUTDIR)/* 299 -($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE)) 300 301clean: clobber 302 303# 304# Dev builds 305# 306 307dev : dev-build 308 309dev-build: 310 $(MAKE) DEV_ONLY=true all 311dev-sanity: 312 $(MAKE) DEV_ONLY=true sanity 313dev-clobber: 314 $(MAKE) DEV_ONLY=true clobber 315 316# 317# Quick jdk verification build 318# 319jdk_only: 320 $(MAKE) SKIP_FASTDEBUG_BUILD=true BUILD_HOTSPOT=false all 321 322 323# 324# Quick jdk verification fastdebug build 325# 326jdk_fastdebug_only: 327 $(MAKE) DEBUG_NAME=fastdebug BUILD_HOTSPOT=false BUILD_DEPLOY=false \ 328 BUILD_INSTALL=false BUILD_SPONSORS=false generic_debug_build 329 330# 331# Quick deploy verification fastdebug build 332# 333deploy_fastdebug_only: 334 $(MAKE) \ 335 DEBUG_NAME=fastdebug \ 336 BUILD_HOTSPOT=false \ 337 BUILD_JDK=false \ 338 BUILD_LANGTOOLS=false \ 339 BUILD_CORBA=false \ 340 BUILD_JAXP=false \ 341 BUILD_JAXWS=false \ 342 BUILD_INSTALL=false \ 343 BUILD_SPONSORS=false \ 344 generic_debug_build 345 346# 347# Product build (skip debug builds) 348# 349product_only: 350 $(MAKE) SKIP_FASTDEBUG_BUILD=true all 351 352# 353# Check target 354# 355 356check: variable_check 357 358# 359# Help target 360# 361help: intro_help target_help variable_help notes_help examples_help 362 363# Intro help message 364intro_help: 365 @$(ECHO) "\ 366Makefile for the JDK builds (all the JDK). \n\ 367" 368 369# Target help 370target_help: 371 @$(ECHO) "\ 372--- Common Targets --- \n\ 373all -- build the core JDK (default target) \n\ 374help -- Print out help information \n\ 375check -- Check make variable values for correctness \n\ 376sanity -- Perform detailed sanity checks on system and settings \n\ 377fastdebug_build -- build the core JDK in 'fastdebug' mode (-g -O) \n\ 378debug_build -- build the core JDK in 'debug' mode (-g) \n\ 379clean -- remove all built and imported files \n\ 380clobber -- same as clean \n\ 381" 382 383# Variable help (only common ones used by this Makefile) 384variable_help: variable_help_intro variable_list variable_help_end 385variable_help_intro: 386 @$(ECHO) "--- Common Variables ---" 387variable_help_end: 388 @$(ECHO) " " 389 390# One line descriptions for the variables 391OUTPUTDIR.desc = Output directory 392PARALLEL_COMPILE_JOBS.desc = Solaris/Linux parallel compile run count 393SLASH_JAVA.desc = Root of all build tools, e.g. /java or J: 394BOOTDIR.desc = JDK used to boot the build 395JDK_IMPORT_PATH.desc = JDK used to import components of the build 396COMPILER_PATH.desc = Compiler install directory 397CACERTS_FILE.desc = Location of certificates file 398DEVTOOLS_PATH.desc = Directory containing zip and gnumake 399CUPS_HEADERS_PATH.desc = Include directory location for CUPS header files 400DXSDK_PATH.desc = Root directory of DirectX SDK 401 402# Make variables to print out (description and value) 403VARIABLE_PRINTVAL_LIST += \ 404 OUTPUTDIR \ 405 PARALLEL_COMPILE_JOBS \ 406 SLASH_JAVA \ 407 BOOTDIR \ 408 JDK_IMPORT_PATH \ 409 COMPILER_PATH \ 410 CACERTS_FILE \ 411 DEVTOOLS_PATH 412 413# Make variables that should refer to directories that exist 414VARIABLE_CHECKDIR_LIST += \ 415 SLASH_JAVA \ 416 BOOTDIR \ 417 JDK_IMPORT_PATH \ 418 COMPILER_PATH \ 419 DEVTOOLS_PATH 420 421# Make variables that should refer to files that exist 422VARIABLE_CHECKFIL_LIST += \ 423 CACERTS_FILE 424 425# Some are windows specific 426ifeq ($(PLATFORM), windows) 427 428VARIABLE_PRINTVAL_LIST += \ 429 DXSDK_PATH 430 431VARIABLE_CHECKDIR_LIST += \ 432 DXSDK_PATH 433 434endif 435 436# For pattern rules below, so all are treated the same 437DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval) 438DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir) 439DO_CHECKFIL_LIST=$(VARIABLE_CHECKFIL_LIST:%=%.checkfil) 440 441# Complete variable check 442variable_check: $(DO_CHECKDIR_LIST) $(DO_CHECKFIL_LIST) 443variable_list: $(DO_PRINTVAL_LIST) variable_check 444 445# Pattern rule for printing out a variable 446%.printval: 447 @$(ECHO) " ALT_$* - $($*.desc)" 448 @$(ECHO) " \t $*=$($*)" 449 450# Pattern rule for checking to see if a variable with a directory exists 451%.checkdir: 452 @if [ ! -d $($*) ] ; then \ 453 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 454 fi 455 456# Pattern rule for checking to see if a variable with a file exists 457%.checkfil: 458 @if [ ! -f $($*) ] ; then \ 459 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 460 fi 461 462# Misc notes on help 463notes_help: 464 @$(ECHO) "\ 465--- Notes --- \n\ 466- All builds use same output directory unless overridden with \n\ 467 \t ALT_OUTPUTDIR=<dir>, changing from product to fastdebug you may want \n\ 468 \t to use the clean target first. \n\ 469- JDK_IMPORT_PATH must refer to a compatible build, not all past promoted \n\ 470 \t builds or previous release JDK builds will work. \n\ 471- The fastest builds have been when the sources and the BOOTDIR are on \n\ 472 \t local disk. \n\ 473" 474 475examples_help: 476 @$(ECHO) "\ 477--- Examples --- \n\ 478 $(MAKE) fastdebug_build \n\ 479 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 480 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar fastdebug_build \n\ 481 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 482 $(MAKE) ALT_BOOTDIR=/opt/java/jdk1.5.0 \n\ 483 $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk1.6.0 \n\ 484" 485 486################################################################ 487# Source bundling 488################################################################ 489ifeq ($(BUNDLE_RULES_AVAILABLE), true) 490 include $(BUNDLE_RULES) 491endif 492 493################################################################ 494# rule to test 495################################################################ 496 497.NOTPARALLEL: test_run 498 499test: 500 $(MAKE) test_run 501 502test_run: test_clean test_start test_summary 503 504test_start: 505 @$(ECHO) "Tests started at `$(DATE)`" 506 507test_clean: 508 $(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt 509 510test_summary: $(OUTPUTDIR)/test_failures.txt 511 @$(ECHO) "#################################################" 512 @$(ECHO) "Tests completed at `$(DATE)`" 513 @( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \ 514 || $(ECHO) "No TEST STATS seen in log" ) 515 @$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt" 516 @$(ECHO) "#################################################" 517 @if [ -s $< ] ; then \ 518 $(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \ 519 $(CAT) $<; \ 520 exit 1; \ 521 else \ 522 $(ECHO) "Success! No failures detected"; \ 523 fi 524 525# Get failure list from log 526$(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt 527 @$(RM) $@ 528 @( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@ 529 530# Get log file of all tests run 531JDK_TO_TEST := $(shell \ 532 if [ -d "$(ABS_JDK_IMAGE_DIR)" ] ; then \ 533 $(ECHO) "$(ABS_JDK_IMAGE_DIR)"; \ 534 elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \ 535 $(ECHO) "$(ABS_OUTPUTDIR)"; \ 536 elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \ 537 $(ECHO) "$(PRODUCT_HOME)"; \ 538 fi \ 539) 540TEST_TARGETS=all 541$(OUTPUTDIR)/test_log.txt: 542 $(RM) $@ 543 ( $(CD) test && \ 544 $(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \ 545 ) | tee $@ 546 547################################################################ 548# JPRT rule to build 549################################################################ 550 551include ./make/jprt.gmk 552 553################################################################ 554# PHONY 555################################################################ 556 557.PHONY: all test test_run test_start test_summary test_clean \ 558 generic_build_repo_series \ 559 what clobber insane \ 560 dev dev-build dev-sanity dev-clobber \ 561 product_build \ 562 fastdebug_build \ 563 debug_build \ 564 build_product_image \ 565 build_debug_image \ 566 build_fastdebug_image \ 567 create_fresh_product_bootdir \ 568 create_fresh_debug_bootdir \ 569 create_fresh_fastdebug_bootdir \ 570 generic_debug_build 571 572# Force target 573FRC: 574 575endif # Original Makefile logic 576 577