Skip to content

Commit

Permalink
8193061: Add run-test-prebuilt functionality
Browse files Browse the repository at this point in the history
Reviewed-by: erikj
  • Loading branch information
ihse committed Dec 6, 2017
1 parent bfda854 commit 88c743f
Show file tree
Hide file tree
Showing 4 changed files with 477 additions and 1 deletion.
9 changes: 8 additions & 1 deletion make/Help.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,13 @@ print-configurations:
# We need a dummy rule otherwise make will complain
@true

ALL_GLOBAL_TARGETS := help print-configurations
# This is not really a "help" target, but it is a global target, and those are
# all contained in this file.
run-test-prebuilt:
@( cd $(topdir) && \
$(MAKE) --no-print-directory -r -R -I make/common/ -f make/RunTestsPrebuilt.gmk \
run-test-prebuilt TEST="$(TEST)" )

ALL_GLOBAL_TARGETS := help print-configurations run-test-prebuilt

.PHONY: $(ALL_GLOBAL_TARGETS)
283 changes: 283 additions & 0 deletions make/RunTestsPrebuilt.gmk
Original file line number Diff line number Diff line change
@@ -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
Loading

0 comments on commit 88c743f

Please sign in to comment.