1 # 2 # Copyright (c) 2017, 2020, 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 $(33)), \ 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, 32), \ 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 167 OPENJDK_TARGET_OS := $(UNAME_OS) 168 endif 169 OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS) 170 endif 171 172 # Assume little endian unless otherwise specified 173 OPENJDK_TARGET_CPU_ENDIAN := little 174 175 UNAME_CPU := $(shell $(UNAME) -m) 176 ifeq ($(UNAME_CPU), i686) 177 OPENJDK_TARGET_CPU := x86 178 OPENJDK_TARGET_CPU_BITS := 32 179 else 180 # Assume all others are 64-bit. We use the same CPU name as uname for 181 # at least x86_64 and aarch64. 182 OPENJDK_TARGET_CPU := $(UNAME_CPU) 183 OPENJDK_TARGET_CPU_BITS := 64 184 endif 185 186 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU) 187 ifeq ($(OPENJDK_TARGET_CPU), x86_64) 188 OPENJDK_TARGET_CPU_ARCH := x86 189 endif 190 191 ifeq ($(OPENJDK_TARGET_OS), windows) 192 ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), ) 193 $(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)') 194 $(error Cannot continue.) 195 endif 196 FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c 197 PATH_SEP:=; 198 else 199 FIXPATH := 200 PATH_SEP:=: 201 endif 202 203 # Check number of cores and memory in MB 204 ifeq ($(OPENJDK_TARGET_OS), linux) 205 NUM_CORES := $(shell $(CAT) /proc/cpuinfo | $(GREP) -c processor) 206 MEMORY_SIZE := $(shell \ 207 $(EXPR) `$(CAT) /proc/meminfo | $(GREP) MemTotal | $(AWK) '{print $$2}'` / 1024 \ 208 ) 209 else ifeq ($(OPENJDK_TARGET_OS), macosx) 210 NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) 211 MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024) 212 else ifeq ($(OPENJDK_TARGET_OS), windows) 213 NUM_CORES := $(NUMBER_OF_PROCESSORS) 214 MEMORY_SIZE := $(shell \ 215 $(EXPR) `wmic computersystem get totalphysicalmemory -value \ 216 | $(GREP) = | $(SED) 's/\\r//g' \ 217 | $(CUT) -d "=" -f 2-` / 1024 / 1024 \ 218 ) 219 endif 220 ifeq ($(NUM_CORES), ) 221 $(warn Could not find number of CPUs, assuming 1) 222 NUM_CORES := 1 223 endif 224 ifeq ($(MEMORY_SIZE), ) 225 $(warn Could not find memory size, assuming 1024 MB) 226 MEMORY_SIZE := 1024 227 endif 228 229 # Setup LD for AOT support 230 ifneq ($(DEVKIT_HOME), ) 231 ifeq ($(OPENJDK_TARGET_OS), windows) 232 LD_JAOTC := $(DEVKIT_HOME)/VC/bin/x64/link.exe 233 LIBRARY_PREFIX := 234 SHARED_LIBRARY_SUFFIX := .dll 235 else ifeq ($(OPENJDK_TARGET_OS), linux) 236 LD_JAOTC := $(DEVKIT_HOME)/bin/ld 237 LIBRARY_PREFIX := lib 238 SHARED_LIBRARY_SUFFIX := .so 239 else ifeq ($(OPENJDK_TARGET_OS), macosx) 240 LD_JAOTC := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld 241 LIBRARY_PREFIX := lib 242 SHARED_LIBRARY_SUFFIX := .dylib 243 endif 244 else 245 LD := ld 246 endif 247 248 ifneq ($(wildcard $(JDK_IMAGE_DIR)/template.xml), ) 249 TEST_OPTS_JCOV := true 250 JCOV_IMAGE_DIR := $(JDK_IMAGE_DIR) 251 else 252 TEST_OPTS_JCOV := false 253 JCOV_IMAGE_DIR := 254 endif 255 256 ################################################################################ 257 # Generate the ephemeral spec file 258 ################################################################################ 259 260 # Now we can include additional custom support. 261 # This might define CUSTOM_NEW_SPEC_LINE 262 ifneq ($(CUSTOM_MAKE_DIR), ) 263 include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk 264 endif 265 266 NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk 267 268 $(call CreateNewSpec, $(NEW_SPEC), \ 269 # Generated file -- do not edit!, \ 270 SPEC := $(NEW_SPEC), \ 271 TOPDIR := $(TOPDIR), \ 272 OUTPUTDIR := $(OUTPUTDIR), \ 273 BOOT_JDK := $(BOOT_JDK), \ 274 JT_HOME := $(JT_HOME), \ 275 JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \ 276 JCOV_IMAGE_DIR := $(JCOV_IMAGE_DIR), \ 277 TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \ 278 SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \ 279 MAKE := $(MAKE), \ 280 BASH := $(BASH), \ 281 JIB_JAR := $(JIB_JAR), \ 282 FIXPATH := $(FIXPATH), \ 283 PATH_SEP := $(PATH_SEP), \ 284 OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \ 285 OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \ 286 OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \ 287 OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \ 288 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \ 289 OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \ 290 OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \ 291 NUM_CORES := $(NUM_CORES), \ 292 MEMORY_SIZE := $(MEMORY_SIZE), \ 293 LD_JAOTC := $(LD_JAOTC), \ 294 LIBRARY_PREFIX := $(LIBRARY_PREFIX), \ 295 SHARED_LIBRARY_SUFFIX := $(SHARED_LIBRARY_SUFFIX), \ 296 include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \ 297 TEST_OPTS_JCOV := $(TEST_OPTS_JCOV), \ 298 $(CUSTOM_NEW_SPEC_LINE), \ 299 ) 300 301 ################################################################################ 302 # The run-test-prebuilt target 303 ################################################################################ 304 305 SPEC := $(NEW_SPEC) 306 307 default: all 308 309 test-prebuilt: 310 # Need to make sure the failure logs output dir exists since 311 # ExecuteWithLog is called in RunTests.gmk. The PrepareFailureLogs macro 312 # is unfortunately not available at this point. 313 $(call MakeDir, $(MAKESUPPORT_OUTPUTDIR)/failure-logs) 314 @$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error 315 # The lazy initialization of the cache file in FindTests.gmk does not 316 # always work with RunTests.gmk. To guarantee that the jtreg test groups 317 # are always found and parsed, call FindTests.gmk stand alone once 318 # before calling RunTests.gmk. 319 @cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/common/FindTests.gmk \ 320 SPEC=$(SPEC) FINDTESTS_STAND_ALONE=true 321 @cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \ 322 TEST="$(TEST)" 323 324 all: test-prebuilt 325 326 .PHONY: default all test-prebuilt