| # |
| # 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 |