blob: 64b828bb589f078c341b369c213bacbda28fed1c [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#
mduigou1a373692013-04-01 20:15:48 -07002# Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
ohair8e0a08d2009-03-31 16:12:56 -07003# 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
ohair2283b9d2010-05-25 15:58:33 -07007# published by the Free Software Foundation. Oracle designates this
ohair8e0a08d2009-03-31 16:12:56 -07008# particular file as subject to the "Classpath" exception as provided
ohair2283b9d2010-05-25 15:58:33 -07009# by Oracle in the LICENSE file that accompanied this code.
ohair8e0a08d2009-03-31 16:12:56 -070010#
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#
ohair2283b9d2010-05-25 15:58:33 -070021# 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.
ohair8e0a08d2009-03-31 16:12:56 -070024#
25
26#
27# Makefile to run various jdk tests
duke6e45e102007-12-01 00:00:00 +000028#
29
mduigou122c5922013-11-05 19:44:41 -080030.DEFAULT : all
31
ohair7aae9af2009-11-08 15:11:10 -080032# Empty these to get rid of some default rules
33.SUFFIXES:
34.SUFFIXES: .java
35CO=
36GET=
37
38# Utilities used
39AWK = awk
40CAT = cat
41CD = cd
ohair4125be82010-05-12 21:35:55 -070042CHMOD = chmod
ohair7aae9af2009-11-08 15:11:10 -080043CP = cp
44CUT = cut
ohair4125be82010-05-12 21:35:55 -070045DIRNAME = dirname
ohair7aae9af2009-11-08 15:11:10 -080046ECHO = echo
47EGREP = egrep
48EXPAND = expand
ohair4125be82010-05-12 21:35:55 -070049FIND = find
ohair7aae9af2009-11-08 15:11:10 -080050MKDIR = mkdir
ohair7aae9af2009-11-08 15:11:10 -080051PWD = pwd
52SED = sed
ohair7aae9af2009-11-08 15:11:10 -080053SORT = sort
54TEE = tee
55UNAME = uname
56UNIQ = uniq
57WC = wc
ohair7aae9af2009-11-08 15:11:10 -080058ZIP = zip
59
mduigou122c5922013-11-05 19:44:41 -080060# Get OS name from uname (Cygwin inexplicably adds _NT-5.1)
61UNAME_S := $(shell $(UNAME) -s | $(CUT) -f1 -d_)
ohair8e0a08d2009-03-31 16:12:56 -070062
63# Commands to run on paths to make mixed paths for java on windows
mduigou122c5922013-11-05 19:44:41 -080064ifeq ($(UNAME_S), CYGWIN)
65 # Location of developer shared files
ohair8c7e6c52010-05-20 13:57:58 -070066 SLASH_JAVA = J:
chegar3b0deaa2013-11-11 10:33:02 +000067 GETMIXEDPATH = cygpath -m
ohair7aae9af2009-11-08 15:11:10 -080068else
mduigou122c5922013-11-05 19:44:41 -080069 # Location of developer shared files
70 SLASH_JAVA = /java
duke6e45e102007-12-01 00:00:00 +000071
mduigou122c5922013-11-05 19:44:41 -080072 GETMIXEDPATH=$(ECHO)
ohair8bcba562010-03-12 09:03:02 -080073endif
74
duke6e45e102007-12-01 00:00:00 +000075# Root of this test area (important to use full paths in some places)
ohair7aae9af2009-11-08 15:11:10 -080076TEST_ROOT := $(shell $(PWD))
duke6e45e102007-12-01 00:00:00 +000077
ohair8e0a08d2009-03-31 16:12:56 -070078# Root of all test results
79ifdef ALT_OUTPUTDIR
mduigou122c5922013-11-05 19:44:41 -080080 ABS_OUTPUTDIR = $(shell $(CD) $(ALT_OUTPUTDIR) && $(PWD))
duke6e45e102007-12-01 00:00:00 +000081else
mduigou122c5922013-11-05 19:44:41 -080082 ABS_OUTPUTDIR = $(shell $(CD) $(TEST_ROOT)/.. && $(PWD))
ohair8e0a08d2009-03-31 16:12:56 -070083endif
mduigou122c5922013-11-05 19:44:41 -080084
ohair8bcba562010-03-12 09:03:02 -080085ABS_PLATFORM_BUILD_ROOT = $(ABS_OUTPUTDIR)
86ABS_TEST_OUTPUT_DIR := $(ABS_PLATFORM_BUILD_ROOT)/testoutput/$(UNIQUE_DIR)
ohair8e0a08d2009-03-31 16:12:56 -070087
88# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
89ifndef PRODUCT_HOME
90 # Try to use j2sdk-image if it exists
mduigou122c5922013-11-05 19:44:41 -080091 ABS_JDK_IMAGE = $(ABS_PLATFORM_BUILD_ROOT)/images/j2sdk-image
ohair8bcba562010-03-12 09:03:02 -080092 PRODUCT_HOME := \
93 $(shell \
94 if [ -d $(ABS_JDK_IMAGE) ] ; then \
95 $(ECHO) "$(ABS_JDK_IMAGE)"; \
96 else \
97 $(ECHO) "$(ABS_PLATFORM_BUILD_ROOT)"; \
ohair8e0a08d2009-03-31 16:12:56 -070098 fi)
99 PRODUCT_HOME := $(PRODUCT_HOME)
duke6e45e102007-12-01 00:00:00 +0000100endif
101
ohair8e0a08d2009-03-31 16:12:56 -0700102# Expect JPRT to set JPRT_PRODUCT_ARGS (e.g. -server etc.)
103# Should be passed into 'java' only.
ohair7aae9af2009-11-08 15:11:10 -0800104# Could include: -d64 -server -client OR any java option
ohair8e0a08d2009-03-31 16:12:56 -0700105ifdef JPRT_PRODUCT_ARGS
106 JAVA_ARGS = $(JPRT_PRODUCT_ARGS)
107endif
duke6e45e102007-12-01 00:00:00 +0000108
ohair8e0a08d2009-03-31 16:12:56 -0700109# Expect JPRT to set JPRT_PRODUCT_VM_ARGS (e.g. -Xcomp etc.)
110# Should be passed into anything running the vm (java, javac, javadoc, ...).
111ifdef JPRT_PRODUCT_VM_ARGS
112 JAVA_VM_ARGS = $(JPRT_PRODUCT_VM_ARGS)
113endif
duke6e45e102007-12-01 00:00:00 +0000114
ohair8e0a08d2009-03-31 16:12:56 -0700115# Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results)
ohair8e0a08d2009-03-31 16:12:56 -0700116ifdef JPRT_ARCHIVE_BUNDLE
117 ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE)
mduigou122c5922013-11-05 19:44:41 -0800118else
119 ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip
ohair8e0a08d2009-03-31 16:12:56 -0700120endif
duke6e45e102007-12-01 00:00:00 +0000121
ohair8e0a08d2009-03-31 16:12:56 -0700122# How to create the test bundle (pass or fail, we want to create this)
123# Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed.
ohair4125be82010-05-12 21:35:55 -0700124ZIP_UP_RESULTS = ( $(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)` \
ohair8e0a08d2009-03-31 16:12:56 -0700125 && $(CD) $(ABS_TEST_OUTPUT_DIR) \
ohair42ea6c22011-03-22 11:08:09 -0700126 && $(CHMOD) -R a+r . \
ohair8e0a08d2009-03-31 16:12:56 -0700127 && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
mduigou122c5922013-11-05 19:44:41 -0800128
129# important results files
130SUMMARY_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport/text/summary.txt")
ohair7aae9af2009-11-08 15:11:10 -0800131STATS_TXT_NAME = Stats.txt
mduigou122c5922013-11-05 19:44:41 -0800132STATS_TXT = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/$(STATS_TXT_NAME)")
133RUNLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/runlist.txt")
134PASSLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/passlist.txt")
135FAILLIST = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/faillist.txt")
136EXITCODE = $(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/exitcode.txt")
ohair70d49e32009-12-01 08:51:16 -0800137
138TESTEXIT = \
139 if [ ! -s $(EXITCODE) ] ; then \
140 $(ECHO) "ERROR: EXITCODE file not filled in."; \
141 $(ECHO) "1" > $(EXITCODE); \
142 fi ; \
143 testExitCode=`$(CAT) $(EXITCODE)`; \
144 $(ECHO) "EXIT CODE: $${testExitCode}"; \
ohairf6f9ba52009-12-09 09:46:57 -0800145 exit $${testExitCode}
ohair70d49e32009-12-01 08:51:16 -0800146
ohair7aae9af2009-11-08 15:11:10 -0800147BUNDLE_UP_AND_EXIT = \
148( \
ohair70d49e32009-12-01 08:51:16 -0800149 jtregExitCode=$$? && \
ohair7aae9af2009-11-08 15:11:10 -0800150 _summary="$(SUMMARY_TXT)"; \
ohair70d49e32009-12-01 08:51:16 -0800151 $(RM) -f $(STATS_TXT) $(RUNLIST) $(PASSLIST) $(FAILLIST) $(EXITCODE); \
152 $(ECHO) "$${jtregExitCode}" > $(EXITCODE); \
ohair7aae9af2009-11-08 15:11:10 -0800153 if [ -r "$${_summary}" ] ; then \
ohairf6f9ba52009-12-09 09:46:57 -0800154 $(ECHO) "Summary: $(UNIQUE_DIR)" > $(STATS_TXT); \
ohair7aae9af2009-11-08 15:11:10 -0800155 $(EXPAND) $${_summary} | $(EGREP) -v ' Not run\.' > $(RUNLIST); \
156 $(EGREP) ' Passed\.' $(RUNLIST) \
157 | $(EGREP) -v ' Error\.' \
158 | $(EGREP) -v ' Failed\.' > $(PASSLIST); \
159 ( $(EGREP) ' Failed\.' $(RUNLIST); \
160 $(EGREP) ' Error\.' $(RUNLIST); \
161 $(EGREP) -v ' Passed\.' $(RUNLIST) ) \
162 | $(SORT) | $(UNIQ) > $(FAILLIST); \
ohair70d49e32009-12-01 08:51:16 -0800163 if [ $${jtregExitCode} != 0 -o -s $(FAILLIST) ] ; then \
ohair7aae9af2009-11-08 15:11:10 -0800164 $(EXPAND) $(FAILLIST) \
165 | $(CUT) -d' ' -f1 \
166 | $(SED) -e 's@^@FAILED: @' >> $(STATS_TXT); \
ohair70d49e32009-12-01 08:51:16 -0800167 if [ $${jtregExitCode} = 0 ] ; then \
168 jtregExitCode=1; \
169 fi; \
ohair7aae9af2009-11-08 15:11:10 -0800170 fi; \
171 runc="`$(CAT) $(RUNLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
172 passc="`$(CAT) $(PASSLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
173 failc="`$(CAT) $(FAILLIST) | $(WC) -l | $(AWK) '{print $$1;}'`"; \
mduigou122c5922013-11-05 19:44:41 -0800174 exclc="FIXME CODETOOLS-7900176"; \
175 $(ECHO) "TEST STATS: name=$(UNIQUE_DIR) run=$${runc} pass=$${passc} fail=$${failc}" \
ohair7aae9af2009-11-08 15:11:10 -0800176 >> $(STATS_TXT); \
177 else \
178 $(ECHO) "Missing file: $${_summary}" >> $(STATS_TXT); \
179 fi; \
ohair42ea6c22011-03-22 11:08:09 -0700180 if [ -f $(STATS_TXT) ] ; then \
181 $(CAT) $(STATS_TXT); \
182 fi; \
ohair45110f42010-03-06 14:59:23 -0800183 $(ZIP_UP_RESULTS) ; \
ohair70d49e32009-12-01 08:51:16 -0800184 $(TESTEXIT) \
ohair7aae9af2009-11-08 15:11:10 -0800185)
duke6e45e102007-12-01 00:00:00 +0000186
ohair8e0a08d2009-03-31 16:12:56 -0700187################################################################
duke6e45e102007-12-01 00:00:00 +0000188
ohairbb3b48c2011-12-12 08:17:28 -0800189# Default make rule (runs default jdk tests)
190all: jdk_default
ohair8e0a08d2009-03-31 16:12:56 -0700191 @$(ECHO) "Testing completed successfully"
duke6e45e102007-12-01 00:00:00 +0000192
ohair8e0a08d2009-03-31 16:12:56 -0700193# Prep for output
mduigou122c5922013-11-05 19:44:41 -0800194# Change execute permissions on shared library files.
195# Files in repositories should never have execute permissions, but
196# there are some tests that have pre-built shared libraries, and these
197# windows dll files must have execute permission. Adding execute
198# permission may happen automatically on windows when using certain
199# versions of mercurial but it cannot be guaranteed. And blindly
200# adding execute permission might be seen as a mercurial 'change', so
201# we avoid adding execute permission to repository files. But testing
202# from a plain source tree needs the chmod a+rx. Applying the chmod to
203# all shared libraries not just dll files. And with CYGWIN and sshd
204# service, you may need CYGWIN=ntsec for this to work.
mduigou786a71f2013-04-01 12:02:19 -0700205prep:
ohair8e0a08d2009-03-31 16:12:56 -0700206 @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
ohair4c64b8b2010-06-20 14:53:36 -0700207 @$(MKDIR) -p `$(DIRNAME) $(ARCHIVE_BUNDLE)`
mduigou122c5922013-11-05 19:44:41 -0800208 @if [ ! -d $(TEST_ROOT)/../.hg ] ; then \
209 $(FIND) $(TEST_ROOT) \( -name \*.dll -o -name \*.DLL -o -name \*.so \) \
210 -exec $(CHMOD) a+rx {} \; ; \
211 fi
duke6e45e102007-12-01 00:00:00 +0000212
213# Cleanup
214clean:
mduigouba95ae82013-02-06 11:28:25 -0800215 @$(RM) -r $(ABS_TEST_OUTPUT_DIR)
216 @$(RM) $(ARCHIVE_BUNDLE)
duke6e45e102007-12-01 00:00:00 +0000217
ohair8e0a08d2009-03-31 16:12:56 -0700218################################################################
219
220# jtreg tests
221
222# Expect JT_HOME to be set for jtreg tests. (home for jtreg)
ohair588765d2009-11-23 09:51:52 -0800223ifndef JT_HOME
weijunbbba0c22011-09-22 12:05:26 +0800224 JT_HOME = $(SLASH_JAVA)/re/jtreg/4.1/promoted/latest/binaries/jtreg
ohair588765d2009-11-23 09:51:52 -0800225 ifdef JPRT_JTREG_HOME
226 JT_HOME = $(JPRT_JTREG_HOME)
227 endif
ohair8e0a08d2009-03-31 16:12:56 -0700228endif
229
mduigou122c5922013-11-05 19:44:41 -0800230# Problematic tests to be excluded
231PROBLEM_LISTS=$(call MixedDirs,$(wildcard ProblemList.txt closed/ProblemList.txt))
ohair7aae9af2009-11-08 15:11:10 -0800232
233# Create exclude list for this platform and arch
234ifdef NO_EXCLUDES
mduigou122c5922013-11-05 19:44:41 -0800235 JTREG_EXCLUSIONS =
ohair7aae9af2009-11-08 15:11:10 -0800236else
mduigou122c5922013-11-05 19:44:41 -0800237 JTREG_EXCLUSIONS = $(PROBLEM_LISTS:%=-exclude:%)
ohair7aae9af2009-11-08 15:11:10 -0800238endif
239
mduigou122c5922013-11-05 19:44:41 -0800240# convert list of directories to dos paths
241define MixedDirs
242$(foreach i,$1,$(shell $(GETMIXEDPATH) "${i}"))
ohair588765d2009-11-23 09:51:52 -0800243endef
mduigou122c5922013-11-05 19:44:41 -0800244
ohair7aae9af2009-11-08 15:11:10 -0800245define SummaryInfo
ohairf6f9ba52009-12-09 09:46:57 -0800246$(ECHO) "########################################################"
ohair7aae9af2009-11-08 15:11:10 -0800247$(CAT) $(?:%=$(ABS_TEST_OUTPUT_DIR)/%/$(STATS_TXT_NAME))
ohairf6f9ba52009-12-09 09:46:57 -0800248$(ECHO) "########################################################"
ohair7aae9af2009-11-08 15:11:10 -0800249endef
250
251# ------------------------------------------------------------------
252
alanb59100282013-11-19 14:08:28 +0000253jdk_% core_% svc_%:
mduigou122c5922013-11-05 19:44:41 -0800254 $(ECHO) "Running tests: $@"
255 for each in $@; do \
256 $(MAKE) -j 1 TEST_SELECTION=":$$each" UNIQUE_DIR=$$each jtreg_tests; \
257 done
ohair7aae9af2009-11-08 15:11:10 -0800258
259# ------------------------------------------------------------------
260
mduigoufc55db02013-07-27 12:26:01 -0700261ifdef CONCURRENCY
262 EXTRA_JTREG_OPTIONS += -concurrency:$(CONCURRENCY)
263endif
264
sla38753e82015-02-05 13:00:26 +0100265# Default JTREG to run
266JTREG = $(JT_HOME)/bin/jtreg
mduigoufc55db02013-07-27 12:26:01 -0700267# run in agentvm mode
268JTREG_BASIC_OPTIONS += -agentvm
ohair7aae9af2009-11-08 15:11:10 -0800269# Only run automatic tests
270JTREG_BASIC_OPTIONS += -a
ohairccc534d2009-12-11 15:29:22 -0800271# Always turn on assertions
272JTREG_ASSERT_OPTION = -ea -esa
273JTREG_BASIC_OPTIONS += $(JTREG_ASSERT_OPTION)
ohair7aae9af2009-11-08 15:11:10 -0800274# Report details on all failed or error tests, times too
275JTREG_BASIC_OPTIONS += -v:fail,error,time
276# Retain all files for failing tests
277JTREG_BASIC_OPTIONS += -retain:fail,error
278# Ignore tests are not run and completely silent about it
ohairccc534d2009-12-11 15:29:22 -0800279JTREG_IGNORE_OPTION = -ignore:quiet
280JTREG_BASIC_OPTIONS += $(JTREG_IGNORE_OPTION)
ohairf6f9ba52009-12-09 09:46:57 -0800281# Multiple by 4 the timeout numbers
ohairccc534d2009-12-11 15:29:22 -0800282JTREG_TIMEOUT_OPTION = -timeoutFactor:4
283JTREG_BASIC_OPTIONS += $(JTREG_TIMEOUT_OPTION)
mduigoud3e0b442013-05-22 09:59:37 -0700284# Set the max memory for jtreg control vm
ohairccc534d2009-12-11 15:29:22 -0800285JTREG_MEMORY_OPTION = -J-Xmx512m
286JTREG_BASIC_OPTIONS += $(JTREG_MEMORY_OPTION)
mduigoufc55db02013-07-27 12:26:01 -0700287# Add any extra options
288JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS)
289# Set other vm and test options
290JTREG_TEST_OPTIONS = $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_VM_ARGS:%=-vmoption:%)
291# Set the GC options for test vms
292#JTREG_GC_OPTION = -vmoption:-XX:+UseSerialGC
293#JTREG_TEST_OPTIONS += $(JTREG_GC_OPTION)
mduigoud3e0b442013-05-22 09:59:37 -0700294# Set the max memory for jtreg target test vms
295JTREG_TESTVM_MEMORY_OPTION = -vmoption:-Xmx512m
296JTREG_TEST_OPTIONS += $(JTREG_TESTVM_MEMORY_OPTION)
ohair8e0a08d2009-03-31 16:12:56 -0700297
ohair7aae9af2009-11-08 15:11:10 -0800298# Make sure jtreg exists
299$(JTREG): $(JT_HOME)
300
301# Run jtreg
mduigou122c5922013-11-05 19:44:41 -0800302jtreg_tests: prep $(PRODUCT_HOME) $(JTREG)
ohair7aae9af2009-11-08 15:11:10 -0800303 ( \
304 ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \
305 export JT_HOME; \
ohair7aae9af2009-11-08 15:11:10 -0800306 $(shell $(GETMIXEDPATH) "$(JTREG)") \
307 $(JTREG_BASIC_OPTIONS) \
mduigou122c5922013-11-05 19:44:41 -0800308 -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTreport") \
309 -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)/JTwork") \
ohair7aae9af2009-11-08 15:11:10 -0800310 -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \
mduigou122c5922013-11-05 19:44:41 -0800311 $(JTREG_EXCLUSIONS) \
ohair7aae9af2009-11-08 15:11:10 -0800312 $(JTREG_TEST_OPTIONS) \
mduigou122c5922013-11-05 19:44:41 -0800313 $(TEST_SELECTION) \
314 ) ; \
315 $(BUNDLE_UP_AND_EXIT) \
ohair70d49e32009-12-01 08:51:16 -0800316 ) 2>&1 | $(TEE) $(ABS_TEST_OUTPUT_DIR)/output.txt ; $(TESTEXIT)
ohair8e0a08d2009-03-31 16:12:56 -0700317
mduigou122c5922013-11-05 19:44:41 -0800318PHONY_LIST += jtreg_tests
ohair8e0a08d2009-03-31 16:12:56 -0700319
320################################################################
321
duke6e45e102007-12-01 00:00:00 +0000322# Phony targets (e.g. these are not filenames)
ohair8e0a08d2009-03-31 16:12:56 -0700323.PHONY: all clean prep $(PHONY_LIST)
324
325################################################################