1 # 2 # Copyright (c) 2017, 2018, 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 variable 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 # If MKDIR, create the default directory 57 define SetupVariable 58 ifeq ($$($1), ) 59 ifeq ($2, ) 60 $$(info Error: Prebuilt variable $1 is missing, needed for run-tests-prebuilt) 61 $$(error Cannot continue.) 62 else ifeq ($2, OPTIONAL) 63 ifneq ($$(findstring $$(LOG), info debug trace), ) 64 $$(info Prebuilt variable $1 is not provided) 65 endif 66 else 67 ifneq ($$(findstring $$(LOG), info debug trace), ) 68 $$(info Prebuilt variable $1=$2 (default value)) 69 endif 70 $1:=$2 71 endif 72 else 73 ifneq ($$(findstring $$(LOG), info debug trace), ) 74 $$(info Prebuilt variable $1=$$($1)) 75 endif 76 endif 77 # If $1 has a value (is not optional), and $3 is not set (to NO_CHECK), 78 # and if wildcard is empty, then complain that the file is missing. 79 ifeq ($3, MKDIR) 80 ifneq ($$(findstring $$(LOG), info debug trace), ) 81 $$(info Creating directory for $1) 82 endif 83 $$(shell mkdir -p $$($1)) 84 else ifneq ($3, NO_CHECK) 85 ifeq ($$(strip $$(if $$($1), , OPTIONAL) $$(wildcard $$($1))), ) 86 $$(info Error: Prebuilt variable $1 points to missing file/directory:) 87 $$(info '$$($1)') 88 $$(error Cannot continue.) 89 endif 90 endif 91 endef 92 93 # Create an ephemeral spec file 94 # 95 # $1: The output file name 96 # $2..$N: The lines to output to the file 97 define CreateNewSpec 98 $(if $(strip $(31)), \ 99 $(error Internal makefile error: \ 100 Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \ 101 ) \ 102 $(shell $(RM) $1) \ 103 $(foreach i, $(call sequence, 2, 30), \ 104 $(if $(strip $($i)), \ 105 $(call AppendFile, $(strip $($i)), $1) \ 106 ) \ 107 ) 108 endef 109 110 ################################################################################ 111 # Check input and setup basic buildsystem support 112 ################################################################################ 113 114 # Verify that user has given correct additional input. 115 116 # These variables are absolutely necessary 117 $(eval $(call SetupVariable,OUTPUTDIR,$(TOPDIR)/build/run-test-prebuilt,MKDIR)) 118 $(eval $(call SetupVariable,BOOT_JDK)) 119 $(eval $(call SetupVariable,JT_HOME)) 120 121 # These can have default values based on the ones above 122 $(eval $(call SetupVariable,JDK_IMAGE_DIR,$(OUTPUTDIR)/images/jdk)) 123 $(eval $(call SetupVariable,TEST_IMAGE_DIR,$(OUTPUTDIR)/images/test)) 124 $(eval $(call SetupVariable,SYMBOLS_IMAGE_DIR,$(OUTPUTDIR)/images/symbols,NO_CHECK)) 125 126 # Provide default values for tools that we need 127 $(eval $(call SetupVariable,MAKE,make,NO_CHECK)) 128 $(eval $(call SetupVariable,BASH,bash,NO_CHECK)) 129 130 # Check optional variables 131 $(eval $(call SetupVariable,JIB_JAR,OPTIONAL)) 132 133 # Now that we have verified that we have the required variables available, we 134 # can include the prebuilt spec file ourselves, without an ephemeral spec 135 # wrapper. This is required so we can include MakeBase which is needed for 136 # CreateNewSpec. 137 HAS_SPEC := 138 include $(TOPDIR)/make/InitSupport.gmk 139 140 $(eval $(call CheckDeprecatedEnvironment)) 141 $(eval $(call CheckInvalidMakeFlags)) 142 $(eval $(call ParseLogLevel)) 143 144 SPEC := $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk 145 include $(SPEC) 146 include $(TOPDIR)/make/common/MakeBase.gmk 147 148 ################################################################################ 149 # Determine what platform we're running on 150 ################################################################################ 151 UNAME := uname 152 153 # Get OS name from uname (Cygwin inexplicably adds _NT-x.x) 154 UNAME_OS := $(shell $(UNAME) -s | $(CUT) -f1 -d_) 155 156 ifeq ($(UNAME_OS), CYGWIN) 157 OPENJDK_TARGET_OS := windows 158 OPENJDK_TARGET_OS_TYPE := windows 159 OPENJDK_TARGET_OS_ENV := windows.cygwin 160 else 161 OPENJDK_TARGET_OS_TYPE:=unix 162 ifeq ($(UNAME_OS), Linux) 163 OPENJDK_TARGET_OS := linux 164 else ifeq ($(UNAME_OS), Darwin) 165 OPENJDK_TARGET_OS := macosx 166 else ifeq ($(UNAME_OS), SunOS) 167 OPENJDK_TARGET_OS := solaris 168 else 169 OPENJDK_TARGET_OS := $(UNAME_OS) 170 endif 171 OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS) 172 endif 173 174 # Assume little endian unless otherwise specified 175 OPENJDK_TARGET_CPU_ENDIAN := little 176 177 ifeq ($(OPENJDK_TARGET_OS), solaris) 178 # On solaris, use uname -p 179 UNAME_CPU := $(shell $(UNAME) -p) 180 # Assume 64-bit platform 181 OPENJDK_TARGET_CPU_BITS := 64 182 ifeq ($(UNAME_CPU), i386) 183 OPENJDK_TARGET_CPU := x86_64 184 else ifeq ($(UNAME_CPU), sparc) 185 OPENJDK_TARGET_CPU := sparcv9 186 OPENJDK_TARGET_CPU_ENDIAN := big 187 else 188 OPENJDK_TARGET_CPU := $(UNAME_CPU) 189 endif 190 else 191 # ... all others use uname -m 192 UNAME_CPU := $(shell $(UNAME) -m) 193 ifeq ($(UNAME_CPU), i686) 194 OPENJDK_TARGET_CPU := x86 195 OPENJDK_TARGET_CPU_BITS := 32 196 else 197 # Assume all others are 64-bit. We use the same CPU name as uname for 198 # at least x86_64 and aarch64. 199 OPENJDK_TARGET_CPU := $(UNAME_CPU) 200 OPENJDK_TARGET_CPU_BITS := 64 201 endif 202 endif 203 204 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU) 205 ifeq ($(OPENJDK_TARGET_CPU), x86_64) 206 OPENJDK_TARGET_CPU_ARCH := x86 207 else ifeq ($(OPENJDK_TARGET_CPU), sparcv9) 208 OPENJDK_TARGET_CPU_ARCH := sparc 209 endif 210 211 ifeq ($(OPENJDK_TARGET_OS), windows) 212 ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), ) 213 $(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)') 214 $(error Cannot continue.) 215 endif 216 FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c 217 PATH_SEP:=; 218 else 219 FIXPATH := 220 PATH_SEP:=: 221 endif 222 223 # Check number of cores and memory in MB 224 ifeq ($(OPENJDK_TARGET_OS), linux) 225 NUM_CORES := $(shell $(CAT) /proc/cpuinfo | $(GREP) -c processor) 226 MEMORY_SIZE := $(shell \ 227 $(EXPR) `$(CAT) /proc/meminfo | $(GREP) MemTotal | $(AWK) '{print $$2}'` / 1024 \ 228 ) 229 else ifeq ($(OPENJDK_TARGET_OS), macosx) 230 NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) 231 MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024) 232 else ifeq ($(OPENJDK_TARGET_OS), solaris) 233 NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | $(GREP) -c on-line) 234 MEMORY_SIZE := $(shell \ 235 /usr/sbin/prtconf 2> /dev/null | $(GREP) "^Memory [Ss]ize" | $(AWK) '{print $$3}' \ 236 ) 237 else ifeq ($(OPENJDK_TARGET_OS), windows) 238 NUM_CORES := $(NUMBER_OF_PROCESSORS) 239 MEMORY_SIZE := $(shell \ 240 $(EXPR) `wmic computersystem get totalphysicalmemory -value | $(GREP) = \ 241 | $(CUT) -d "=" -f 2-` / 1024 / 1024 \ 242 ) 243 endif 244 ifeq ($(NUM_CORES), ) 245 $(warn Could not find number of CPUs, assuming 1) 246 NUM_CORES := 1 247 endif 248 ifeq ($(MEMORY_SIZE), ) 249 $(warn Could not find memory size, assuming 1024 MB) 250 MEMORY_SIZE := 1024 251 endif 252 253 # Setup LD for AOT support 254 ifneq ($(DEVKIT_HOME), ) 255 ifeq ($(OPENJDK_TARGET_OS), windows) 256 LD := $(DEVKIT_HOME)/VC/bin/x64/link 257 LIBRARY_PREFIX := 258 SHARED_LIBRARY_SUFFIX := .dll 259 EXE_SUFFIX := .exe 260 else ifeq ($(OPENJDK_TARGET_OS), linux) 261 LD := $(DEVKIT_HOME)/bin/ld 262 LIBRARY_PREFIX := lib 263 SHARED_LIBRARY_SUFFIX := .so 264 EXE_SUFFIX := 265 else ifeq ($(OPENJDK_TARGET_OS), macosx) 266 LD := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld 267 LIBRARY_PREFIX := lib 268 SHARED_LIBRARY_SUFFIX := .dylib 269 EXE_SUFFIX := 270 else ifeq ($(OPENJDK_TARGET_OS), solaris) 271 # Prefer system linker for AOT on Solaris. 272 LD := ld 273 LIBRARY_PREFIX := lib 274 SHARED_LIBRARY_SUFFIX := .so 275 EXE_SUFFIX := 276 endif 277 else 278 LD := ld 279 endif 280 281 ################################################################################ 282 # Generate the ephemeral spec file 283 ################################################################################ 284 285 # Now we can include additional custom support. 286 # This might define CUSTOM_NEW_SPEC_LINE 287 ifneq ($(CUSTOM_MAKE_DIR), ) 288 include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk 289 endif 290 291 NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk 292 293 $(call CreateNewSpec, $(NEW_SPEC), \ 294 # Generated file -- do not edit!, \ 295 SPEC := $(NEW_SPEC), \ 296 TOPDIR := $(TOPDIR), \ 297 OUTPUTDIR := $(OUTPUTDIR), \ 298 BOOT_JDK := $(BOOT_JDK), \ 299 JT_HOME := $(JT_HOME), \ 300 JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \ 301 TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \ 302 SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \ 303 MAKE := $(MAKE), \ 304 BASH := $(BASH), \ 305 JIB_JAR := $(JIB_JAR), \ 306 FIXPATH := $(FIXPATH), \ 307 PATH_SEP := $(PATH_SEP), \ 308 OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \ 309 OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \ 310 OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \ 311 OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \ 312 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \ 313 OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \ 314 OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \ 315 NUM_CORES := $(NUM_CORES), \ 316 MEMORY_SIZE := $(MEMORY_SIZE), \ 317 LD := $(LD), \ 318 LIBRARY_PREFIX := $(LIBRARY_PREFIX), \ 319 SHARED_LIBRARY_SUFFIX := $(SHARED_LIBRARY_SUFFIX), \ 320 EXE_SUFFIX := $(EXE_SUFFIX), \ 321 include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \ 322 $(CUSTOM_NEW_SPEC_LINE), \ 323 ) 324 325 ################################################################################ 326 # The run-test-prebuilt target 327 ################################################################################ 328 329 SPEC := $(NEW_SPEC) 330 331 default: all 332 333 run-test-prebuilt: 334 @$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error 335 @cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \ 336 TEST="$(TEST)" 337 338 all: run-test-prebuilt 339 340 .PHONY: default all