#
# Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

################################################################################
# Initial bootstrapping, copied and stripped down from Makefile and Init.gmk
################################################################################

# In Cygwin, the MAKE variable gets prepended with the current directory if the
# make executable is called using a Windows mixed path (c:/cygwin/bin/make.exe).
ifneq ($(findstring :, $(MAKE)), )
  export MAKE := $(patsubst $(CURDIR)%, %, $(patsubst $(CURDIR)/%, %, $(MAKE)))
endif

# Locate this Makefile
ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))),)
  makefile_path := $(CURDIR)/$(strip $(lastword $(MAKEFILE_LIST)))
else
  makefile_path := $(lastword $(MAKEFILE_LIST))
endif
TOPDIR := $(strip $(patsubst %/make/, %, $(dir $(makefile_path))))

################################################################################
# Functions
################################################################################

# Setup a required or optional variable, and/or check that it is properly
# given.
# Note: No spaces are allowed around the arguments.
#
# $1: The name of the variable
# $2: The default value, if any, or OPTIONAL (do not provide a default but
#     do not exit if it is missing)
# $3: If NO_CHECK, disable checking for target file/directory existence
#     If MKDIR, create the default directory
define SetupVariable
  ifeq ($$($1), )
    ifeq ($2, )
      $$(info Error: Prebuilt variable $1 is missing, needed for run-tests-prebuilt)
      $$(error Cannot continue.)
    else ifeq ($2, OPTIONAL)
      ifneq ($$(findstring $$(LOG), info debug trace), )
        $$(info Prebuilt variable $1 is not provided)
      endif
    else
      ifneq ($$(findstring $$(LOG), info debug trace), )
        $$(info Prebuilt variable $1=$2 (default value))
      endif
      $1:=$2
    endif
  else
    ifneq ($$(findstring $$(LOG), info debug trace), )
      $$(info Prebuilt variable $1=$$($1))
    endif
  endif
  # If $1 has a value (is not optional), and $3 is not set (to NO_CHECK),
  # and if wildcard is empty, then complain that the file is missing.
  ifeq ($3, MKDIR)
    ifneq ($$(findstring $$(LOG), info debug trace), )
      $$(info Creating directory for $1)
    endif
    $$(shell mkdir -p $$($1))
  else ifneq ($3, NO_CHECK)
    ifeq ($$(strip $$(if $$($1), , OPTIONAL) $$(wildcard $$($1))), )
      $$(info Error: Prebuilt variable $1 points to missing file/directory:)
      $$(info '$$($1)')
      $$(error Cannot continue.)
    endif
  endif
endef

# Create an ephemeral spec file
#
# $1: The output file name
# $2..$N: The lines to output to the file
define CreateNewSpec
  $(if $(strip $(33)), \
    $(error Internal makefile error: \
      Too many arguments to macro, please update CreateNewSpec in RunTestsPrebuilt.gmk) \
  ) \
  $(shell $(RM) $1) \
  $(foreach i, $(call sequence, 2, 32), \
    $(if $(strip $($i)), \
      $(call AppendFile, $(strip $($i)), $1) \
    ) \
  )
endef

################################################################################
# Check input and setup basic buildsystem support
################################################################################

# Verify that user has given correct additional input.

# These variables are absolutely necessary
$(eval $(call SetupVariable,OUTPUTDIR,$(TOPDIR)/build/run-test-prebuilt,MKDIR))
$(eval $(call SetupVariable,BOOT_JDK))
$(eval $(call SetupVariable,JT_HOME))

# These can have default values based on the ones above
$(eval $(call SetupVariable,JDK_IMAGE_DIR,$(OUTPUTDIR)/images/jdk))
$(eval $(call SetupVariable,TEST_IMAGE_DIR,$(OUTPUTDIR)/images/test))
$(eval $(call SetupVariable,SYMBOLS_IMAGE_DIR,$(OUTPUTDIR)/images/symbols,NO_CHECK))

# Provide default values for tools that we need
$(eval $(call SetupVariable,MAKE,make,NO_CHECK))
$(eval $(call SetupVariable,BASH,bash,NO_CHECK))

# Check optional variables
$(eval $(call SetupVariable,JIB_JAR,OPTIONAL))

# Now that we have verified that we have the required variables available, we
# can include the prebuilt spec file ourselves, without an ephemeral spec
# wrapper. This is required so we can include MakeBase which is needed for
# CreateNewSpec.
HAS_SPEC :=
include $(TOPDIR)/make/InitSupport.gmk

$(eval $(call CheckDeprecatedEnvironment))
$(eval $(call CheckInvalidMakeFlags))
$(eval $(call ParseLogLevel))

SPEC := $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk
include $(SPEC)
include $(TOPDIR)/make/common/MakeBase.gmk

