# # 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 -f $1) \ $(foreach i, 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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 other user 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