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 -f $1) \ 95 $(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, \ 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 other user 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