1 # 2 # Copyright (c) 1995, 2011, 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 BUILD_PARENT_DIRECTORY=. 27 28 ifndef TOPDIR 29 TOPDIR:=. 30 endif 31 32 ifndef JDK_TOPDIR 33 JDK_TOPDIR=$(TOPDIR)/jdk 34 endif 35 ifndef JDK_MAKE_SHARED_DIR 36 JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared 37 endif 38 39 default: all 40 41 include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk 42 include ./make/Defs-internal.gmk 43 include ./make/sanity-rules.gmk 44 include ./make/hotspot-rules.gmk 45 include ./make/langtools-rules.gmk 46 include ./make/corba-rules.gmk 47 include ./make/jaxp-rules.gmk 48 include ./make/jaxws-rules.gmk 49 include ./make/jdk-rules.gmk 50 include ./make/install-rules.gmk 51 include ./make/sponsors-rules.gmk 52 include ./make/deploy-rules.gmk 53 54 all:: sanity 55 56 ifeq ($(SKIP_FASTDEBUG_BUILD), false) 57 all:: fastdebug_build 58 endif 59 60 ifeq ($(SKIP_DEBUG_BUILD), false) 61 all:: debug_build 62 endif 63 64 all:: all_product_build 65 66 all_product_build:: 67 68 # Everything for a full product build 69 ifeq ($(SKIP_PRODUCT_BUILD), false) 70 71 all_product_build:: product_build 72 73 ifeq ($(BUILD_INSTALL), true) 74 all_product_build:: $(INSTALL) 75 clobber:: install-clobber 76 endif 77 78 ifeq ($(BUILD_SPONSORS), true) 79 all_product_build:: $(SPONSORS) 80 clobber:: sponsors-clobber 81 endif 82 83 ifneq ($(SKIP_COMPARE_IMAGES), true) 84 all_product_build:: compare-image 85 endif 86 87 endif 88 89 define StartTimer 90 $(MKDIR) -p $(BUILDTIMESDIR) 91 $(RM) $(BUILDTIMESDIR)/build_time_* 92 $(call RecordStartTime,TOTAL) 93 endef 94 95 define StopTimer 96 $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) 97 endef 98 99 # Generic build of basic repo series 100 generic_build_repo_series:: 101 $(MKDIR) -p $(OUTPUTDIR) 102 $(MKDIR) -p $(OUTPUTDIR)/j2sdk-image 103 @$(call StartTimer) 104 105 ifeq ($(BUILD_LANGTOOLS), true) 106 generic_build_repo_series:: langtools 107 clobber:: langtools-clobber 108 endif 109 110 ifeq ($(BUILD_CORBA), true) 111 generic_build_repo_series:: corba 112 clobber:: corba-clobber 113 endif 114 115 ifeq ($(BUILD_JAXP), true) 116 generic_build_repo_series:: jaxp 117 clobber:: jaxp-clobber 118 endif 119 120 ifeq ($(BUILD_JAXWS), true) 121 generic_build_repo_series:: jaxws 122 clobber:: jaxws-clobber 123 endif 124 125 ifeq ($(BUILD_HOTSPOT), true) 126 generic_build_repo_series:: $(HOTSPOT) 127 clobber:: hotspot-clobber 128 endif 129 130 ifeq ($(BUILD_JDK), true) 131 generic_build_repo_series:: $(JDK_JAVA_EXE) 132 clobber:: jdk-clobber 133 endif 134 135 ifeq ($(BUILD_DEPLOY), true) 136 generic_build_repo_series:: $(DEPLOY) 137 clobber:: deploy-clobber 138 endif 139 140 generic_build_repo_series:: 141 @$(call StopTimer,$(if $(DEBUG_NAME),$(DEBUG_NAME)_build,all_product_build)) 142 143 # The debug build, fastdebug or debug. Needs special handling. 144 # Note that debug builds do NOT do INSTALL steps, but must be done 145 # after the product build and before the INSTALL step of the product build. 146 # 147 # DEBUG_NAME is fastdebug or debug 148 # ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix 149 # The resulting j2sdk-image is used by the install makefiles to create a 150 # debug install bundle jdk-*-debug-** bundle (tar or zip) 151 # which will install in the debug or fastdebug subdirectory of the 152 # normal product install area. 153 # The install process needs to know what the DEBUG_NAME is, so 154 # look for INSTALL_DEBUG_NAME in the install rules. 155 # 156 # NOTE: On windows, do not use $(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME). 157 # Due to the use of short paths in $(ABS_OUTPUTDIR), this may 158 # not be the same location. 159 # 160 161 # Location of fresh bootdir output 162 ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk 163 FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image 164 FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME)/j2sdk-image 165 166 create_fresh_product_bootdir: FRC 167 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 168 GENERATE_DOCS=false \ 169 BOOT_CYCLE_SETTINGS= \ 170 build_product_image 171 172 create_fresh_debug_bootdir: FRC 173 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 174 GENERATE_DOCS=false \ 175 BOOT_CYCLE_DEBUG_SETTINGS= \ 176 build_debug_image 177 178 create_fresh_fastdebug_bootdir: FRC 179 $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ 180 GENERATE_DOCS=false \ 181 BOOT_CYCLE_DEBUG_SETTINGS= \ 182 build_fastdebug_image 183 184 # Create boot image? 185 ifeq ($(SKIP_BOOT_CYCLE),false) 186 ifneq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64) 187 DO_BOOT_CYCLE=true 188 endif 189 endif 190 191 192 193 ifeq ($(DO_BOOT_CYCLE),true) 194 195 # Create the bootdir to use in the build 196 product_build:: create_fresh_product_bootdir 197 debug_build:: create_fresh_debug_bootdir 198 fastdebug_build:: create_fresh_fastdebug_bootdir 199 200 # Define variables to be used now for the boot jdk 201 BOOT_CYCLE_SETTINGS= \ 202 ALT_BOOTDIR=$(FRESH_BOOTDIR) \ 203 ALT_JDK_IMPORT_PATH=$(FRESH_BOOTDIR) 204 BOOT_CYCLE_DEBUG_SETTINGS= \ 205 ALT_BOOTDIR=$(FRESH_DEBUG_BOOTDIR) \ 206 ALT_JDK_IMPORT_PATH=$(FRESH_DEBUG_BOOTDIR) 207 208 else 209 210 # Use the supplied ALT_BOOTDIR as the boot 211 BOOT_CYCLE_SETTINGS= 212 BOOT_CYCLE_DEBUG_SETTINGS= 213 214 endif 215 216 build_product_image: 217 $(MAKE) \ 218 SKIP_FASTDEBUG_BUILD=true \ 219 SKIP_DEBUG_BUILD=true \ 220 $(BOOT_CYCLE_SETTINGS) \ 221 generic_build_repo_series 222 223 # NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME). 224 # Due to the use of short paths in $(ABS_OUTPUTDIR), this may 225 # not be the same location. 226 227 generic_debug_build: 228 $(MAKE) \ 229 ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME) \ 230 DEBUG_NAME=$(DEBUG_NAME) \ 231 GENERATE_DOCS=false \ 232 $(BOOT_CYCLE_DEBUG_SETTINGS) \ 233 generic_build_repo_series 234 235 build_debug_image: 236 $(MAKE) DEBUG_NAME=debug generic_debug_build 237 238 build_fastdebug_image: 239 $(MAKE) DEBUG_NAME=fastdebug generic_debug_build 240 241 # Build final image 242 product_build:: build_product_image 243 debug_build:: build_debug_image 244 fastdebug_build:: build_fastdebug_image 245 246 clobber:: REPORT_BUILD_TIMES= 247 clobber:: 248 $(RM) -r $(OUTPUTDIR)/* 249 $(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-debug/* 250 $(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-fastdebug/* 251 -($(RMDIR) -p $(OUTPUTDIR) > $(DEV_NULL) 2>&1; $(TRUE)) 252 253 clean: clobber 254 255 # 256 # Dev builds 257 # 258 259 dev : dev-build 260 261 dev-build: 262 $(MAKE) DEV_ONLY=true all 263 dev-sanity: 264 $(MAKE) DEV_ONLY=true sanity 265 dev-clobber: 266 $(MAKE) DEV_ONLY=true clobber 267 268 # 269 # Quick jdk verification build 270 # 271 jdk_only: 272 $(MAKE) SKIP_FASTDEBUG_BUILD=true BUILD_HOTSPOT=false all 273 274 275 # 276 # Quick jdk verification fastdebug build 277 # 278 jdk_fastdebug_only: 279 $(MAKE) DEBUG_NAME=fastdebug BUILD_HOTSPOT=false BUILD_DEPLOY=false \ 280 BUILD_INSTALL=false BUILD_SPONSORS=false generic_debug_build 281 282 # 283 # Quick deploy verification fastdebug build 284 # 285 deploy_fastdebug_only: 286 $(MAKE) \ 287 DEBUG_NAME=fastdebug \ 288 BUILD_HOTSPOT=false \ 289 BUILD_JDK=false \ 290 BUILD_LANGTOOLS=false \ 291 BUILD_CORBA=false \ 292 BUILD_JAXP=false \ 293 BUILD_JAXWS=false \ 294 BUILD_INSTALL=false \ 295 BUILD_SPONSORS=false \ 296 generic_debug_build 297 298 # 299 # Product build (skip debug builds) 300 # 301 product_only: 302 $(MAKE) SKIP_FASTDEBUG_BUILD=true all 303 304 # 305 # Check target 306 # 307 308 check: variable_check 309 310 # 311 # Help target 312 # 313 help: intro_help target_help variable_help notes_help examples_help 314 315 # Intro help message 316 intro_help: 317 @$(ECHO) "\ 318 Makefile for the JDK builds (all the JDK). \n\ 319 " 320 321 # Target help 322 target_help: 323 @$(ECHO) "\ 324 --- Common Targets --- \n\ 325 all -- build the core JDK (default target) \n\ 326 help -- Print out help information \n\ 327 check -- Check make variable values for correctness \n\ 328 sanity -- Perform detailed sanity checks on system and settings \n\ 329 fastdebug_build -- build the core JDK in 'fastdebug' mode (-g -O) \n\ 330 debug_build -- build the core JDK in 'debug' mode (-g) \n\ 331 clean -- remove all built and imported files \n\ 332 clobber -- same as clean \n\ 333 " 334 335 # Variable help (only common ones used by this Makefile) 336 variable_help: variable_help_intro variable_list variable_help_end 337 variable_help_intro: 338 @$(ECHO) "--- Common Variables ---" 339 variable_help_end: 340 @$(ECHO) " " 341 342 # One line descriptions for the variables 343 OUTPUTDIR.desc = Output directory 344 PARALLEL_COMPILE_JOBS.desc = Solaris/Linux parallel compile run count 345 SLASH_JAVA.desc = Root of all build tools, e.g. /java or J: 346 BOOTDIR.desc = JDK used to boot the build 347 JDK_IMPORT_PATH.desc = JDK used to import components of the build 348 COMPILER_PATH.desc = Compiler install directory 349 CACERTS_FILE.desc = Location of certificates file 350 DEVTOOLS_PATH.desc = Directory containing zip and gnumake 351 CUPS_HEADERS_PATH.desc = Include directory location for CUPS header files 352 DXSDK_PATH.desc = Root directory of DirectX SDK 353 354 # Make variables to print out (description and value) 355 VARIABLE_PRINTVAL_LIST += \ 356 OUTPUTDIR \ 357 PARALLEL_COMPILE_JOBS \ 358 SLASH_JAVA \ 359 BOOTDIR \ 360 JDK_IMPORT_PATH \ 361 COMPILER_PATH \ 362 CACERTS_FILE \ 363 DEVTOOLS_PATH 364 365 # Make variables that should refer to directories that exist 366 VARIABLE_CHECKDIR_LIST += \ 367 SLASH_JAVA \ 368 BOOTDIR \ 369 JDK_IMPORT_PATH \ 370 COMPILER_PATH \ 371 DEVTOOLS_PATH 372 373 # Make variables that should refer to files that exist 374 VARIABLE_CHECKFIL_LIST += \ 375 CACERTS_FILE 376 377 # Some are windows specific 378 ifeq ($(PLATFORM), windows) 379 380 VARIABLE_PRINTVAL_LIST += \ 381 DXSDK_PATH 382 383 VARIABLE_CHECKDIR_LIST += \ 384 DXSDK_PATH 385 386 endif 387 388 # For pattern rules below, so all are treated the same 389 DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval) 390 DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir) 391 DO_CHECKFIL_LIST=$(VARIABLE_CHECKFIL_LIST:%=%.checkfil) 392 393 # Complete variable check 394 variable_check: $(DO_CHECKDIR_LIST) $(DO_CHECKFIL_LIST) 395 variable_list: $(DO_PRINTVAL_LIST) variable_check 396 397 # Pattern rule for printing out a variable 398 %.printval: 399 @$(ECHO) " ALT_$* - $($*.desc)" 400 @$(ECHO) " \t $*=$($*)" 401 402 # Pattern rule for checking to see if a variable with a directory exists 403 %.checkdir: 404 @if [ ! -d $($*) ] ; then \ 405 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 406 fi 407 408 # Pattern rule for checking to see if a variable with a file exists 409 %.checkfil: 410 @if [ ! -f $($*) ] ; then \ 411 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 412 fi 413 414 # Misc notes on help 415 notes_help: 416 @$(ECHO) "\ 417 --- Notes --- \n\ 418 - All builds use same output directory unless overridden with \n\ 419 \t ALT_OUTPUTDIR=<dir>, changing from product to fastdebug you may want \n\ 420 \t to use the clean target first. \n\ 421 - JDK_IMPORT_PATH must refer to a compatible build, not all past promoted \n\ 422 \t builds or previous release JDK builds will work. \n\ 423 - The fastest builds have been when the sources and the BOOTDIR are on \n\ 424 \t local disk. \n\ 425 " 426 427 examples_help: 428 @$(ECHO) "\ 429 --- Examples --- \n\ 430 $(MAKE) fastdebug_build \n\ 431 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 432 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar fastdebug_build \n\ 433 $(MAKE) ALT_OUTPUTDIR=/tmp/foobar all \n\ 434 $(MAKE) ALT_BOOTDIR=/opt/java/jdk1.5.0 \n\ 435 $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk1.6.0 \n\ 436 " 437 438 ################################################################ 439 # Source bundling 440 ################################################################ 441 ifeq ($(BUNDLE_RULES_AVAILABLE), true) 442 include $(BUNDLE_RULES) 443 endif 444 445 ################################################################ 446 # rule to test 447 ################################################################ 448 449 .NOTPARALLEL: test_run 450 451 test: 452 $(MAKE) test_run 453 454 test_run: test_clean test_start test_summary 455 456 test_start: 457 @$(ECHO) "Tests started at `$(DATE)`" 458 459 test_clean: 460 $(RM) $(OUTPUTDIR)/test_failures.txt $(OUTPUTDIR)/test_log.txt 461 462 test_summary: $(OUTPUTDIR)/test_failures.txt 463 @$(ECHO) "#################################################" 464 @$(ECHO) "Tests completed at `$(DATE)`" 465 @( $(EGREP) '^TEST STATS:' $(OUTPUTDIR)/test_log.txt \ 466 || $(ECHO) "No TEST STATS seen in log" ) 467 @$(ECHO) "For complete details see: $(OUTPUTDIR)/test_log.txt" 468 @$(ECHO) "#################################################" 469 @if [ -s $< ] ; then \ 470 $(ECHO) "ERROR: Test failure count: `$(CAT) $< | $(WC) -l`"; \ 471 $(CAT) $<; \ 472 exit 1; \ 473 else \ 474 $(ECHO) "Success! No failures detected"; \ 475 fi 476 477 # Get failure list from log 478 $(OUTPUTDIR)/test_failures.txt: $(OUTPUTDIR)/test_log.txt 479 @$(RM) $@ 480 @( $(EGREP) '^FAILED:' $< || $(ECHO) "" ) | $(NAWK) 'length>0' > $@ 481 482 # Get log file of all tests run 483 JDK_TO_TEST := $(shell \ 484 if [ -d "$(ABS_OUTPUTDIR)/j2sdk-image" ] ; then \ 485 $(ECHO) "$(ABS_OUTPUTDIR)/j2sdk-image"; \ 486 elif [ -d "$(ABS_OUTPUTDIR)/bin" ] ; then \ 487 $(ECHO) "$(ABS_OUTPUTDIR)"; \ 488 elif [ "$(PRODUCT_HOME)" != "" -a -d "$(PRODUCT_HOME)/bin" ] ; then \ 489 $(ECHO) "$(PRODUCT_HOME)"; \ 490 fi \ 491 ) 492 TEST_TARGETS=all 493 $(OUTPUTDIR)/test_log.txt: 494 $(RM) $@ 495 ( $(CD) test && \ 496 $(MAKE) NO_STOPPING=- PRODUCT_HOME=$(JDK_TO_TEST) $(TEST_TARGETS) \ 497 ) | tee $@ 498 499 ################################################################ 500 # JPRT rule to build 501 ################################################################ 502 503 include ./make/jprt.gmk 504 505 ################################################################ 506 # PHONY 507 ################################################################ 508 509 .PHONY: all test test_run test_start test_summary test_clean \ 510 generic_build_repo_series \ 511 what clobber insane \ 512 dev dev-build dev-sanity dev-clobber \ 513 product_build \ 514 fastdebug_build \ 515 debug_build \ 516 build_product_image \ 517 build_debug_image \ 518 build_fastdebug_image \ 519 create_fresh_product_bootdir \ 520 create_fresh_debug_bootdir \ 521 create_fresh_fastdebug_bootdir \ 522 generic_debug_build 523 524 # Force target 525 FRC: 526