hotspot/test/Makefile
changeset 1132 915051915ce9
parent 1 489c9b5090e2
child 2024 859d11cea3f8
equal deleted inserted replaced
1126:2ec4685584f3 1132:915051915ce9
     1 #
     1 #
     2 # Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
     2 # Copyright 1995-2008 Sun Microsystems, Inc.  All Rights Reserved.
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4 #
     4 #
     5 # This code is free software; you can redistribute it and/or modify it
     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
     6 # under the terms of the GNU General Public License version 2 only, as
     7 # published by the Free Software Foundation.
     7 # published by the Free Software Foundation.
    17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18 #
    18 #
    19 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    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
    20 # CA 95054 USA or visit www.sun.com if you need additional information or
    21 # have any questions.
    21 # have any questions.
    22 #  
    22 #
    23 #
    23 #
    24 
    24 
    25 #
    25 #
    26 # Makefile to run jtreg
    26 # Makefile to run various jdk tests
    27 #
    27 #
    28 
    28 
       
    29 # Get OS/ARCH specifics
    29 OSNAME = $(shell uname -s)
    30 OSNAME = $(shell uname -s)
       
    31 SLASH_JAVA = /java
    30 ifeq ($(OSNAME), SunOS)
    32 ifeq ($(OSNAME), SunOS)
    31   PLATFORM = solaris
    33   PLATFORM = solaris
    32   JCT_PLATFORM = solaris
       
    33   ARCH = $(shell uname -p)
    34   ARCH = $(shell uname -p)
    34   ifeq ($(ARCH), i386)
    35   ifeq ($(ARCH), i386)
    35     ARCH=i586
    36     ARCH=i586
    36   endif
    37   endif
    37 endif
    38 endif
    38 ifeq ($(OSNAME), Linux)
    39 ifeq ($(OSNAME), Linux)
    39   PLATFORM = linux
    40   PLATFORM = linux
    40   JCT_PLATFORM = linux
       
    41   ARCH = $(shell uname -m)
    41   ARCH = $(shell uname -m)
    42   ifeq ($(ARCH), i386)
    42   ifeq ($(ARCH), i386)
    43     ARCH=i586
    43     ARCH = i586
    44   endif
    44   endif
    45 endif
    45 endif
    46 ifeq ($(OSNAME), Windows_NT)
    46 ifeq ($(OSNAME), Windows_NT)
    47   PLATFORM = windows
    47   PLATFORM = windows
    48   JCT_PLATFORM = win32
    48   SLASH_JAVA = J:
    49   ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
    49   ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
    50     ARCH=ia64
    50     ARCH = ia64
    51   else
    51   else
    52     ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
    52     ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
    53       ARCH=x64
    53       ARCH = x64
    54     else
    54     else
    55       ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
    55       ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
    56         ARCH=x64
    56         ARCH = x64
    57       else
    57       else
    58         ARCH=i586
    58         ARCH = i586
    59       endif
    59       endif
    60     endif
    60     endif
    61   endif
    61   endif
    62 endif
    62   EXESUFFIX = .exe
    63 
    63 endif
    64 # Default bundle of all test results (passed or not)
    64 
    65 JPRT_ARCHIVE_BUNDLE=$(TEST_ROOT)/JPRT_ARCHIVE_BUNDLE.zip
    65 # Utilities used
    66 
    66 CD    = cd
    67 # Default home for JTREG
    67 CP    = cp
    68 ifeq ($(PLATFORM), windows)
    68 ECHO  = echo
    69   JT_HOME = J:/svc/jct-tools3.2.2_01
    69 MKDIR = mkdir
    70 else
    70 ZIP   = zip
    71   JT_HOME = /java/svc/jct-tools3.2.2_01
    71 
    72 endif
    72 # Root of this test area (important to use full paths in some places)
    73 
       
    74 # Default JTREG to run
       
    75 JTREG = $(JT_HOME)/$(JCT_PLATFORM)/bin/jtreg
       
    76 
       
    77 # Root of this test area
       
    78 TEST_ROOT := $(shell pwd)
    73 TEST_ROOT := $(shell pwd)
    79 
    74 
    80 # Default JDK to test
       
    81 JAVA_HOME = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
       
    82 
       
    83 # The test directories to run
       
    84 DEFAULT_TESTDIRS = serviceability
       
    85 TESTDIRS = $(DEFAULT_TESTDIRS)
       
    86 
       
    87 # Files that hold total passed and failed counts (passed==0 is bad)
       
    88 JTREG_TOTALS_DIR = $(TEST_ROOT)/JTREG_TOTALS_$(PLATFORM)_$(ARCH)
       
    89 JTREG_FAILED = $(JTREG_TOTALS_DIR)/failed_count
       
    90 JTREG_PASSED = $(JTREG_TOTALS_DIR)/passed_count
       
    91 
       
    92 # Root of all test results
    75 # Root of all test results
    93 JTREG_ALL_OUTPUT_DIRNAME = JTREG_OUTPUT_$(PLATFORM)_$(ARCH)
    76 ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
    94 JTREG_ALL_OUTPUT_DIR = $(TEST_ROOT)/$(JTREG_ALL_OUTPUT_DIRNAME)
    77 ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput
    95 
    78 
    96 # Test results for one test directory
    79 # Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
    97 JTREG_TEST_OUTPUT_DIR = $(JTREG_ALL_OUTPUT_DIR)/$@
    80 ifndef PRODUCT_HOME
    98 JTREG_TEST_REPORT_DIR = $(JTREG_TEST_OUTPUT_DIR)/JTreport
    81   # Try to use j2sdk-image if it exists
    99 JTREG_TEST_WORK_DIR   = $(JTREG_TEST_OUTPUT_DIR)/JTwork
    82   ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image
   100 JTREG_TEST_SUMMARY    =	$(JTREG_TEST_REPORT_DIR)/summary.txt
    83   PRODUCT_HOME :=                       \
   101 
    84     $(shell                             \
   102 # Temp files used by this Makefile
    85       if [ -d $(ABS_JDK_IMAGE) ] ; then \
   103 JTREG_TEST_TEMP_DIR   = $(JTREG_ALL_OUTPUT_DIR)/$@/temp
    86          $(ECHO) "$(ABS_JDK_IMAGE)";    \
   104 JTREG_TEMP_PASSED     = $(JTREG_TEST_TEMP_DIR)/passed
    87        else                             \
   105 JTREG_TEMP_FAILED     = $(JTREG_TEST_TEMP_DIR)/failed
    88          $(ECHO) "$(ABS_BUILD_ROOT)" ;  \
   106 JTREG_TEMP_OUTPUT     = $(JTREG_TEST_TEMP_DIR)/output
    89        fi)
   107 JTREG_TEMP_RESULTS    = $(JTREG_TEST_TEMP_DIR)/results
    90 endif
   108 
    91 
   109 # JTREG options (different for 2.1.6 and 3.2.2_01)
    92 # Expect JPRT to set JAVA_ARGS (e.g. -server etc.)
   110 JTREG_COMMON_OPTIONS = -r:$(JTREG_TEST_REPORT_DIR) \
    93 JAVA_OPTIONS = 
   111                        -w:$(JTREG_TEST_WORK_DIR) \
    94 ifdef JAVA_ARGS
   112                        -testjdk:$(JAVA_HOME) \
    95   JAVA_OPTIONS = $(JAVA_ARGS)
   113                        -automatic \
    96 endif
   114 	               -verbose:all
    97 
   115 JTREG_216_OPTIONS = $(JTREG_COMMON_OPTIONS) $@ $(JAVA_ARGS)
    98 # Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results)
   116 JTREG_322_OPTIONS = $(JTREG_COMMON_OPTIONS) $(JAVA_ARGS:%=-vmoption:%) $@
    99 ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip
   117 
   100 ifdef JPRT_ARCHIVE_BUNDLE
   118 # Default make rule
   101   ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE)
   119 all: clean check tests
   102 endif
   120 
   103 
   121 # Chaeck to make sure these directories exist
   104 # How to create the test bundle (pass or fail, we want to create this)
   122 check: $(JT_HOME) $(JAVA_HOME) $(JTREG)
   105 BUNDLE_UP = ( $(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`     \
   123 
   106 	      && $(CD) $(ABS_TEST_OUTPUT_DIR)             \
   124 # Prime the test run
   107 	      && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
   125 primecounts: FRC
   108 BUNDLE_UP_FAILED = ( exitCode=$$? && $(BUNDLE_UP) && exit $${exitCode} )
   126 	@rm -f -r $(JTREG_TOTALS_DIR)
   109 
   127 	@mkdir -p $(JTREG_TOTALS_DIR)
   110 ################################################################
   128 	@echo "0" > $(JTREG_FAILED)
   111 
   129 	@echo "0" > $(JTREG_PASSED)
   112 # Default make rule (runs jtreg_tests)
   130 
   113 all: jtreg_tests
   131 # Run the tests and determine the 'make' command exit status
   114 	@$(ECHO) "Testing completed successfully"
   132 #   Ultimately we determine the make exit code based on the passed/failed count
   115 
   133 tests: primecounts $(TESTDIRS)
   116 # Prep for output
   134 	@echo "JTREG TOTAL: passed=`cat $(JTREG_PASSED)` failed=`cat $(JTREG_FAILED)`"
   117 prep: clean
   135 	zip -q -r $(JPRT_ARCHIVE_BUNDLE) $(JTREG_ALL_OUTPUT_DIRNAME)
   118 	@$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
   136 	@if [ `cat $(JTREG_FAILED)` -ne 0 -o \
   119 	@$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`
   137 	     `cat $(JTREG_PASSED)` -le 0 ] ; then \
       
   138 	  echo "JTREG FAILED"; \
       
   139 	  exit 1; \
       
   140 	else \
       
   141 	  echo "JTREG PASSED"; \
       
   142 	  exit 0; \
       
   143 	fi
       
   144 
       
   145 # Just make sure these directires exist
       
   146 $(JT_HOME) $(JAVA_HOME): FRC
       
   147 	@if [ ! -d $@ ] ; then \
       
   148 	    echo "ERROR: Directory $@ does not exist"; \
       
   149 	    exit 1; \
       
   150 	fi
       
   151 
       
   152 # Make sure this file exists
       
   153 $(JTREG): FRC
       
   154 	@if [ ! -f $@ ] ; then \
       
   155 	    echo "ERROR: File $@ does not exist"; \
       
   156 	    exit 1; \
       
   157 	fi
       
   158 
       
   159 # Process each test directory one by one, this rule always completes.
       
   160 #    Note that the use of 'tee' tosses the jtreg process exit status, this
       
   161 #    is as expected because even if jtreg fails, we need to save the
       
   162 #    output. So we update the JTREG_PASSED and JTREG_FAILED count files.
       
   163 #    Note that missing the 'results:' line in the last few lines of output
       
   164 #    will indicate a failure (or a bump by one of the JTREG_FAILED file.
       
   165 #    Note that passed: 0 or no passed: indication means a failure.
       
   166 #    Note that any indication of the word 'failed' indicates failure.
       
   167 #    Ultimately if the contents of JTREG_FAILED is not 0, we have failed 
       
   168 #    tests, and if the contents of JTREG_PASSED is 0, we consider that a
       
   169 #    failure.
       
   170 $(TESTDIRS):  FRC
       
   171 	@if [ ! -d $@ ] ; then \
       
   172 	    echo "ERROR: Directory $@ does not exist"; \
       
   173 	    exit 1; \
       
   174 	fi
       
   175 	@echo "---------------------------------------------------"
       
   176 	@rm -f -r $(JTREG_TEST_OUTPUT_DIR)
       
   177 	@mkdir -p $(JTREG_TEST_OUTPUT_DIR)
       
   178 	@mkdir -p $(JTREG_TEST_WORK_DIR)
       
   179 	@mkdir -p $(JTREG_TEST_WORK_DIR)/scratch
       
   180 	@mkdir -p $(JTREG_TEST_REPORT_DIR)
       
   181 	@mkdir -p $(JTREG_TEST_TEMP_DIR)
       
   182 	@echo "Testing $@"
       
   183 	@echo "Using JAVA_HOME=$(JAVA_HOME)"
       
   184 	@echo "Using JAVA_ARGS=$(JAVA_ARGS)"
       
   185 	@if [ "`$(JTREG) -help 2>&1 | fgrep -- -vmoption`" != "" ] ; then \
       
   186 	  echo "Assume we are using jtreg 3.2.2_01 or newer"; \
       
   187 	  echo "$(JTREG) $(JTREG_322_OPTIONS)"; \
       
   188 	  $(JTREG) $(JTREG_322_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
       
   189 	else \
       
   190 	  echo "Assume we are using jtreg 2.1.6"; \
       
   191 	  echo "$(JTREG) $(JTREG_216_OPTIONS)"; \
       
   192 	  $(JTREG) $(JTREG_216_OPTIONS) 2>&1 | tee $(JTREG_TEMP_OUTPUT) ; \
       
   193 	fi
       
   194 	@echo "---------------------------------------------------"
       
   195 	@echo "Extracting passed and failed counts from jtreg output"
       
   196 	@tail -10 $(JTREG_TEMP_OUTPUT) | fgrep -i 'results:' | \
       
   197 	       tail -1 | tee $(JTREG_TEMP_RESULTS)
       
   198 	@sed -e 's@.*\ passed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_RESULTS) \
       
   199 	       > $(JTREG_TEMP_PASSED)
       
   200 	@if [ "`cat $(JTREG_TEMP_PASSED)`" = "" ] ; then \
       
   201 	  echo "ERROR: No passed indication in results"; \
       
   202 	  expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
       
   203 	elif [ `cat $(JTREG_TEMP_PASSED)` -le 0 ] ; then \
       
   204 	  echo "ERROR: Passed count appears to be 0"; \
       
   205 	  expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
       
   206 	elif [ "`fgrep -i failed $(JTREG_TEMP_RESULTS)`" = "" ] ; then \
       
   207 	  echo "No indication anything failed"; \
       
   208 	  expr `cat $(JTREG_PASSED)` '+' `cat $(JTREG_TEMP_PASSED)` \
       
   209 		> $(JTREG_PASSED); \
       
   210 	else \
       
   211 	  sed -e 's@.*\ failed:\ \([1-9][0-9]*\).*@\1@' $(JTREG_TEMP_FAILED) \
       
   212 		> $(JTREG_TEMP_FAILED); \
       
   213 	  if [ "`cat $(JTREG_TEMP_FAILED)`" = "" ] ; then \
       
   214 	    echo "ERROR: Failed pattern but no failed count in results"; \
       
   215 	    expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
       
   216 	  elif [ `cat $(JTREG_TEMP_FAILED)` -le 0 ] ; then \
       
   217 	    echo "ERROR: Failed count is 0, did something failed or not?"; \
       
   218 	    expr `cat $(JTREG_FAILED)` '+' 1 > $(JTREG_FAILED); \
       
   219 	  else \
       
   220 	    expr `cat $(JTREG_FAILED)` '+' `cat $(JTREG_TEMP_FAILED)` \
       
   221 		  > $(JTREG_FAILED); \
       
   222 	  fi; \
       
   223 	fi
       
   224 	@echo "---------------------------------------------------"
       
   225 	@echo "Summary: "
       
   226 	@if [ -f $(JTREG_TEST_SUMMARY) ] ; then \
       
   227 	  cat $(JTREG_TEST_SUMMARY) ; \
       
   228 	else \
       
   229 	  echo "ERROR: Missing $(JTREG_TEST_SUMMARY)"; \
       
   230 	fi
       
   231 	@echo "---------------------------------------------------"
       
   232 
   120 
   233 # Cleanup
   121 # Cleanup
   234 clean:
   122 clean:
   235 	rm -f -r $(JTREG_ALL_OUTPUT_DIR)
   123 	$(RM) -r $(ABS_TEST_OUTPUT_DIR)
   236 	rm -f $(JPRT_ARCHIVE_BUNDLE)
   124 	$(RM) $(ARCHIVE_BUNDLE)
   237 
   125 
   238 FRC:
   126 ################################################################
   239 
   127 
       
   128 # jtreg tests
       
   129 
       
   130 # Expect JT_HOME to be set for jtreg tests. (home for jtreg)
       
   131 JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg
       
   132 ifdef JPRT_JTREG_HOME
       
   133   JT_HOME = $(JPRT_JTREG_HOME)
       
   134 endif
       
   135 
       
   136 # Expect JPRT to set TESTDIRS to the jtreg test dirs
       
   137 JTREG_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
       
   138 ifdef TESTDIRS
       
   139   JTREG_TESTDIRS = $(TESTDIRS)
       
   140 endif
       
   141 
       
   142 # Default JTREG to run (win32 script works for everybody)
       
   143 JTREG = $(JT_HOME)/win32/bin/jtreg
       
   144 
       
   145 # Option to tell jtreg to not run tests marked with "ignore"
       
   146 ifeq ($(PLATFORM), windows)
       
   147   JTREG_KEY_OPTION = -k:!ignore
       
   148 else
       
   149   JTREG_KEY_OPTION = -k:\!ignore
       
   150 endif
       
   151 
       
   152 #EXTRA_JTREG_OPTIONS =
       
   153 
       
   154 jtreg_tests: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG)
       
   155 	$(JTREG) -a -v:fail,error               \
       
   156           $(JTREG_KEY_OPTION)                   \
       
   157           $(EXTRA_JTREG_OPTIONS)                \
       
   158           -r:$(ABS_TEST_OUTPUT_DIR)/JTreport    \
       
   159           -w:$(ABS_TEST_OUTPUT_DIR)/JTwork      \
       
   160           -jdk:$(PRODUCT_HOME)                  \
       
   161           $(JAVA_OPTIONS:%=-vmoption:%)         \
       
   162           $(JTREG_TESTDIRS)                     \
       
   163 	  || $(BUNDLE_UP_FAILED)
       
   164 	$(BUNDLE_UP)
       
   165 
       
   166 PHONY_LIST += jtreg_tests
       
   167 
       
   168 ################################################################
       
   169 
       
   170 # packtest
       
   171 
       
   172 # Expect JPRT to set JPRT_PACKTEST_HOME.
       
   173 PACKTEST_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/packtest
       
   174 ifdef JPRT_PACKTEST_HOME
       
   175   PACKTEST_HOME = $(JPRT_PACKTEST_HOME)
       
   176 endif
       
   177 
       
   178 #EXTRA_PACKTEST_OPTIONS =
       
   179 
       
   180 packtest: prep $(PACKTEST_HOME)/ptest $(PRODUCT_HOME)
       
   181 	( $(CD) $(PACKTEST_HOME) &&            \
       
   182 	    $(PACKTEST_HOME)/ptest             \
       
   183 		 -t "$(PRODUCT_HOME)"          \
       
   184 	         $(PACKTEST_STRESS_OPTION)     \
       
   185 		 $(EXTRA_PACKTEST_OPTIONS)     \
       
   186 		 -W $(ABS_TEST_OUTPUT_DIR)     \
       
   187                  $(JAVA_OPTIONS:%=-J %)        \
       
   188 	 ) || $(BUNDLE_UP_FAILED)
       
   189 	$(BUNDLE_UP)
       
   190 
       
   191 packtest_stress: PACKTEST_STRESS_OPTION=-s
       
   192 packtest_stress: packtest
       
   193 
       
   194 PHONY_LIST += packtest packtest_stress
       
   195 
       
   196 ################################################################
       
   197 
       
   198 # Phony targets (e.g. these are not filenames)
       
   199 .PHONY: all clean prep $(PHONY_LIST)
       
   200 
       
   201 ################################################################
       
   202