--- /dev/null 2017-11-09 09:28:37.261712036 +0100 +++ new/make/RunTestsPrebuilt.gmk 2017-12-05 21:14:30.366099836 +0100 @@ -0,0 +1,283 @@ +# +# Copyright (c) 2017, 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 argument +# $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 +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 ($$(strip $$(if $$($1), , OPTIONAL) $$(wildcard $$($1)) $3), ) + $$(info Error: Prebuilt variable $1 points to missing file/directory:) + $$(info '$$($1)') + $$(error Cannot continue.) + 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 $(26)), \ + $(error Internal makefile error: \ + Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \ + ) \ + $(shell $(RM) $1) \ + $(foreach i, $(call sequence, 2, 25), \ + $(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)) +$(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)) + +# 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 + OPENJDK_TARGET_OS_TYPE:=unix + ifeq ($(UNAME_OS), Linux) + OPENJDK_TARGET_OS := linux + else ifeq ($(UNAME_OS), Darwin) + OPENJDK_TARGET_OS := macosx + else ifeq ($(UNAME_OS), SunOS) + OPENJDK_TARGET_OS := solaris + else + OPENJDK_TARGET_OS := $(UNAME_OS) + endif + OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS) +endif + +# Assume little endian unless otherwise specified +OPENJDK_TARGET_CPU_ENDIAN := little + +ifeq ($(OPENJDK_TARGET_OS), solaris) + # On solaris, use uname -p + UNAME_CPU := $(shell $(UNAME) -p) + # Assume 64-bit platform + OPENJDK_TARGET_CPU_BITS := 64 + ifeq ($(UNAME_CPU), i386) + OPENJDK_TARGET_CPU := x86_64 + else ifeq ($(UNAME_CPU), sparc) + OPENJDK_TARGET_CPU := sparcv9 + OPENJDK_TARGET_CPU_ENDIAN := big + else + OPENJDK_TARGET_CPU := $(UNAME_CPU) + endif +else + # ... all others use uname -m + 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 +endif + +OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU) +ifeq ($(OPENJDK_TARGET_CPU), x86_64) + OPENJDK_TARGET_CPU_ARCH := x86 +else ifeq ($(OPENJDK_TARGET_CPU), sparcv9) + OPENJDK_TARGET_CPU_ARCH := sparc +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), ) + $$(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)') + $$(error Cannot continue.) + endif + FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c + PATH_SEP:=; +else + FIXPATH := + PATH_SEP:=: +endif + +# Check number of cores +ifeq ($(OPENJDK_TARGET_OS), linux) + NUM_CORES := $(shell $(CAT) /proc/cpuinfo | $(GREP) -c processor) +else ifeq ($(OPENJDK_TARGET_OS), macosx) + NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) +else ifeq ($(OPENJDK_TARGET_OS), solaris) + NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | $(GREP) -c on-line) +else ifeq ($(OPENJDK_TARGET_OS), windows) + NUM_CORES := $(NUMBER_OF_PROCESSORS) +else + NUM_CORES := 1 +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), \ + JT_HOME := $(JT_HOME), \ + JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \ + TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \ + MAKE := $(MAKE), \ + BASH := $(BASH), \ + JIB_JAR := $(JIB_JAR), \ + FIXPATH := $(FIXPATH), \ + PATH_SEP := $(PATH_SEP), \ + 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), \ + include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \ + $(CUSTOM_NEW_SPEC_LINE), \ +) + +################################################################################ +# The run-test-prebuilt target +################################################################################ + +SPEC := $(NEW_SPEC) + +default: all + +run-test-prebuilt: + @$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error + @cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \ + TEST="$(TEST)" + @if test -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error ; then \ + exit 1 ; \ + fi + +all: run-test-prebuilt + +.PHONY: default all