################################################################################
# Determine what platform we're running on
################################################################################
UNAME := uname

# Get OS name from uname (Cygwin inexplicably adds _NT-x.x)
UNAME_OS := $(shell $(UNAME) -s | $(CUT) -f1 -d_)

ifeq ($(UNAME_OS), CYGWIN)
  OPENJDK_TARGET_OS := windows
  OPENJDK_TARGET_OS_TYPE := windows
  OPENJDK_TARGET_OS_ENV := windows.cygwin
else
  OPENJDK_TARGET_OS_TYPE:=unix
  ifeq ($(UNAME_OS), Linux)
    OPENJDK_TARGET_OS := linux
  else ifeq ($(UNAME_OS), Darwin)
    OPENJDK_TARGET_OS := macosx
  else ifeq ($(UNAME_OS), SunOS)
    OPENJDK_TARGET_OS := solaris
  else
    OPENJDK_TARGET_OS := $(UNAME_OS)
  endif
  OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS)
endif

# Assume little endian unless otherwise specified
OPENJDK_TARGET_CPU_ENDIAN := little

ifeq ($(OPENJDK_TARGET_OS), solaris)
  # On solaris, use uname -p
  UNAME_CPU := $(shell $(UNAME) -p)
  # Assume 64-bit platform
  OPENJDK_TARGET_CPU_BITS := 64
  ifeq ($(UNAME_CPU), i386)
    OPENJDK_TARGET_CPU := x86_64
  else ifeq ($(UNAME_CPU), sparc)
    OPENJDK_TARGET_CPU := sparcv9
    OPENJDK_TARGET_CPU_ENDIAN := big
  else
    OPENJDK_TARGET_CPU := $(UNAME_CPU)
  endif
else
  # ... all others use uname -m
  UNAME_CPU := $(shell $(UNAME) -m)
  ifeq ($(UNAME_CPU), i686)
    OPENJDK_TARGET_CPU := x86
    OPENJDK_TARGET_CPU_BITS := 32
  else
    # Assume all others are 64-bit. We use the same CPU name as uname for
    # at least x86_64 and aarch64.
    OPENJDK_TARGET_CPU := $(UNAME_CPU)
    OPENJDK_TARGET_CPU_BITS := 64
  endif
endif

OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU)
ifeq ($(OPENJDK_TARGET_CPU), x86_64)
  OPENJDK_TARGET_CPU_ARCH := x86
else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
  OPENJDK_TARGET_CPU_ARCH := sparc
endif

ifeq ($(OPENJDK_TARGET_OS), windows)
  ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), )
    $(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)')
    $(error Cannot continue.)
  endif
  FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c
  PATH_SEP:=;
else
  FIXPATH :=
  PATH_SEP:=:
endif

# Check number of cores and memory in MB
ifeq ($(OPENJDK_TARGET_OS), linux)
  NUM_CORES := $(shell $(CAT) /proc/cpuinfo  | $(GREP) -c processor)
  MEMORY_SIZE := $(shell \
      $(EXPR) `$(CAT) /proc/meminfo | $(GREP) MemTotal | $(AWK) '{print $$2}'` / 1024 \
  )
else ifeq ($(OPENJDK_TARGET_OS), macosx)
  NUM_CORES := $(shell /usr/sbin/sysctl -n hw.ncpu)
  MEMORY_SIZE := $(shell $(EXPR) `/usr/sbin/sysctl -n hw.memsize` / 1024 / 1024)
else ifeq ($(OPENJDK_TARGET_OS), solaris)
  NUM_CORES := $(shell /usr/sbin/psrinfo -v | $(GREP) -c on-line)
  MEMORY_SIZE := $(shell \
      /usr/sbin/prtconf 2> /dev/null | $(GREP) "^Memory [Ss]ize" | $(AWK) '{print $$3}' \
  )
else ifeq ($(OPENJDK_TARGET_OS), windows)
  NUM_CORES := $(NUMBER_OF_PROCESSORS)
  MEMORY_SIZE := $(shell \
      $(EXPR) `wmic computersystem get totalphysicalmemory -value \
          | $(GREP) = | $(SED) 's/\\r//g' \
          | $(CUT) -d "=" -f 2-` / 1024 / 1024 \
  )
endif
ifeq ($(NUM_CORES), )
  $(warn Could not find number of CPUs, assuming 1)
  NUM_CORES := 1
endif
ifeq ($(MEMORY_SIZE), )
  $(warn Could not find memory size, assuming 1024 MB)
  MEMORY_SIZE := 1024
endif

