duke@435: # mikael@7270: # Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. duke@435: # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@435: # duke@435: # This code is free software; you can redistribute it and/or modify it duke@435: # under the terms of the GNU General Public License version 2 only, as duke@435: # published by the Free Software Foundation. duke@435: # duke@435: # This code is distributed in the hope that it will be useful, but WITHOUT duke@435: # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@435: # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@435: # version 2 for more details (a copy is included in the LICENSE file that duke@435: # accompanied this code). duke@435: # duke@435: # You should have received a copy of the GNU General Public License version duke@435: # 2 along with this work; if not, write to the Free Software Foundation, duke@435: # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@435: # trims@1907: # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA trims@1907: # or visit www.oracle.com if you need additional information or have any trims@1907: # questions. ohair@763: # duke@435: # duke@435: duke@435: # mikael@7270: # Makefile to run various hotspot tests duke@435: # duke@435: mgerdin@3664: GETMIXEDPATH=echo mgerdin@3664: mikael@7270: # Utilities used mikael@7270: AWK = awk mikael@7270: CAT = cat mikael@7270: CD = cd mikael@7270: CHMOD = chmod mikael@7270: CP = cp mikael@7270: CUT = cut mikael@7270: DIRNAME = dirname mikael@7270: ECHO = echo mikael@7270: EGREP = egrep mikael@7270: EXPAND = expand mikael@7270: FIND = find mikael@7270: MKDIR = mkdir mikael@7270: PWD = pwd mikael@7270: SED = sed mikael@7270: SORT = sort mikael@7270: TEE = tee mikael@7270: UNAME = uname mikael@7270: UNIQ = uniq mikael@7270: WC = wc mikael@7270: ZIP = zip mikael@7270: mikael@7270: # Get OS name from uname (Cygwin inexplicably adds _NT-5.1) mikael@7270: UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_) mikael@7270: ifeq ($(UNAME_S), SunOS) duke@435: PLATFORM = solaris twisti@995: SLASH_JAVA = /java duke@435: ARCH = $(shell uname -p) duke@435: ifeq ($(ARCH), i386) duke@435: ARCH=i586 duke@435: endif duke@435: endif mikael@7270: ifeq ($(UNAME_S), Linux) duke@435: PLATFORM = linux twisti@995: SLASH_JAVA = /java duke@435: ARCH = $(shell uname -m) duke@435: ifeq ($(ARCH), i386) ohair@763: ARCH = i586 duke@435: endif duke@435: endif mikael@7270: ifeq ($(UNAME_S), Darwin) never@3156: PLATFORM = bsd never@3156: SLASH_JAVA = /java never@3156: ARCH = $(shell uname -m) never@3156: ifeq ($(ARCH), i386) never@3156: ARCH = i586 never@3156: endif never@3156: endif mikael@7270: ifeq ($(findstring BSD,$(UNAME_S)), BSD) never@3156: PLATFORM = bsd never@3156: SLASH_JAVA = /java never@3156: ARCH = $(shell uname -m) never@3156: ifeq ($(ARCH), i386) never@3156: ARCH = i586 never@3156: endif never@3156: endif mgerdin@3664: ifeq ($(PLATFORM),) mikael@7270: # detect whether we're running in MKS or cygwin mikael@7270: ifeq ($(UNAME_S), Windows_NT) # MKS mgerdin@3664: GETMIXEDPATH=dosname -s mgerdin@3664: endif mikael@7270: ifeq ($(findstring CYGWIN,$(UNAME_S)), CYGWIN) mikael@7270: GETMIXEDPATH=cygpath -m mgerdin@3664: endif duke@435: PLATFORM = windows ohair@763: SLASH_JAVA = J: duke@435: ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64) ohair@763: ARCH = ia64 duke@435: else duke@435: ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64) ohair@763: ARCH = x64 duke@435: else duke@435: ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T) ohair@763: ARCH = x64 duke@435: else ohair@763: ARCH = i586 duke@435: endif duke@435: endif duke@435: endif ohair@763: EXESUFFIX = .exe duke@435: endif duke@435: twisti@995: ifdef ALT_SLASH_JAVA twisti@995: SLASH_JAVA = $(ALT_SLASH_JAVA) twisti@995: endif twisti@995: ohair@763: # Root of this test area (important to use full paths in some places) ohair@763: TEST_ROOT := $(shell pwd) ohair@763: ohair@763: # Root of all test results twisti@2256: ifdef ALT_OUTPUTDIR twisti@2256: ABS_BUILD_ROOT = $(ALT_OUTPUTDIR)/$(PLATFORM)-$(ARCH) twisti@2256: else twisti@2256: ABS_BUILD_ROOT = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH) twisti@2256: endif ohair@763: ABS_TEST_OUTPUT_DIR = $(ABS_BUILD_ROOT)/testoutput ohair@763: ohair@763: # Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test) ohair@763: ifndef PRODUCT_HOME ohair@763: # Try to use j2sdk-image if it exists ohair@763: ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image ohair@763: PRODUCT_HOME := \ ohair@763: $(shell \ ohair@763: if [ -d $(ABS_JDK_IMAGE) ] ; then \ ohair@763: $(ECHO) "$(ABS_JDK_IMAGE)"; \ ohair@763: else \ ohair@763: $(ECHO) "$(ABS_BUILD_ROOT)" ; \ ohair@763: fi) duke@435: endif duke@435: ohair@763: # Expect JPRT to set JAVA_ARGS (e.g. -server etc.) ohair@763: JAVA_OPTIONS = ohair@763: ifdef JAVA_ARGS ohair@763: JAVA_OPTIONS = $(JAVA_ARGS) ohair@763: endif duke@435: ohair@763: # Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results) ohair@763: ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip ohair@763: ifdef JPRT_ARCHIVE_BUNDLE ohair@763: ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE) ohair@763: endif duke@435: ohair@763: # How to create the test bundle (pass or fail, we want to create this) mikael@7270: # Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed. mikael@7270: ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \ mikael@7270: && $(CD) $(ABS_TEST_OUTPUT_DIR) \ mikael@7270: && $(CHMOD) -R a+r . \ mikael@7270: && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . ) mikael@7270: mikael@7270: # important results files mikael@7270: SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt") mikael@7270: STATS_TXT_NAME = Stats.txt mikael@7270: STATS_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/$(STATS_TXT_NAME)") mikael@7270: RUNLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/runlist.txt") mikael@7270: PASSLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/passlist.txt") mikael@7270: FAILLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/faillist.txt") mikael@7270: EXITCODE = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/exitcode.txt") mikael@7270: mikael@7270: TESTEXIT = \ mikael@7270: if [ ! -s $(EXITCODE) ] ; then \ mikael@7270: $(ECHO) "ERROR: EXITCODE file not filled in."; \ mikael@7270: $(ECHO) "1" > $(EXITCODE); \ mikael@7270: fi ; \ mikael@7270: testExitCode=`$(CAT) $(EXITCODE)`; \ mikael@7270: $(ECHO) "EXIT CODE: $${testExitCode}"; \ mikael@7270: exit $${testExitCode} mikael@7270: mikael@7270: BUNDLE_UP_AND_EXIT = \ mikael@7270: ( \ mikael@7270: jtregExitCode=$$? && \ mikael@7270: _summary="$(SUMMARY_TXT)"; \ mikael@7270: $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \ mikael@7270: $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \ mikael@7270: if [ -r "$${_summary}" ] ; then \ mikael@7270: $(ECHO) "Summary: $(UNIQUE_DIR)" > $(STATS_TXT); \ mikael@7270: $(EXPAND) $${_summary} | $(EGREP) -v ' Not run\.' > $(RUNLIST); \ mikael@7270: $(EGREP) ' Passed\.' $(RUNLIST) \ mikael@7270: | $(EGREP) -v ' Error\.' \ mikael@7270: | $(EGREP) -v ' Failed\.' > $(PASSLIST); \ mikael@7270: ( $(EGREP) ' Failed\.' $(RUNLIST); \ mikael@7270: $(EGREP) ' Error\.' $(RUNLIST); \ mikael@7270: $(EGREP) -v ' Passed\.' $(RUNLIST) ) \ mikael@7270: | $(SORT) | $(UNIQ) > $(FAILLIST); \ mikael@7270: if [ $${jtregExitCode} != 0 -o -s $(FAILLIST) ] ; then \ mikael@7270: $(EXPAND) $(FAILLIST) \ mikael@7270: | $(CUT) -d' ' -f1 \ mikael@7270: | $(SED) -e 's@^@FAILED: @' >> $(STATS_TXT); \ mikael@7270: if [ $${jtregExitCode} = 0 ] ; then \ mikael@7270: jtregExitCode=1; \ mikael@7270: fi; \ mikael@7270: fi; \ mikael@7270: runc="`$(CAT) $(RUNLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ mikael@7270: passc="`$(CAT) $(PASSLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ mikael@7270: failc="`$(CAT) $(FAILLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \ mikael@7270: exclc="FIXME CODETOOLS-7900176"; \ mikael@7270: $(ECHO) "TEST STATS: name=$(UNIQUE_DIR) run=$${runc} pass=$${passc} fail=$${failc}" \ mikael@7270: >> $(STATS_TXT); \ mikael@7270: else \ mikael@7270: $(ECHO) "Missing file: $${_summary}" >> $(STATS_TXT); \ mikael@7270: fi; \ mikael@7270: if [ -f $(STATS_TXT) ] ; then \ mikael@7270: $(CAT) $(STATS_TXT); \ mikael@7270: fi; \ mikael@7270: $(ZIP_UP_RESULTS) ; \ mikael@7270: $(TESTEXIT) \ mikael@7270: ) duke@435: ohair@763: ################################################################ duke@435: ohair@763: # Default make rule (runs jtreg_tests) mikael@7270: all: hotspot_all ohair@763: @$(ECHO) "Testing completed successfully" duke@435: mikael@7270: # Support "hotspot_" prefixed test make targets (too) mikael@7270: # The hotspot_% targets are used by the top level Makefile mikael@7270: # Unless explicitly defined below, hotspot_ is interpreted as a jtreg test group name mikael@6916: hotspot_%: mikael@7270: $(ECHO) "Running tests: $@" mikael@7270: $(MAKE) -j 1 TEST_SELECTION=":$@" UNIQUE_DIR=$@ jtreg_tests; mikael@6916: ohair@763: # Prep for output ohair@763: prep: clean ohair@763: @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR) ohair@763: @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` duke@435: duke@435: # Cleanup duke@435: clean: ohair@763: $(RM) -r $(ABS_TEST_OUTPUT_DIR) ohair@763: $(RM) $(ARCHIVE_BUNDLE) duke@435: ohair@763: ################################################################ duke@435: ohair@763: # jtreg tests ohair@763: ohair@763: # Expect JT_HOME to be set for jtreg tests. (home for jtreg) twisti@4941: ifndef JT_HOME mikael@7270: JT_HOME = $(SLASH_JAVA)/re/jtreg/4.1/promoted/latest/binaries/jtreg mikael@7270: ifdef JPRT_JTREG_HOME mikael@7270: JT_HOME = $(JPRT_JTREG_HOME) mikael@7270: endif ohair@763: endif ohair@763: mikael@7270: # When called from JPRT the TESTDIRS variable is set to the jtreg tests to run ohair@763: ifdef TESTDIRS mikael@7270: TEST_SELECTION = $(TESTDIRS) mikael@7270: endif mikael@7270: mikael@7270: ifdef CONCURRENCY mikael@7270: EXTRA_JTREG_OPTIONS += -concurrency:$(CONCURRENCY) ohair@763: endif ohair@763: sla@7204: # Default JTREG to run sla@7204: JTREG = $(JT_HOME)/bin/jtreg ohair@763: mikael@7270: # Only run automatic tests mikael@7270: JTREG_BASIC_OPTIONS += -a mikael@7270: # Report details on all failed or error tests, times too mikael@7270: JTREG_BASIC_OPTIONS += -v:fail,error,time mikael@7270: # Retain all files for failing tests mikael@7270: JTREG_BASIC_OPTIONS += -retain:fail,error mikael@7270: # Ignore tests are not run and completely silent about it mikael@7270: JTREG_IGNORE_OPTION = -ignore:quiet mikael@7270: JTREG_BASIC_OPTIONS += $(JTREG_IGNORE_OPTION) mikael@7270: # Add any extra options mikael@7270: JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS) mikael@7270: # Set other vm and test options mikael@7270: JTREG_TEST_OPTIONS = $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_OPTIONS:%=-vmoption:%) $(JAVA_VM_ARGS:%=-vmoption:%) mikael@7270: ohair@763: # Option to tell jtreg to not run tests marked with "ignore" ohair@763: ifeq ($(PLATFORM), windows) ohair@763: JTREG_KEY_OPTION = -k:!ignore ohair@763: else ohair@763: JTREG_KEY_OPTION = -k:\!ignore ohair@763: endif mikael@7270: JTREG_BASIC_OPTIONS += $(JTREG_KEY_OPTION) mikael@7270: mikael@7270: # Make sure jtreg exists mikael@7270: $(JTREG): $(JT_HOME) ohair@763: mikael@7270: jtreg_tests: prep $(PRODUCT_HOME) $(JTREG) mikael@7270: ( \ mikael@7270: ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \ mikael@7270: export JT_HOME; \ mikael@7270: $(shell $(GETMIXEDPATH) "$(JTREG)") \ mikael@7270: $(JTREG_BASIC_OPTIONS) \ mikael@7270: -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport") \ mikael@7270: -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTwork") \ mikael@7270: -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \ mikael@7270: $(JTREG_EXCLUSIONS) \ mikael@7270: $(JTREG_TEST_OPTIONS) \ mikael@7270: $(TEST_SELECTION) \ mikael@7270: ) ; \ mikael@7270: $(BUNDLE_UP_AND_EXIT) \ mikael@7270: ) 2>&1 | $(TEE) $(ABS_TEST_OUTPUT_DIR)/output.txt ; $(TESTEXIT) ohair@763: ohair@763: PHONY_LIST += jtreg_tests ohair@763: ohair@763: ################################################################ ohair@763: ohair@1216: # clienttest (make sure various basic java client options work) ohair@1216: mikael@7270: hotspot_clienttest clienttest: prep $(PRODUCT_HOME) ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X ohair@1216: $(RM) $(PRODUCT_HOME)/jre/lib/*/client/classes.jsa ohair@1216: $(RM) $(PRODUCT_HOME)/jre/bin/client/classes.jsa ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -Xshare:dump ohair@1216: mikael@7270: PHONY_LIST += hotspot_clienttest clienttest ohair@1216: ohair@1216: ################################################################ ohair@1216: dholmes@7271: # minimaltest (make sure various basic java minimal options work) dholmes@7271: dholmes@7271: hotspot_minimaltest minimaltest: prep $(PRODUCT_HOME) dholmes@7271: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version dholmes@7271: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help dholmes@7271: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X dholmes@7271: dholmes@7271: PHONY_LIST += hotspot_minimaltest minimaltest dholmes@7271: dholmes@7271: ################################################################ dholmes@7271: ohair@1216: # servertest (make sure various basic java server options work) ohair@1216: mikael@7270: hotspot_servertest servertest: prep $(PRODUCT_HOME) ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -version ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -help ohair@1216: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -X ohair@1216: mikael@7270: PHONY_LIST += hotspot_servertest servertest ohair@1216: ohair@1216: ################################################################ ohair@1216: brutisso@3266: # internalvmtests (run internal unit tests inside the VM) brutisso@3266: mikael@7270: hotspot_internalvmtests internalvmtests: prep $(PRODUCT_HOME) brutisso@3266: $(PRODUCT_HOME)/bin/java $(JAVA_OPTIONS) -XX:+ExecuteInternalVMTests -version brutisso@3266: mikael@7270: PHONY_LIST += hotspot_internalvmtests internalvmtests ohair@763: ohair@763: ################################################################ ohair@763: ohair@763: # Phony targets (e.g. these are not filenames) ohair@763: .PHONY: all clean prep $(PHONY_LIST) ohair@763: ohair@763: ################################################################