1 # 2 # Copyright 2005-2010 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. 8 # 9 # This code is distributed in the hope that it will be useful, but WITHOUT 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 # version 2 for more details (a copy is included in the LICENSE file that 13 # accompanied this code). 14 # 15 # You should have received a copy of the GNU General Public License version 16 # 2 along with this work; if not, write to the Free Software Foundation, 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 # 19 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 20 # CA 95054 USA or visit www.sun.com if you need additional information or 21 # have any questions. 22 # 23 # 24 25 # Top level gnumake file for hotspot builds 26 # 27 # Default is to build the both product images and construct an export dir. 28 # The default export directory name is `pwd`/export-$(PLATFORM). 29 # 30 # Use: 'gnumake help' for more information. 31 # 32 # This makefile uses the default settings for where to find compilers and 33 # tools, and obeys the ALT_* variable settings used by the other JDK 34 # workspaces. 35 # 36 37 # Expected/optional make variables defined on make command line: 38 # LP64=1 or ARCH_DATA_MODEL=64 for 64bit build 39 # 40 # Expected/optional make variables or environment variables: 41 # ALT_SLASH_JAVA Location of /java or J: 42 # ALT_BOOTDIR Previous JDK home directory for javac compiler 43 # ALT_OUTPUTDIR Output directory to use for hotspot build 44 # ALT_EXPORT_PATH Directory to export hotspot build to 45 # ALT_JDK_IMPORT_PATH Current JDK build (only for create_jdk rules) 46 # ALT_BUILD_WIN_SA Building SA on Windows is disabled by default. 47 # Set ALT_BUILD_WIN_SA=1 to enable building SA on 48 # Windows. 49 # Version strings and numbers: 50 # JDK_VERSION Current JDK version (e.g. 1.6.0) 51 # PREVIOUS_JDK_VERSION Previous (bootdir) JDK version (e.g. 1.5.0) 52 # FULL_VERSION Full version string to use (e.g. "1.6.0-ea-b42") 53 # 54 # Version strings and numbers especially needed on Windows: 55 # COOKED_JDK_UPDATE_VERSION Just the update release number (e.g. 02) 56 # COOKED_BUILD_NUMBER Just the build number (e.g. 42) 57 # JDK_MKTG_VERSION Marketing JDK version (e.g. 6.0) 58 # JDK_MAJOR_VERSION Major number for version (e.g. 1) always 1? 59 # JDK_MINOR_VERSION Minor number for version (e.g. 6) 60 # JDK_MICRO_VERSION Micro number for version (e.g. 0) 61 # 62 63 # Default is build both product fastdebug and create export area 64 65 # Allow to build HotSpot in local directory from sources specified by GAMMADIR. 66 # After make/defs.make GAMMADIR is defined. 67 ifdef GAMMADIR 68 ifndef ALT_OUTPUTDIR 69 ALT_OUTPUTDIR := $(shell pwd) 70 endif 71 include $(GAMMADIR)/make/defs.make 72 else 73 include defs.make 74 endif 75 76 77 ifneq ($(ALT_OUTPUTDIR),) 78 ALT_OUT=ALT_OUTPUTDIR=$(ALT_OUTPUTDIR) 79 else 80 ALT_OUT= 81 endif 82 83 # Typical C1/C2 targets made available with this Makefile 84 C1_VM_TARGETS=product1 fastdebug1 optimized1 jvmg1 85 C2_VM_TARGETS=product fastdebug optimized jvmg 86 KERNEL_VM_TARGETS=productkernel fastdebugkernel optimizedkernel jvmgkernel 87 88 # JDK directory list 89 JDK_DIRS=bin include jre lib demo 90 91 all: all_product all_fastdebug 92 all_product: product product1 productkernel docs export_product 93 all_fastdebug: fastdebug fastdebug1 fastdebugkernel docs export_fastdebug 94 all_debug: jvmg jvmg1 jvmgkernel docs export_debug 95 all_optimized: optimized optimized1 optimizedkernel docs export_optimized 96 97 # Do everything 98 world: all create_jdk 99 100 # Build or export docs 101 docs: 102 ifeq ($(OSNAME),windows) 103 @$(ECHO) "No docs ($(VM_TARGET)) for windows" 104 else 105 $(CD) $(OUTPUTDIR); \ 106 $(MAKE) -f $(ABS_OS_MAKEFILE) \ 107 $(MAKE_ARGS) docs 108 endif 109 110 # Build variation of hotspot 111 $(C1_VM_TARGETS): 112 $(CD) $(GAMMADIR)/make; \ 113 $(MAKE) VM_TARGET=$@ generic_build1 $(ALT_OUT) 114 115 $(C2_VM_TARGETS): 116 $(CD) $(GAMMADIR)/make; \ 117 $(MAKE) VM_TARGET=$@ generic_build2 $(ALT_OUT) 118 119 $(KERNEL_VM_TARGETS): 120 $(CD) $(GAMMADIR)/make; \ 121 $(MAKE) VM_TARGET=$@ generic_buildkernel $(ALT_OUT) 122 123 # Build compiler1 (client) rule, different for platforms 124 generic_build1: 125 $(MKDIR) -p $(OUTPUTDIR) 126 ifeq ($(OSNAME),windows) 127 ifeq ($(ARCH_DATA_MODEL), 32) 128 $(CD) $(OUTPUTDIR); \ 129 $(NMAKE) -f $(ABS_OS_MAKEFILE) \ 130 Variant=compiler1 \ 131 WorkSpace=$(ABS_GAMMADIR) \ 132 BootStrapDir=$(ABS_BOOTDIR) \ 133 BuildUser=$(USERNAME) \ 134 $(MAKE_ARGS) $(VM_TARGET:%1=%) 135 else 136 @$(ECHO) "No compiler1 ($(VM_TARGET)) for ARCH_DATA_MODEL=$(ARCH_DATA_MODEL)" 137 endif 138 else 139 ifeq ($(ARCH_DATA_MODEL), 32) 140 $(CD) $(OUTPUTDIR); \ 141 $(MAKE) -f $(ABS_OS_MAKEFILE) \ 142 $(MAKE_ARGS) $(VM_TARGET) 143 else 144 @$(ECHO) "No compiler1 ($(VM_TARGET)) for ARCH_DATA_MODEL=$(ARCH_DATA_MODEL)" 145 endif 146 endif 147 148 # Build compiler2 (server) rule, different for platforms 149 generic_build2: 150 $(MKDIR) -p $(OUTPUTDIR) 151 ifeq ($(OSNAME),windows) 152 $(CD) $(OUTPUTDIR); \ 153 $(NMAKE) -f $(ABS_OS_MAKEFILE) \ 154 Variant=compiler2 \ 155 WorkSpace=$(ABS_GAMMADIR) \ 156 BootStrapDir=$(ABS_BOOTDIR) \ 157 BuildUser=$(USERNAME) \ 158 $(MAKE_ARGS) $(VM_TARGET) 159 else 160 $(CD) $(OUTPUTDIR); \ 161 $(MAKE) -f $(ABS_OS_MAKEFILE) \ 162 $(MAKE_ARGS) $(VM_TARGET) 163 endif 164 165 generic_buildkernel: 166 $(MKDIR) -p $(OUTPUTDIR) 167 ifeq ($(OSNAME),windows) 168 ifeq ($(ARCH_DATA_MODEL), 32) 169 $(CD) $(OUTPUTDIR); \ 170 $(NMAKE) -f $(ABS_OS_MAKEFILE) \ 171 Variant=kernel \ 172 WorkSpace=$(ABS_GAMMADIR) \ 173 BootStrapDir=$(ABS_BOOTDIR) \ 174 BuildUser=$(USERNAME) \ 175 $(MAKE_ARGS) $(VM_TARGET:%kernel=%) 176 else 177 @$(ECHO) "No kernel ($(VM_TARGET)) for ARCH_DATA_MODEL=$(ARCH_DATA_MODEL)" 178 endif 179 else 180 @$(ECHO) "No kernel ($(VM_TARGET)) for OS_NAME=$(OSNAME)" 181 endif 182 183 # Export file rule 184 generic_export: $(EXPORT_LIST) 185 export_product: 186 $(MAKE) VM_SUBDIR=product generic_export 187 export_fastdebug: 188 $(MAKE) VM_SUBDIR=fastdebug EXPORT_SUBDIR=/fastdebug generic_export 189 export_debug: 190 $(MAKE) VM_SUBDIR=${VM_DEBUG} EXPORT_SUBDIR=/debug generic_export 191 export_optimized: 192 $(MAKE) VM_SUBDIR=optimized EXPORT_SUBDIR=/optimized generic_export 193 export_product_jdk: 194 $(MAKE) ALT_EXPORT_PATH=$(JDK_IMAGE_DIR) \ 195 VM_SUBDIR=product generic_export 196 export_optimized_jdk: 197 $(MAKE) ALT_EXPORT_PATH=$(JDK_IMAGE_DIR) \ 198 VM_SUBDIR=optimized generic_export 199 export_fastdebug_jdk: 200 $(MAKE) ALT_EXPORT_PATH=$(JDK_IMAGE_DIR)/fastdebug \ 201 VM_SUBDIR=fastdebug generic_export 202 export_debug_jdk: 203 $(MAKE) ALT_EXPORT_PATH=$(JDK_IMAGE_DIR)/debug \ 204 VM_SUBDIR=${VM_DEBUG} generic_export 205 206 207 # Export file copy rules 208 XUSAGE=$(HS_SRC_DIR)/share/vm/Xusage.txt 209 DOCS_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_docs 210 C1_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_compiler1 211 C2_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_compiler2 212 KERNEL_BASE_DIR=$(OUTPUTDIR)/$(VM_PLATFORM)_kernel 213 C1_DIR=$(C1_BASE_DIR)/$(VM_SUBDIR) 214 C2_DIR=$(C2_BASE_DIR)/$(VM_SUBDIR) 215 KERNEL_DIR=$(KERNEL_BASE_DIR)/$(VM_SUBDIR) 216 217 # Misc files and generated files need to come from C1 or C2 area 218 ifeq ($(ARCH_DATA_MODEL), 32) 219 MISC_DIR=$(C1_DIR) 220 GEN_DIR=$(C1_BASE_DIR)/generated 221 else 222 MISC_DIR=$(C2_DIR) 223 GEN_DIR=$(C2_BASE_DIR)/generated 224 endif 225 226 # Bin files (windows) 227 ifeq ($(OSNAME),windows) 228 229 # Get jvm.lib 230 $(EXPORT_LIB_DIR)/%.lib: $(MISC_DIR)/%.lib 231 $(install-file) 232 233 # Other libraries (like SA) 234 $(EXPORT_JRE_BIN_DIR)/%.dll: $(MISC_DIR)/%.dll 235 $(install-file) 236 $(EXPORT_JRE_BIN_DIR)/%.pdb: $(MISC_DIR)/%.pdb 237 $(install-file) 238 $(EXPORT_JRE_BIN_DIR)/%.map: $(MISC_DIR)/%.map 239 $(install-file) 240 241 # Client files always come from C1 area 242 $(EXPORT_CLIENT_DIR)/%.dll: $(C1_DIR)/%.dll 243 $(install-file) 244 $(EXPORT_CLIENT_DIR)/%.pdb: $(C1_DIR)/%.pdb 245 $(install-file) 246 $(EXPORT_CLIENT_DIR)/%.map: $(C1_DIR)/%.map 247 $(install-file) 248 249 # Server files always come from C2 area 250 $(EXPORT_SERVER_DIR)/%.dll: $(C2_DIR)/%.dll 251 $(install-file) 252 $(EXPORT_SERVER_DIR)/%.pdb: $(C2_DIR)/%.pdb 253 $(install-file) 254 $(EXPORT_SERVER_DIR)/%.map: $(C2_DIR)/%.map 255 $(install-file) 256 257 # Kernel files always come from kernel area 258 $(EXPORT_KERNEL_DIR)/%.dll: $(KERNEL_DIR)/%.dll 259 $(install-file) 260 $(EXPORT_KERNEL_DIR)/%.pdb: $(KERNEL_DIR)/%.pdb 261 $(install-file) 262 $(EXPORT_KERNEL_DIR)/%.map: $(KERNEL_DIR)/%.map 263 $(install-file) 264 endif 265 266 # Shared Library 267 ifneq ($(OSNAME),windows) 268 $(EXPORT_JRE_LIB_ARCH_DIR)/%.so: $(C2_DIR)/%.so 269 $(install-file) 270 $(EXPORT_CLIENT_DIR)/%.so: $(C1_DIR)/%.so 271 $(install-file) 272 $(EXPORT_CLIENT_DIR)/64/%.so: $(C1_DIR)/%.so 273 $(install-file) 274 $(EXPORT_SERVER_DIR)/%.so: $(C2_DIR)/%.so 275 $(install-file) 276 $(EXPORT_SERVER_DIR)/64/%.so: $(C2_DIR)/%.so 277 $(install-file) 278 endif 279 280 # Jar file (sa-jdi.jar) 281 $(EXPORT_LIB_DIR)/%.jar: $(GEN_DIR)/%.jar 282 $(install-file) 283 284 # Include files (jvmti.h, jvmticmlr.h, jni.h, $(JDK_INCLUDE_SUBDIR)/jni_md.h, jmm.h) 285 $(EXPORT_INCLUDE_DIR)/%: $(GEN_DIR)/jvmtifiles/% 286 $(install-file) 287 288 $(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/code/% 289 $(install-file) 290 291 $(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/prims/% 292 $(install-file) 293 294 $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h: $(HS_SRC_DIR)/cpu/$(HS_ARCH)/vm/jni_$(HS_ARCH).h 295 $(install-file) 296 297 $(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/services/% 298 $(install-file) 299 300 # Doc files (jvmti.html) 301 $(EXPORT_DOCS_DIR)/platform/jvmti/%: $(DOCS_DIR)/% 302 $(install-file) 303 304 # Xusage file 305 $(EXPORT_SERVER_DIR)/Xusage.txt $(EXPORT_CLIENT_DIR)/Xusage.txt $(EXPORT_KERNEL_DIR)/Xusage.txt: $(XUSAGE) 306 $(prep-target) 307 $(RM) $@.temp 308 $(SED) 's/\(separated by \)[;:]/\1$(PATH_SEP)/g' $< > $@.temp 309 $(MV) $@.temp $@ 310 311 # 312 # Clean rules 313 # 314 clobber clean: clean_build clean_export clean_jdk 315 clean_build: 316 $(RM) -r $(C1_DIR) 317 $(RM) -r $(C2_DIR) 318 $(RM) -r $(KERNEL_DIR) 319 clean_export: 320 $(RM) -r $(EXPORT_PATH) 321 clean_jdk: 322 $(RM) -r $(JDK_IMAGE_DIR) 323 324 # 325 # Create JDK and place this build into it 326 # 327 create_jdk: copy_jdk update_jdk 328 329 update_jdk: export_product_jdk export_fastdebug_jdk test_jdk 330 331 copy_jdk: $(JDK_IMAGE_DIR)/jre/lib/rt.jar 332 333 $(JDK_IMAGE_DIR)/jre/lib/rt.jar: 334 $(RM) -r $(JDK_IMAGE_DIR) 335 $(MKDIR) -p $(JDK_IMAGE_DIR) 336 ($(CD) $(JDK_IMPORT_PATH) && \ 337 $(TAR) -cf - *) | \ 338 ($(CD) $(JDK_IMAGE_DIR) && $(TAR) -xf -) 339 340 test_jdk: 341 ifeq ($(ARCH_DATA_MODEL), 32) 342 $(JDK_IMAGE_DIR)/bin/java -client -version 343 endif 344 $(JDK_IMAGE_DIR)/bin/java -server -version 345 346 copy_product_jdk: 347 $(RM) -r $(JDK_IMAGE_DIR) 348 $(MKDIR) -p $(JDK_IMAGE_DIR) 349 ($(CD) $(JDK_IMPORT_PATH) && \ 350 $(TAR) -cf - $(JDK_DIRS)) | \ 351 ($(CD) $(JDK_IMAGE_DIR) && $(TAR) -xf -) 352 353 copy_fastdebug_jdk: 354 $(RM) -r $(JDK_IMAGE_DIR)/fastdebug 355 $(MKDIR) -p $(JDK_IMAGE_DIR)/fastdebug 356 if [ -d $(JDK_IMPORT_PATH)/fastdebug ] ; then \ 357 ($(CD) $(JDK_IMPORT_PATH)/fastdebug && \ 358 $(TAR) -cf - $(JDK_DIRS)) | \ 359 ($(CD) $(JDK_IMAGE_DIR)/fastdebug && $(TAR) -xf -) ; \ 360 else \ 361 ($(CD) $(JDK_IMPORT_PATH) && \ 362 $(TAR) -cf - $(JDK_DIRS)) | \ 363 ($(CD) $(JDK_IMAGE_DIR)/fastdebug && $(TAR) -xf -) ; \ 364 fi 365 366 copy_debug_jdk: 367 $(RM) -r $(JDK_IMAGE_DIR)/debug 368 $(MKDIR) -p $(JDK_IMAGE_DIR)/debug 369 if [ -d $(JDK_IMPORT_PATH)/debug ] ; then \ 370 ($(CD) $(JDK_IMPORT_PATH)/debug && \ 371 $(TAR) -cf - $(JDK_DIRS)) | \ 372 ($(CD) $(JDK_IMAGE_DIR)/debug && $(TAR) -xf -) ; \ 373 elif [ -d $(JDK_IMPORT_PATH)/fastdebug ] ; then \ 374 ($(CD) $(JDK_IMPORT_PATH)/fastdebug && \ 375 $(TAR) -cf - $(JDK_DIRS)) | \ 376 ($(CD) $(JDK_IMAGE_DIR)/debug && $(TAR) -xf -) ; \ 377 else \ 378 ($(CD) $(JDK_IMPORT_PATH) && \ 379 $(TAR) -cf - $(JDK_DIRS)) | \ 380 ($(CD) $(JDK_IMAGE_DIR)/debug && $(TAR) -xf -) ; \ 381 fi 382 383 # 384 # Check target 385 # 386 check: variable_check 387 388 # 389 # Help target 390 # 391 help: intro_help target_help variable_help notes_help examples_help 392 393 # Intro help message 394 intro_help: 395 @$(ECHO) \ 396 "Makefile for the Hotspot workspace." 397 @$(ECHO) \ 398 "Default behavior is to build and create an export area for the j2se builds." 399 400 # Target help 401 target_help: 402 @$(ECHO) "help: This help message" 403 @$(ECHO) "all: Same as: all_product all_fastdebug" 404 @$(ECHO) "world: Same as: all create_jdk" 405 @$(ECHO) "all_product: Same as: product product1 export_product" 406 @$(ECHO) "all_fastdebug: Same as: fastdebug fastdebug1 export_fastdebug" 407 @$(ECHO) "all_debug: Same as: jvmg jvmg1 export_debug" 408 @$(ECHO) "all_optimized: Same as: optimized optimized1 export_optimized" 409 @$(ECHO) "clean: Clean all areas" 410 @$(ECHO) "export_product: Export product files to EXPORT_PATH" 411 @$(ECHO) "export_fastdebug: Export fastdebug files to EXPORT_PATH" 412 @$(ECHO) "export_debug: Export debug files to EXPORT_PATH" 413 @$(ECHO) "export_optimized: Export optimized files to EXPORT_PATH" 414 @$(ECHO) "create_jdk: Create JDK image, export all files into it" 415 @$(ECHO) "update_jdk: Update JDK image with fresh exported files" 416 @$(ECHO) " " 417 @$(ECHO) "Others targets are:" 418 @$(ECHO) " $(C1_VM_TARGETS)" 419 @$(ECHO) " $(C2_VM_TARGETS)" 420 @$(ECHO) " $(KERNEL_VM_TARGETS)" 421 422 # Variable help (only common ones used by this workspace) 423 variable_help: variable_help_intro variable_list variable_help_end 424 variable_help_intro: 425 @$(ECHO) "--- Common Variables ---" 426 variable_help_end: 427 @$(ECHO) " " 428 @$(ECHO) "--- Make Arguments ---" 429 @$(ECHO) "MAKE_ARGS=$(MAKE_ARGS)" 430 431 # One line descriptions for the variables 432 SLASH_JAVA.desc = Root of all build tools, e.g. /java or J: 433 OUTPUTDIR.desc = Output directory, default is build/<osname> 434 BOOTDIR.desc = JDK used to compile agent java source and test with 435 JDK_IMPORT_PATH.desc = Promoted JDK to copy for 'create_jdk' 436 EXPORT_PATH.desc = Directory to place files to export for JDK build 437 438 # Make variables to print out (description and value) 439 VARIABLE_PRINTVAL_LIST += \ 440 SLASH_JAVA \ 441 OUTPUTDIR \ 442 BOOTDIR \ 443 JDK_IMPORT_PATH \ 444 EXPORT_PATH 445 446 # Make variables that should refer to directories that exist 447 VARIABLE_CHECKDIR_LIST += \ 448 SLASH_JAVA \ 449 BOOTDIR \ 450 JDK_IMPORT_PATH 451 452 # For pattern rules below, so all are treated the same 453 DO_PRINTVAL_LIST=$(VARIABLE_PRINTVAL_LIST:%=%.printval) 454 DO_CHECKDIR_LIST=$(VARIABLE_CHECKDIR_LIST:%=%.checkdir) 455 456 # Complete variable check 457 variable_check: $(DO_CHECKDIR_LIST) 458 variable_list: $(DO_PRINTVAL_LIST) variable_check 459 460 # Pattern rule for printing out a variable 461 %.printval: 462 @$(ECHO) " ALT_$* - $($*.desc)" 463 @$(ECHO) " $*=$($*)" 464 465 # Pattern rule for checking to see if a variable with a directory exists 466 %.checkdir: 467 @if [ ! -d $($*) ] ; then \ 468 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 469 fi 470 471 # Pattern rule for checking to see if a variable with a file exists 472 %.checkfil: 473 @if [ ! -f $($*) ] ; then \ 474 $(ECHO) "WARNING: $* does not exist, try $(MAKE) sanity"; \ 475 fi 476 477 # Misc notes on help 478 notes_help: 479 @$(ECHO) \ 480 "--- Notes --- " 481 @$(ECHO) \ 482 "- JDK_IMPORT_PATH must refer to a compatible build, not all past promoted" 483 @$(ECHO) \ 484 " builds or previous release JDK builds will work." 485 @$(ECHO) \ 486 "- The fastest builds have been when the workspace and the BOOTDIR are on" 487 @$(ECHO) \ 488 " local disk." 489 490 examples_help: 491 @$(ECHO) \ 492 "--- Examples --- " 493 @$(ECHO) \ 494 " $(MAKE) all" 495 @$(ECHO) \ 496 " $(MAKE) world" 497 @$(ECHO) \ 498 " $(MAKE) ALT_BOOTDIR=/opt/java/jdk$(PREVIOUS_JDK_VERSION)" 499 @$(ECHO) \ 500 " $(MAKE) ALT_JDK_IMPORT_PATH=/opt/java/jdk$(JDK_VERSION)" 501 502 # JPRT rule to build this workspace 503 include $(GAMMADIR)/make/jprt.gmk 504 505 .PHONY: all world clobber clean help $(C1_VM_TARGETS) $(C2_VM_TARGETS) \ 506 $(KERNEL_VM_TARGETS) \ 507 generic_build1 generic_build2 generic_buildkernel generic_export \ 508 export_product export_fastdebug export_debug export_optimized \ 509 export_jdk_product export_jdk_fastdebug export_jdk_debug \ 510 create_jdk copy_jdk update_jdk test_jdk \ 511 copy_product_jdk copy_fastdebug_jdk copy_debug_jdk 512