# Setup LD for AOT support
ifneq ($(DEVKIT_HOME), )
  ifeq ($(OPENJDK_TARGET_OS), windows)
    LD_JAOTC := $(DEVKIT_HOME)/VC/bin/x64/link.exe
    LIBRARY_PREFIX :=
    SHARED_LIBRARY_SUFFIX := .dll
  else ifeq ($(OPENJDK_TARGET_OS), linux)
    LD_JAOTC := $(DEVKIT_HOME)/bin/ld
    LIBRARY_PREFIX := lib
    SHARED_LIBRARY_SUFFIX := .so
  else ifeq ($(OPENJDK_TARGET_OS), macosx)
    LD_JAOTC := $(DEVKIT_HOME)/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
    LIBRARY_PREFIX := lib
    SHARED_LIBRARY_SUFFIX := .dylib
  else ifeq ($(OPENJDK_TARGET_OS), solaris)
    # Prefer system linker for AOT on Solaris.
    LD_JAOTC := ld
    LIBRARY_PREFIX := lib
    SHARED_LIBRARY_SUFFIX := .so
  endif
else
  LD := ld
endif

ifneq ($(wildcard $(JDK_IMAGE_DIR)/template.xml), )
  TEST_OPTS_JCOV := true
  JCOV_IMAGE_DIR := $(JDK_IMAGE_DIR)
else
  TEST_OPTS_JCOV := false
  JCOV_IMAGE_DIR :=
endif

################################################################################
# Generate the ephemeral spec file
################################################################################

# Now we can include additional custom support.
# This might define CUSTOM_NEW_SPEC_LINE
ifneq ($(CUSTOM_MAKE_DIR), )
  include $(CUSTOM_MAKE_DIR)/RunTestsPrebuilt.gmk
endif

NEW_SPEC := $(OUTPUTDIR)/run-test-spec.gmk

$(call CreateNewSpec, $(NEW_SPEC), \
    # Generated file -- do not edit!, \
    SPEC := $(NEW_SPEC), \
    TOPDIR := $(TOPDIR), \
    OUTPUTDIR := $(OUTPUTDIR), \
    BOOT_JDK := $(BOOT_JDK), \
    JT_HOME := $(JT_HOME), \
    JDK_IMAGE_DIR := $(JDK_IMAGE_DIR), \
    JCOV_IMAGE_DIR := $(JCOV_IMAGE_DIR), \
    TEST_IMAGE_DIR := $(TEST_IMAGE_DIR), \
    SYMBOLS_IMAGE_DIR := $(SYMBOLS_IMAGE_DIR), \
    MAKE := $(MAKE), \
    BASH := $(BASH), \
    JIB_JAR := $(JIB_JAR), \
    FIXPATH := $(FIXPATH), \
    PATH_SEP := $(PATH_SEP), \
    OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \
    OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \
    OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \
    OPENJDK_TARGET_CPU := $(OPENJDK_TARGET_CPU), \
    OPENJDK_TARGET_CPU_ARCH := $(OPENJDK_TARGET_CPU_ARCH), \
    OPENJDK_TARGET_CPU_BITS := $(OPENJDK_TARGET_CPU_BITS), \
    OPENJDK_TARGET_CPU_ENDIAN := $(OPENJDK_TARGET_CPU_ENDIAN), \
    NUM_CORES := $(NUM_CORES), \
    MEMORY_SIZE := $(MEMORY_SIZE), \
    LD_JAOTC := $(LD_JAOTC), \
    LIBRARY_PREFIX := $(LIBRARY_PREFIX), \
    SHARED_LIBRARY_SUFFIX := $(SHARED_LIBRARY_SUFFIX), \
    include $(TOPDIR)/make/RunTestsPrebuiltSpec.gmk, \
    TEST_OPTS_JCOV := $(TEST_OPTS_JCOV), \
    $(CUSTOM_NEW_SPEC_LINE), \
)

################################################################################
# The run-test-prebuilt target
################################################################################

SPEC := $(NEW_SPEC)

default: all

run-test-prebuilt:
        # Need to make sure the failure logs output dir exists since
        # ExecuteWithLog is called in RunTests.gmk. The PrepareFailureLogs macro
        # is unfortunately not available at this point.
	$(call MakeDir, $(MAKESUPPORT_OUTPUTDIR)/failure-logs)
	@$(RM) -f $(MAKESUPPORT_OUTPUTDIR)/exit-with-error
        # The lazy initialization of the cache file in FindTests.gmk does not
        # always work with RunTests.gmk. To guarantee that the jtreg test groups
        # are always found and parsed, call FindTests.gmk stand alone once
        # before calling RunTests.gmk.
	@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/common/FindTests.gmk \
	    SPEC=$(SPEC) FINDTESTS_STAND_ALONE=true
	@cd $(TOPDIR) && $(MAKE) $(MAKE_ARGS) -f make/RunTests.gmk run-test \
	    TEST="$(TEST)"

all: run-test-prebuilt

.PHONY: default all
