66945e5010
Reviewed-by: erikj
315 lines
11 KiB
Plaintext
315 lines
11 KiB
Plaintext
#
|
|
# Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# This code is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License version 2 only, as
|
|
# published by the Free Software Foundation. Oracle designates this
|
|
# particular file as subject to the "Classpath" exception as provided
|
|
# by Oracle in the LICENSE file that accompanied this code.
|
|
#
|
|
# This code is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# version 2 for more details (a copy is included in the LICENSE file that
|
|
# accompanied this code).
|
|
#
|
|
# You should have received a copy of the GNU General Public License version
|
|
# 2 along with this work; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
# or visit www.oracle.com if you need additional information or have any
|
|
# questions.
|
|
#
|
|
|
|
################################################################################
|
|
# Initial bootstrapping, copied and stripped down from Makefile and Init.gmk
|
|
################################################################################
|
|
|
|
# In Cygwin, the MAKE variable gets prepended with the current directory if the
|
|
# make executable is called using a Windows mixed path (c:/cygwin/bin/make.exe).
|
|
ifneq ($(findstring :, $(MAKE)), )
|
|
export MAKE := $(patsubst $(CURDIR)%, %, $(patsubst $(CURDIR)/%, %, $(MAKE)))
|
|
endif
|
|
|
|
# Locate this Makefile
|
|
ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))), )
|
|
makefile_path := $(CURDIR)/$(strip $(lastword $(MAKEFILE_LIST)))
|
|
else
|
|
makefile_path := $(lastword $(MAKEFILE_LIST))
|
|
endif
|
|
TOPDIR := $(strip $(patsubst %/make/, %, $(dir $(makefile_path))))
|
|
|
|
################################################################################
|
|
# Functions
|
|
################################################################################
|
|
|
|
# Setup a required or optional variable, and/or check that it is properly
|
|
# given.
|
|
# Note: No spaces are allowed around the arguments.
|
|
#
|
|
# $1: The name of the variable
|
|
# $2: The default value, if any, or OPTIONAL (do not provide a default but
|
|
# do not exit if it is missing)
|
|
# $3: If NO_CHECK, disable checking for target file/directory existence
|
|
# If MKDIR, create the default directory
|
|
define SetupVariable
|
|
ifeq ($$($1), )
|
|
ifeq ($2, )
|
|
$$(info Error: Prebuilt variable $1 is missing, needed for run-tests-prebuilt)
|
|
$$(error Cannot continue.)
|
|
else ifeq ($2, OPTIONAL)
|
|
ifneq ($$(findstring $$(LOG), info debug trace), )
|
|
$$(info Prebuilt variable $1 is not provided)
|
|
endif
|
|
else
|
|
ifneq ($$(findstring $$(LOG), info debug trace), )
|
|
$$(info Prebuilt variable $1=$2 (default value))
|
|
endif
|
|
$1 := $2
|
|
endif
|
|
else
|
|
ifneq ($$(findstring $$(LOG), info debug trace), )
|
|
$$(info Prebuilt variable $1=$$($1))
|
|
endif
|
|
endif
|
|
# If $1 has a value (is not optional), and $3 is not set (to NO_CHECK),
|
|
# and if wildcard is empty, then complain that the file is missing.
|
|
ifeq ($3, MKDIR)
|
|
ifneq ($$(findstring $$(LOG), info debug trace), )
|
|
$$(info Creating directory for $1)
|
|
endif
|
|
$$(shell mkdir -p $$($1))
|
|
else ifneq ($3, NO_CHECK)
|
|
ifeq ($$(strip $$(if $$($1), , OPTIONAL) $$(wildcard $$($1))), )
|
|
$$(info Error: Prebuilt variable $1 points to missing file/directory:)
|
|
$$(info '$$($1)')
|
|
$$(error Cannot continue.)
|
|
endif
|
|
endif
|
|
endef
|
|
|
|
# Create an ephemeral spec file
|
|
#
|
|
# $1: The output file name
|
|
# $2..$N: The lines to output to the file
|
|
define CreateNewSpec
|
|
$(if $(strip $(33)), \
|
|
$(error Internal makefile error: \
|
|
Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \
|
|
) \
|
|
$(shell $(RM) $1) \
|
|
$(foreach i, $(call sequence, 2, 32), \
|
|
$(if $(strip $($i)), \
|
|
$(call AppendFile, $(strip $($i)), $1) \
|
|
) \
|
|
)
|
|
endef
|
|
|
|
################################################################################
|
|
# Check input and setup basic buildsystem support
|
|
################################################################################
|
|
|
|
# Verify that user has given correct additional input.
|
|
|
|
# These variables are absolutely necessary
|
|
$(eval $(call SetupVariable,OUTPUTDIR,$(TOPDIR)/build/run-test-prebuilt,MKDIR))
|
|
$(eval $(call SetupVariable,BOOT_JDK))
|
|
$(eval $(call SetupVariable,JT_HOME))
|
|
|
|
# These can have default values based on the ones above
|
|
$(eval $(call SetupVariable,JDK_IMAGE_DIR,$(OUTPUTDIR)/images/jdk))
|
|
$(eval $(call SetupVariable,TEST_IMAGE_DIR,$(OUTPUTDIR)/images/test))
|
|
$(eval $(call SetupVariable,SYMBOLS_IMAGE_DIR,$(OUTPUTDIR)/images/symbols,NO_CHECK))
|
|
$(eval $(call SetupVariable,JTREG_JDK,$(BOOT_JDK)))
|
|
|
|
# Provide default values for tools that we need
|
|
$(eval $(call SetupVariable,MAKE,make,NO_CHECK))
|
|
$(eval $(call SetupVariable,BASH,bash,NO_CHECK))
|
|
|
|
# Check optional variables
|
|
$(eval $(call SetupVariable,JIB_JAR,OPTIONAL))
|
|
|
|
# Now that we have verified that we have the required variables available, we
|
|
# can include the prebuilt spec file ourselves, without an ephemeral spec
|
|
# wrapper. This is required so we can include MakeBase which is needed for
|
|
# CreateNewSpec.
|
|
HAS_SPEC :=
|
|
include $(TOPDIR)/make/InitSupport.gmk
|
|
|
|
$(eval $(call CheckDeprecatedEnvironment))
|
|
$(eval $(call CheckInvalidMakeFlags))
|
|
$(eval $(call ParseLogLevel))
|
|
|
|
SPEC := $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk
|
|
include $(SPEC)
|
|
include $(TOPDIR)/make/common/MakeBase.gmk
|
|
|
|
################################################################################
|
|
# Determine what platform we're running on
|
|
################################################################################
|
|
UNAME := uname
|
|
|
|
# Get OS name from uname (Cygwin inexplicably adds _NT-x.x)
|
|
UNAME_OS := $(shell $(UNAME) -s | $(CUT) -f1 -d_)
|
|
|
|
ifeq ($(UNAME_OS), CYGWIN)
|
|
OPENJDK_TARGET_OS := windows
|
|
OPENJDK_TARGET_OS_TYPE := windows
|
|
OPENJDK_TARGET_OS_ENV := windows.cygwin
|
|
else ifeq ($(UNAME_OS), MINGW64)
|
|
OPENJDK_TARGET_OS := windows
|
|
OPENJDK_TARGET_OS_TYPE := windows
|
|
OPENJDK_TARGET_OS_ENV := windows.msys2
|
|
else
|
|
OPENJDK_TARGET_OS_TYPE := unix
|
|
ifeq ($(UNAME_OS), Linux)
|
|
OPENJDK_TARGET_OS := linux
|
|
else ifeq ($(UNAME_OS), Darwin)
|
|
OPENJDK_TARGET_OS := macosx
|
|
else
|
|
OPENJDK_TARGET_OS := $(UNAME_OS)
|
|
endif
|
|
OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS)
|
|
endif
|
|
|
|
# Sanity check env detection
|
|
$(info Detected target OS, type and env: [$(OPENJDK_TARGET_OS)] [$(OPENJDK_TARGET_OS_TYPE)] [$(OPENJDK_TARGET_OS_ENV)])
|
|
|
|
# Assume little endian unless otherwise specified
|
|
OPENJDK_TARGET_CPU_ENDIAN := little
|
|
|
|
UNAME_CPU := $(shell $(UNAME) -m)
|
|
ifeq ($(UNAME_CPU), i686)
|
|
OPENJDK_TARGET_CPU := x86
|
|
OPENJDK_TARGET_CPU_BITS := 32
|
|
else
|
|
# Assume all others are 64-bit. We use the same CPU name as uname for
|
|
# at least x86_64 and aarch64.
|
|
OPENJDK_TARGET_CPU := $(UNAME_CPU)
|
|
OPENJDK_TARGET_CPU_BITS := 64
|
|
endif
|
|
|
|
OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU)
|
|
ifeq ($(OPENJDK_TARGET_CPU), x86_64)
|
|
OPENJDK_TARGET_CPU_ARCH := x86
|
|
endif
|
|
|
|
ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
FIXPATH_BASE := $(BASH) $(TOPDIR)/make/scripts/fixpath.sh
|
|
FIXPATH := $(FIXPATH_BASE) exec
|
|
else
|
|
FIXPATH_BASE :=
|
|
FIXPATH :=
|
|
endif
|
|
|
|
# Check number of cores and memory in MB
|
|
ifeq ($(OPENJDK_TARGET_OS), linux)
|
|
NUM_CORES := $(shell $(CAT) /proc/cpuinfo | $(GREP) -c processor)
|
|
MEMORY_SIZE := $(shell \
|
|
$(EXPR) `$(CAT) /proc/meminfo | $(GREP) MemTotal | $(AWK) '{print $$2}'` / 1024 \
|
|
)
|
|
else ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
|
|
MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024)
|
|
else ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
NUM_CORES := $(NUMBER_OF_PROCESSORS)
|
|
MEMORY_SIZE := $(shell \
|
|
$(EXPR) `wmic computersystem get totalphysicalmemory -value \
|
|
| $(GREP) = | $(SED) 's/\\r//g' \
|
|
| $(CUT) -d "=" -f 2-` / 1024 / 1024 \
|
|
)
|
|
endif
|
|
ifeq ($(NUM_CORES), )
|
|
$(warn Could not find number of CPUs, assuming 1)
|
|
NUM_CORES := 1
|
|
endif
|
|
ifeq ($(MEMORY_SIZE), )
|
|
$(warn Could not find memory size, assuming 1024 MB)
|
|
MEMORY_SIZE := 1024
|
|
endif
|
|
|
|
ifneq ($(wildcard $(JDK_IMAGE_DIR)/template.xml), )
|
|
TEST_OPTS_JCOV := true
|
|
JCOV_IMAGE_DIR := $(JDK_IMAGE_DIR)
|
|
else
|
|
TEST_OPTS_JCOV := false
|
|
JCOV_IMAGE_DIR :=
|
|
endif
|
|
|
|
################################################################################
|
|
# Generate the ephemeral spec file
|
|
################################################################################
|
|
|
|
# Now we can include additional custom support.
|
|
# This might define CUSTOM_NEW_SPEC_LINE
|
|
ifneq ($(CUSTOM_MAKE_DIR), )
|
|
include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk
|
|
endif
|
|
|
|
NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk
|
|
|
|
$(call CreateNewSpec, $(NEW_SPEC), \
|
|
# Generated file -- do not edit!, \
|
|
SPEC := $(NEW_SPEC), \
|
|
TOPDIR := $(TOPDIR), \
|
|
OUTPUTDIR := $(OUTPUTDIR), \
|
|
BOOT_JDK := $(BOOT_JDK), \
|
|
JTREG_JDK := $(JTREG_JDK), \
|
|
JT_HOME := $(JT_HOME), \
|
|
JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \
|
|
JCOV_IMAGE_DIR := $(JCOV_IMAGE_DIR), \
|
|
TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \
|
|
SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \
|
|
MAKE := $(MAKE), \
|
|
BASH := $(BASH), \
|
|
JIB_JAR := $(JIB_JAR), \
|
|
FIXPATH_BASE := $(FIXPATH_BASE), \
|
|
FIXPATH := $(FIXPATH), \
|
|
OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \
|
|
OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \
|
|
OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \
|
|
OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \
|
|
OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \
|
|
OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \
|
|
OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \
|
|
NUM_CORES := $(NUM_CORES), \
|
|
MEMORY_SIZE := $(MEMORY_SIZE), \
|
|
include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \
|
|
TEST_OPTS_JCOV := $(TEST_OPTS_JCOV), \
|
|
$(CUSTOM_NEW_SPEC_LINE), \
|
|
)
|
|
|
|
################################################################################
|
|
# The run-test-prebuilt target
|
|
################################################################################
|
|
|
|
SPEC := $(NEW_SPEC)
|
|
|
|
default: all
|
|
|
|
test-prebuilt:
|
|
# Need to make sure the failure logs output dir exists since
|
|
# ExecuteWithLog is called in RunTests.gmk. The PrepareFailureLogs macro
|
|
# is unfortunately not available at this point.
|
|
$(call MakeDir, $(MAKESUPPORT_OUTPUTDIR)/failure-logs)
|
|
@$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error
|
|
# The lazy initialization of the cache file in FindTests.gmk does not
|
|
# always work with RunTests.gmk. To guarantee that the jtreg test groups
|
|
# are always found and parsed, call FindTests.gmk stand alone once
|
|
# before calling RunTests.gmk.
|
|
@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/common/FindTests.gmk \
|
|
SPEC=$(SPEC) FINDTESTS_STAND_ALONE=true
|
|
@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \
|
|
TEST="$(TEST)"
|
|
|
|
test-prebuilt-with-exit-code: test-prebuilt
|
|
@if test -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error ; then \
|
|
exit 1 ; \
|
|
fi
|
|
|
|
all: test-prebuilt
|
|
|
|
.PHONY: default all test-prebuilt
|