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 $(30)), \ 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, 29), \ 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 224 ifeq ($(OPENJDK_TARGET_OS), linux) 225 NUM_CORES := $(shell $(CAT) /proc/cpuinfo | $(GREP) -c processor) 226 else ifeq ($(OPENJDK_TARGET_OS), macosx) 227 NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu) 228 else ifeq ($(OPENJDK_TARGET_OS), solaris) 229 NUM_CORES := $(shell LC_MESSAGES=C /usr/sbin/psrinfo -v | $(GREP) -c on-line) 230 else ifeq ($(OPENJDK_TARGET_OS), windows) 231 NUM_CORES := $(NUMBER_OF_PROCESSORS) 232 endif 233 ifeq ($(NUM_CORES), ) 234 $(warn Could not find number of CPUs, assuming 1) 235 NUM_CORES := 1 236 endif 237 238 # Setup LD for AOT support 239 ifneq ($(DEVKIT_HOME), ) 240 ifeq ($(OPENJDK_TARGET_OS), windows) 241 LD := $(DEVKIT_HOME)/VC/bin/x64/link 242 LIBRARY_PREFIX := 243 SHARED_LIBRARY_SUFFIX := .dll 244 EXE_SUFFIX := .exe 245 else ifeq ($(OPENJDK_TARGET_OS), linux) 246 LD := $(DEVKIT_HOME)/bin/ld 247 LIBRARY_PREFIX := lib 248 SHARED_LIBRARY_SUFFIX := .so 249 EXE_SUFFIX := 250 else ifeq ($(OPENJDK_TARGET_OS), macosx) 251 LD := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld 252 LIBRARY_PREFIX := lib 253 SHARED_LIBRARY_SUFFIX := .dylib 254 EXE_SUFFIX := 255 else ifeq ($(OPENJDK_TARGET_OS), solaris) 256 # Prefer system linker for AOT on Solaris. 257 LD := ld 258 LIBRARY_PREFIX := lib 259 SHARED_LIBRARY_SUFFIX := .so 260 EXE_SUFFIX := 261 endif 262 else 263 LD := ld 264 endif 265 266 ################################################################################ 267 # Generate the ephemeral spec file 268 ################################################################################ 269 270 # Now we can include additional custom support. 271 # This might define CUSTOM_NEW_SPEC_LINE 272 ifneq ($(CUSTOM_MAKE_DIR), ) 273 include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk 274 endif 275 276 NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk 277 278 $(call CreateNewSpec, $(NEW_SPEC), \ 279 # Generated file -- do not edit!, \ 280 SPEC := $(NEW_SPEC), \ 281 TOPDIR := $(TOPDIR), \ 282 OUTPUTDIR := $(OUTPUTDIR), \ 283 BOOT_JDK := $(BOOT_JDK), \ 284 JT_HOME := $(JT_HOME), \ 285 JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \ 286 TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \ 287 SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \ 288 MAKE := $(MAKE), \ 289 BASH := $(BASH), \ 290 JIB_JAR := $(JIB_JAR), \ 291 FIXPATH := $(FIXPATH), \ 292 PATH_SEP := $(PATH_SEP), \ 293 OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \ 294 OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \ 295 OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \ 296 OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \ 297 OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \ 298 OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \ 299 OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \ 300 NUM_CORES := $(NUM_CORES), \ 301 LD := $(LD), \ 302 LIBRARY_PREFIX := $(LIBRARY_PREFIX), \ 303 SHARED_LIBRARY_SUFFIX := $(SHARED_LIBRARY_SUFFIX), \ 304 EXE_SUFFIX := $(EXE_SUFFIX), \ 305 include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \ 306 $(CUSTOM_NEW_SPEC_LINE), \ 307 ) 308 309 ################################################################################ 310 # The run-test-prebuilt target 311 ################################################################################ 312 313 SPEC := $(NEW_SPEC) 314 315 default: all 316 317 run-test-prebuilt: 318 @$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error 319 @cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \ 320 TEST="$(TEST)" 321 322 all: run-test-prebuilt 323 324 .PHONY: default all