make/RunTestsPrebuilt.gmk
changeset 48078 94a38ebbc9bb
child 49147 af37d9997bd6
child 55967 e2c47e2db0a5
equal deleted inserted replaced
48077:2a749b997a0d 48078:94a38ebbc9bb
       
     1 #
       
     2 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
       
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4 #
       
     5 # This code is free software; you can redistribute it and/or modify it
       
     6 # under the terms of the GNU General Public License version 2 only, as
       
     7 # published by the Free Software Foundation.  Oracle designates this
       
     8 # particular file as subject to the "Classpath" exception as provided
       
     9 # by Oracle in the LICENSE file that accompanied this code.
       
    10 #
       
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14 # version 2 for more details (a copy is included in the LICENSE file that
       
    15 # accompanied this code).
       
    16 #
       
    17 # You should have received a copy of the GNU General Public License version
       
    18 # 2 along with this work; if not, write to the Free Software Foundation,
       
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20 #
       
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22 # or visit www.oracle.com if you need additional information or have any
       
    23 # questions.
       
    24 #
       
    25 
       
    26 ################################################################################
       
    27 # Initial bootstrapping, copied and stripped down from Makefile and Init.gmk
       
    28 ################################################################################
       
    29 
       
    30 # In Cygwin, the MAKE variable gets prepended with the current directory if the
       
    31 # make executable is called using a Windows mixed path (c:/cygwin/bin/make.exe).
       
    32 ifneq ($(findstring :, $(MAKE)), )
       
    33   export MAKE := $(patsubst $(CURDIR)%, %, $(patsubst $(CURDIR)/%, %, $(MAKE)))
       
    34 endif
       
    35 
       
    36 # Locate this Makefile
       
    37 ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))),)
       
    38   makefile_path := $(CURDIR)/$(strip $(lastword $(MAKEFILE_LIST)))
       
    39 else
       
    40   makefile_path := $(lastword $(MAKEFILE_LIST))
       
    41 endif
       
    42 TOPDIR := $(strip $(patsubst %/make/, %, $(dir $(makefile_path))))
       
    43 
       
    44 ################################################################################
       
    45 # Functions
       
    46 ################################################################################
       
    47 
       
    48 # Setup a required or optional variable, and/or check that it is properly
       
    49 # given.
       
    50 # Note: No spaces are allowed around the arguments.
       
    51 #
       
    52 # $1: The name of the argument
       
    53 # $2: The default value, if any, or OPTIONAL (do not provide a default but
       
    54 #     do not exit if it is missing)
       
    55 # $3: If NO_CHECK, disable checking for target file/directory existence
       
    56 define SetupVariable
       
    57   ifeq ($$($1), )
       
    58     ifeq ($2, )
       
    59       $$(info Error: Prebuilt variable $1 is missing, needed for run-tests-prebuilt)
       
    60       $$(error Cannot continue.)
       
    61     else ifeq ($2, OPTIONAL)
       
    62       ifneq ($$(findstring $$(LOG), info debug trace), )
       
    63         $$(info Prebuilt variable $1 is not provided)
       
    64       endif
       
    65     else
       
    66       ifneq ($$(findstring $$(LOG), info debug trace), )
       
    67         $$(info Prebuilt variable $1=$2 (default value))
       
    68       endif
       
    69       $1:=$2
       
    70     endif
       
    71   else
       
    72     ifneq ($$(findstring $$(LOG), info debug trace), )
       
    73       $$(info Prebuilt variable $1=$$($1))
       
    74     endif
       
    75   endif
       
    76   # If $1 has a value (is not optional), and $3 is not set (to NO_CHECK),
       
    77   # and if wildcard is empty, then complain that the file is missing.
       
    78   ifeq ($$(strip $$(if $$($1), , OPTIONAL) $$(wildcard $$($1)) $3), )
       
    79     $$(info Error: Prebuilt variable $1 points to missing file/directory:)
       
    80     $$(info '$$($1)')
       
    81     $$(error Cannot continue.)
       
    82   endif
       
    83 endef
       
    84 
       
    85 # Create an ephemeral spec file
       
    86 #
       
    87 # $1: The output file name
       
    88 # $2..$N: The lines to output to the file
       
    89 define CreateNewSpec
       
    90   $(if $(strip $(26)), \
       
    91     $(error Internal makefile error: \
       
    92       Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \
       
    93   ) \
       
    94   $(shell $(RM) $1) \
       
    95   $(foreach i, $(call sequence, 2, 25), \
       
    96     $(if $(strip $($i)), \
       
    97       $(call AppendFile, $(strip $($i)), $1) \
       
    98     ) \
       
    99   )
       
   100 endef
       
   101 
       
   102 ################################################################################
       
   103 # Check input and setup basic buildsystem support
       
   104 ################################################################################
       
   105 
       
   106 # Verify that user has given correct additional input.
       
   107 
       
   108 # These variables are absolutely necessary
       
   109 $(eval $(call SetupVariable,OUTPUTDIR))
       
   110 $(eval $(call SetupVariable,BOOT_JDK))
       
   111 $(eval $(call SetupVariable,JT_HOME))
       
   112 
       
   113 # These can have default values based on the ones above
       
   114 $(eval $(call SetupVariable,JDK_IMAGE_DIR,$(OUTPUTDIR)/images/jdk))
       
   115 $(eval $(call SetupVariable,TEST_IMAGE_DIR,$(OUTPUTDIR)/images/test))
       
   116 
       
   117 # Provide default values for tools that we need
       
   118 $(eval $(call SetupVariable,MAKE,make,NO_CHECK))
       
   119 $(eval $(call SetupVariable,BASH,bash,NO_CHECK))
       
   120 
       
   121 # Check optional variables
       
   122 $(eval $(call SetupVariable,JIB_JAR,OPTIONAL))
       
   123 
       
   124 # Now that we have verified that we have the required variables available, we
       
   125 # can include the prebuilt spec file ourselves, without an ephemeral spec
       
   126 # wrapper. This is required so we can include MakeBase which is needed for
       
   127 # CreateNewSpec.
       
   128 HAS_SPEC :=
       
   129 include $(TOPDIR)/make/InitSupport.gmk
       
   130 
       
   131 $(eval $(call CheckDeprecatedEnvironment))
       
   132 $(eval $(call CheckInvalidMakeFlags))
       
   133 $(eval $(call ParseLogLevel))
       
   134 
       
   135 SPEC := $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk
       
   136 include $(SPEC)
       
   137 include $(TOPDIR)/make/common/MakeBase.gmk
       
   138 
       
   139 ################################################################################
       
   140 # Determine what platform we're running on
       
   141 ################################################################################
       
   142 UNAME := uname
       
   143 
       
   144 # Get OS name from uname (Cygwin inexplicably adds _NT-x.x)
       
   145 UNAME_OS := $(shell $(UNAME) -s | $(CUT) -f1 -d_)
       
   146 
       
   147 ifeq ($(UNAME_OS), CYGWIN)
       
   148   OPENJDK_TARGET_OS := windows
       
   149   OPENJDK_TARGET_OS_TYPE := windows
       
   150   OPENJDK_TARGET_OS_ENV := windows.cygwin
       
   151 else
       
   152   OPENJDK_TARGET_OS_TYPE:=unix
       
   153   ifeq ($(UNAME_OS), Linux)
       
   154     OPENJDK_TARGET_OS := linux
       
   155   else ifeq ($(UNAME_OS), Darwin)
       
   156     OPENJDK_TARGET_OS := macosx
       
   157   else ifeq ($(UNAME_OS), SunOS)
       
   158     OPENJDK_TARGET_OS := solaris
       
   159   else
       
   160     OPENJDK_TARGET_OS := $(UNAME_OS)
       
   161   endif
       
   162   OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS)
       
   163 endif
       
   164 
       
   165 # Assume little endian unless otherwise specified
       
   166 OPENJDK_TARGET_CPU_ENDIAN := little
       
   167 
       
   168 ifeq ($(OPENJDK_TARGET_OS), solaris)
       
   169   # On solaris, use uname -p
       
   170   UNAME_CPU := $(shell $(UNAME) -p)
       
   171   # Assume 64-bit platform
       
   172   OPENJDK_TARGET_CPU_BITS := 64
       
   173   ifeq ($(UNAME_CPU), i386)
       
   174     OPENJDK_TARGET_CPU := x86_64
       
   175   else ifeq ($(UNAME_CPU), sparc)
       
   176     OPENJDK_TARGET_CPU := sparcv9
       
   177     OPENJDK_TARGET_CPU_ENDIAN := big
       
   178   else
       
   179     OPENJDK_TARGET_CPU := $(UNAME_CPU)
       
   180   endif
       
   181 else
       
   182   # ... all others use uname -m
       
   183   UNAME_CPU := $(shell $(UNAME) -m)
       
   184   ifeq ($(UNAME_CPU), i686)
       
   185     OPENJDK_TARGET_CPU := x86
       
   186     OPENJDK_TARGET_CPU_BITS := 32
       
   187   else
       
   188     # Assume all others are 64-bit. We use the same CPU name as uname for
       
   189     # at least x86_64 and aarch64.
       
   190     OPENJDK_TARGET_CPU := $(UNAME_CPU)
       
   191     OPENJDK_TARGET_CPU_BITS := 64
       
   192   endif
       
   193 endif
       
   194 
       
   195 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU)
       
   196 ifeq ($(OPENJDK_TARGET_CPU), x86_64)
       
   197   OPENJDK_TARGET_CPU_ARCH := x86
       
   198 else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
       
   199   OPENJDK_TARGET_CPU_ARCH := sparc
       
   200 endif
       
   201 
       
   202 ifeq ($(OPENJDK_TARGET_OS), windows)
       
   203   ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), )
       
   204     $$(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)')
       
   205     $$(error Cannot continue.)
       
   206   endif
       
   207   FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c
       
   208   PATH_SEP:=;
       
   209 else
       
   210   FIXPATH :=
       
   211   PATH_SEP:=:
       
   212 endif
       
   213 
       
   214 # Check number of cores
       
   215 ifeq ($(OPENJDK_TARGET_OS), linux)
       
   216     NUM_CORES := $(shell $(CAT) /proc/cpuinfo  | $(GREP) -c processor)
       
   217 else ifeq ($(OPENJDK_TARGET_OS), macosx)
       
   218     NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
       
   219 else ifeq ($(OPENJDK_TARGET_OS), solaris)
       
   220     NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | $(GREP) -c on-line)
       
   221 else ifeq ($(OPENJDK_TARGET_OS), windows)
       
   222     NUM_CORES := $(NUMBER_OF_PROCESSORS)
       
   223 else
       
   224     NUM_CORES := 1
       
   225 endif
       
   226 
       
   227 ################################################################################
       
   228 # Generate the ephemeral spec file
       
   229 ################################################################################
       
   230 
       
   231 # Now we can include additional custom support.
       
   232 # This might define CUSTOM_NEW_SPEC_LINE
       
   233 ifneq ($(CUSTOM_MAKE_DIR), )
       
   234   include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk
       
   235 endif
       
   236 
       
   237 NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk
       
   238 
       
   239 $(call CreateNewSpec, $(NEW_SPEC), \
       
   240     # Generated file -- do not edit!, \
       
   241     SPEC := $(NEW_SPEC), \
       
   242     TOPDIR := $(TOPDIR), \
       
   243     OUTPUTDIR := $(OUTPUTDIR), \
       
   244     BOOT_JDK := $(BOOT_JDK), \
       
   245     JT_HOME := $(JT_HOME), \
       
   246     JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \
       
   247     TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \
       
   248     MAKE := $(MAKE), \
       
   249     BASH := $(BASH), \
       
   250     JIB_JAR := $(JIB_JAR), \
       
   251     FIXPATH := $(FIXPATH), \
       
   252     PATH_SEP := $(PATH_SEP), \
       
   253     OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \
       
   254     OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \
       
   255     OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \
       
   256     OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \
       
   257     OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \
       
   258     OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \
       
   259     OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \
       
   260     NUM_CORES := $(NUM_CORES), \
       
   261     include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \
       
   262     $(CUSTOM_NEW_SPEC_LINE), \
       
   263 )
       
   264 
       
   265 ################################################################################
       
   266 # The run-test-prebuilt target
       
   267 ################################################################################
       
   268 
       
   269 SPEC := $(NEW_SPEC)
       
   270 
       
   271 default: all
       
   272 
       
   273 run-test-prebuilt:
       
   274 	@$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error
       
   275 	@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \
       
   276 	    TEST="$(TEST)"
       
   277 	@if test -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error ; then \
       
   278 	  exit 1 ; \
       
   279 	fi
       
   280 
       
   281 all: run-test-prebuilt
       
   282 
       
   283 .PHONY: default all