#
# Copyright (c) 2011, 2025, 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.
#

################################################################################
# This is the main makefile containing most actual top level targets.
################################################################################

# Declare ALL_TARGETS as an immediate variable. This variable is a list of all
# valid top level targets. It's used to declare them all as PHONY and to
# generate the -only targets.

ALL_TARGETS :=

DEFAULT_TARGET := default-target

include MakeFileStart.gmk

################################################################################

include $(TOPDIR)/make/MainSupport.gmk

include FindTests.gmk

ifeq ($(UPDATE_MODULE_DEPS), true)
  # Update module-deps.gmk if requested. This is read in Modules.gmk.
  GENERATE_MODULE_DEPS_FILE := true
endif

include Modules.gmk

# Are we requested to ignore dependencies?
ifneq ($(findstring -only, $(MAKECMDGOALS)), )
  DEPS := none
endif


# All modules for the current target platform.
ALL_MODULES := $(call FindAllModules)

################################################################################
#
# Recipes for all targets. Only recipes, dependencies are declared later.
#
################################################################################

################################################################################
# Interim/build tools targets, compiling tools used during the build

$(eval $(call SetupTarget, buildtools-langtools, \
    MAKEFILE := ToolsLangtools, \
))

$(eval $(call SetupTarget, interim-langtools, \
    MAKEFILE := CompileInterimLangtools, \
))

$(eval $(call SetupTarget, interim-tzdb, \
    MAKEFILE := CopyInterimTZDB, \
))

$(eval $(call SetupTarget, buildtools-jdk, \
    MAKEFILE := CompileToolsJdk, \
    DEPS := interim-langtools interim-tzdb, \
))

$(eval $(call SetupTarget, buildtools-modules, \
    MAKEFILE := CompileModuleTools, \
))

$(eval $(call SetupTarget, buildtools-hotspot, \
    MAKEFILE := CompileToolsHotspot, \
))

################################################################################
# Gensrc targets, generating source before java compilation can be done
#
$(eval $(call DeclareRecipesForPhase, GENSRC, \
    TARGET_SUFFIX := gensrc-src, \
    FILE_PREFIX := Gensrc, \
    CHECK_MODULES := $(ALL_MODULES), \
))

$(foreach m, $(GENSRC_MODULES), $(eval $m-gensrc: $m-gensrc-src))

LANGTOOLS_GENSRC_TARGETS := $(filter $(addsuffix -%, $(LANGTOOLS_MODULES)), $(GENSRC_TARGETS))
INTERIM_LANGTOOLS_GENSRC_TARGETS := $(filter $(addsuffix -%, \
    $(INTERIM_LANGTOOLS_BASE_MODULES)), $(GENSRC_TARGETS))
HOTSPOT_GENSRC_TARGETS := $(filter $(addsuffix -%, $(HOTSPOT_MODULES)), $(GENSRC_TARGETS))
JDK_GENSRC_TARGETS := $(filter-out $(LANGTOOLS_GENSRC_TARGETS) \
    $(HOTSPOT_GENSRC_TARGETS), $(GENSRC_TARGETS))

GENSRC_MODULEINFO_MODULES := $(ALL_MODULES)
GENSRC_MODULEINFO_TARGETS := $(addsuffix -gensrc-moduleinfo, \
    $(GENSRC_MODULEINFO_MODULES))

GENSRC_MODULES := $(GENSRC_MODULEINFO_MODULES)
GENSRC_TARGETS += $(sort $(GENSRC_MODULEINFO_TARGETS) \
    $(addsuffix -gensrc, $(GENSRC_MODULES)))

define DeclareModuleInfoRecipe
  $1-gensrc-moduleinfo:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
	    -f common/modules/GensrcModuleInfo.gmk MODULE=$1)

  $1-gensrc: $1-gensrc-moduleinfo
endef

$(foreach m, $(GENSRC_MODULEINFO_MODULES), $(eval $(call DeclareModuleInfoRecipe,$m)))

ALL_TARGETS += $(GENSRC_TARGETS)

################################################################################
# Generate data targets
$(eval $(call DeclareRecipesForPhase, GENDATA, \
    TARGET_SUFFIX := gendata, \
    FILE_PREFIX := Gendata, \
    CHECK_MODULES := $(ALL_MODULES), \
))

ALL_TARGETS += $(GENDATA_TARGETS)

################################################################################
# Copy files targets
$(eval $(call DeclareRecipesForPhase, COPY, \
    TARGET_SUFFIX := copy, \
    FILE_PREFIX := Copy, \
    CHECK_MODULES := $(ALL_MODULES), \
))

ALL_COPY_MODULES += $(COPY_MODULES)
ALL_COPY_TARGETS += $(COPY_TARGETS)

IMPORT_COPY_MODULES := $(call FindImportedModules)
IMPORT_COPY_TARGETS := $(addsuffix -copy, $(IMPORT_COPY_MODULES))
ALL_COPY_MODULES += $(IMPORT_COPY_MODULES)
ALL_COPY_TARGETS += $(IMPORT_COPY_TARGETS)

define DeclareImportCopyRecipe
  $1-copy:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
	    -f CopyImportModules.gmk MODULE=$1)
endef

$(foreach m, $(IMPORT_COPY_MODULES), $(eval $(call DeclareImportCopyRecipe,$m)))

ALL_TARGETS += $(ALL_COPY_TARGETS)

################################################################################
# Targets for compiling all java modules.
JAVA_MODULES := $(ALL_MODULES)
JAVA_TARGETS := $(addsuffix -java, $(JAVA_MODULES))

define DeclareCompileJavaRecipe
  $1-java:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
	$(patsubst %,-I%/modules/$1,$(PHASE_MAKEDIRS)) \
	    -f CompileJavaModules.gmk MODULE=$1)
endef

$(foreach m, $(JAVA_MODULES), $(eval $(call DeclareCompileJavaRecipe,$m)))

ALL_TARGETS += $(JAVA_TARGETS)

################################################################################
# Targets for compiling native libraries
$(eval $(call DeclareRecipesForPhase, LIBS, \
    TARGET_SUFFIX := libs, \
    FILE_PREFIX := Lib, \
    CHECK_MODULES := $(ALL_MODULES), \
))

ALL_TARGETS += $(LIBS_TARGETS)

################################################################################
# Targets for compiling static versions of certain native libraries. These do
# not end up in the jmods or the normal JDK image, but are instead bundled into
# a special deliverable.
$(eval $(call DeclareRecipesForPhase, STATIC_LIBS, \
    TARGET_SUFFIX := static-libs, \
    FILE_PREFIX := Lib, \
    CHECK_MODULES := $(ALL_MODULES), \
    EXTRA_ARGS := STATIC_LIBS=true, \
))

ALL_TARGETS += $(STATIC_LIBS_TARGETS)

################################################################################
# Targets for compiling native executables
$(eval $(call DeclareRecipesForPhase, LAUNCHER, \
    TARGET_SUFFIX := launchers, \
    FILE_PREFIX := Launcher, \
    CHECK_MODULES := $(ALL_MODULES), \
))

ALL_TARGETS += $(LAUNCHER_TARGETS)

################################################################################
# Build hotspot target

HOTSPOT_VARIANT_TARGETS := $(addprefix hotspot-, $(JVM_VARIANTS))
HOTSPOT_VARIANT_GENSRC_TARGETS := $(addsuffix -gensrc, $(HOTSPOT_VARIANT_TARGETS))
HOTSPOT_VARIANT_LIBS_TARGETS := $(addsuffix -libs, $(HOTSPOT_VARIANT_TARGETS))
HOTSPOT_VARIANT_STATIC_LIBS_TARGETS := $(addsuffix -static-libs, $(HOTSPOT_VARIANT_TARGETS))

define DeclareHotspotGensrcRecipe
  hotspot-$1-gensrc:
	$$(call LogInfo, Building JVM variant '$1' with features '$(JVM_FEATURES_$1)')
	+($(CD) $(TOPDIR)/make/hotspot && $(MAKE) $(MAKE_ARGS) -f gensrc/GenerateSources.gmk \
	    JVM_VARIANT=$1)
endef

$(foreach v, $(JVM_VARIANTS), $(eval $(call DeclareHotspotGensrcRecipe,$v)))

define DeclareHotspotLibsRecipe
  hotspot-$1-libs:
	+($(CD) $(TOPDIR)/make/hotspot && $(MAKE) $(MAKE_ARGS) -f lib/CompileLibraries.gmk \
	    JVM_VARIANT=$1)
endef

$(foreach v, $(JVM_VARIANTS), $(eval $(call DeclareHotspotLibsRecipe,$v)))

define DeclareHotspotStaticLibsRecipe
  hotspot-$1-static-libs:
	+($(CD) $(TOPDIR)/make/hotspot && $(MAKE) $(MAKE_ARGS) -f lib/CompileLibraries.gmk \
	    JVM_VARIANT=$1 STATIC_LIBS=true)
endef

$(foreach v, $(JVM_VARIANTS), $(eval $(call DeclareHotspotStaticLibsRecipe,$v)))

$(eval $(call SetupTarget, hotspot-ide-project, \
    MAKEFILE := ide/visualstudio/hotspot/CreateVSProject, \
    DEPS := hotspot exploded-image, \
    ARGS := -I$(TOPDIR)/make/hotspot, \
))

$(eval $(call SetupTarget, eclipse-java-env, \
    MAKEFILE := ide/eclipse/CreateWorkspace, \
    ARGS := --always-make WORKSPACE=java, \
))

$(eval $(call SetupTarget, eclipse-hotspot-env, \
    MAKEFILE := ide/eclipse/CreateWorkspace, \
    ARGS := --always-make WORKSPACE=hotspot, \
))

$(eval $(call SetupTarget, eclipse-native-env, \
    MAKEFILE := ide/eclipse/CreateWorkspace, \
    ARGS := --always-make WORKSPACE=native, \
))

$(eval $(call SetupTarget, eclipse-mixed-env, \
    MAKEFILE := ide/eclipse/CreateWorkspace, \
    ARGS := --always-make, \
))

$(eval $(call SetupTarget, hotspot-xcode-project, \
    MAKEFILE := ide/xcode/hotspot/CreateXcodeProject, \
    TARGET := build, \
    DEPS := hotspot compile-commands-hotspot jdk-image, \
))

$(eval $(call SetupTarget, open-hotspot-xcode-project, \
    MAKEFILE := ide/xcode/hotspot/CreateXcodeProject, \
    TARGET := open, \
    DEPS := hotspot-xcode-project, \
))

ALL_TARGETS += $(HOTSPOT_VARIANT_TARGETS) $(HOTSPOT_VARIANT_GENSRC_TARGETS) \
    $(HOTSPOT_VARIANT_LIBS_TARGETS) $(HOTSPOT_VARIANT_STATIC_LIBS_TARGETS)

################################################################################
# Help and user support

$(eval $(call SetupTarget, doctor, \
    MAKEFILE := Doctor, \
))

################################################################################
# Generate libs and launcher targets for creating compile_commands.json fragments
define DeclareCompileCommandsRecipe
  $1-compile-commands:
	$$(call LogInfo, Generating compile_commands.json fragments for $1)
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Main.gmk $1-only \
	    GENERATE_COMPILE_COMMANDS_ONLY=true)

  COMPILE_COMMANDS_TARGETS_$2 += $1-compile-commands
endef

$(foreach t, $(HOTSPOT_VARIANT_LIBS_TARGETS), \
  $(eval $(call DeclareCompileCommandsRecipe,$t,HOTSPOT)) \
)

$(foreach t, $(LIBS_TARGETS) $(LAUNCHER_TARGETS), \
  $(eval $(call DeclareCompileCommandsRecipe,$t,JDK)) \
)

$(eval $(call SetupTarget, compile-commands, \
    MAKEFILE := CompileCommands, \
))

$(eval $(call SetupTarget, compile-commands-hotspot, \
    MAKEFILE := CompileCommands, \
))

ALL_TARGETS += $(COMPILE_COMMANDS_TARGETS_HOTSPOT) $(COMPILE_COMMANDS_TARGETS_JDK)

################################################################################
# VS Code projects

$(eval $(call SetupTarget, vscode-project, \
    MAKEFILE := ide/vscode/hotspot/CreateVSCodeProject, \
    ARGS := VSCODE_INDEXER=cpptools, \
    DEPS := compile-commands, \
))

$(eval $(call SetupTarget, vscode-project-clangd, \
    MAKEFILE := ide/vscode/hotspot/CreateVSCodeProject, \
    ARGS := VSCODE_INDEXER=clangd, \
    DEPS := compile-commands, \
))

$(eval $(call SetupTarget, vscode-project-rtags, \
    MAKEFILE := ide/vscode/hotspot/CreateVSCodeProject, \
    ARGS := VSCODE_INDEXER=rtags, \
    DEPS := compile-commands, \
))

$(eval $(call SetupTarget, vscode-project-ccls, \
    MAKEFILE := ide/vscode/hotspot/CreateVSCodeProject, \
    ARGS := VSCODE_INDEXER=ccls, \
    DEPS := compile-commands, \
))

################################################################################
# IDEA IntelliJ projects

$(eval $(call SetupTarget, idea-gen-config, \
    MAKEFILE := ide/idea/jdk/IdeaGenConfig, \
    ARGS := IDEA_OUTPUT="$(IDEA_OUTPUT)" MODULES="$(MODULES)", \
))

################################################################################
# Build demos targets

# The demos are currently linking to libjvm and libjava, just like all other
# jdk libs, even though they don't need to. To avoid warnings, make sure they
# aren't built until after libjava and libjvm are available to link to.
$(eval $(call SetupTarget, demos-jdk, \
    MAKEFILE := CompileDemos, \
    DEPS := java.base-libs exploded-image buildtools-jdk, \
))

$(eval $(call SetupTarget, test-image-demos-jdk, \
    MAKEFILE := CompileDemos, \
    TARGET := images, \
    DEPS := demos-jdk, \
))

################################################################################
# Jigsaw specific data and analysis targets.

$(eval $(call SetupTarget, generate-summary, \
    MAKEFILE := GenerateModuleSummary, \
    DEPS := jmods buildtools-modules runnable-buildjdk, \
))

################################################################################
# Jmod targets

JMOD_MODULES := $(ALL_MODULES)
JMOD_TARGETS := $(addsuffix -jmod, $(JMOD_MODULES))

define DeclareJmodRecipe
  $1-jmod:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
	    $(patsubst %,-I%/modules/$1,$(PHASE_MAKEDIRS)) \
	    -f CreateJmods.gmk MODULE=$1)
endef

$(foreach m, $(JMOD_MODULES), $(eval $(call DeclareJmodRecipe,$m)))

ALL_TARGETS += $(JMOD_TARGETS)

################################################################################
# Images targets

$(eval $(call SetupTarget, store-source-revision, \
    MAKEFILE := SourceRevision, \
    TARGET := store-source-revision, \
))

$(eval $(call SetupTarget, create-source-revision-tracker, \
    MAKEFILE := SourceRevision, \
    TARGET := create-source-revision-tracker, \
))

BOOTCYCLE_TARGET := product-images
BOOTCYCLE_SPEC := $(dir $(SPEC))bootcycle-spec.gmk

bootcycle-images:
        ifneq ($(COMPILE_TYPE), cross)
	  $(call LogWarn, Boot cycle build step 2: Building a new JDK image using previously built image)
	  $(call MakeDir, $(OUTPUTDIR)/bootcycle-build)
	  +$(MAKE) $(MAKE_ARGS) -f $(TOPDIR)/make/Init.gmk PARALLEL_TARGETS=$(BOOTCYCLE_TARGET) \
	      LOG_PREFIX="[bootcycle] " JOBS= SPEC=$(BOOTCYCLE_SPEC) main
        else
	  $(call LogWarn, Boot cycle build disabled when cross compiling)
        endif

$(eval $(call SetupTarget, zip-security, \
    MAKEFILE := ZipSecurity, \
    DEPS := buildtools-jdk java.base-java java.security.jgss-java java.security.jgss-libs, \
))

$(eval $(call SetupTarget, zip-source, \
    MAKEFILE := ZipSource, \
    DEPS := buildtools-jdk gensrc, \
))

$(eval $(call SetupTarget, jrtfs-jar, \
    MAKEFILE := JrtfsJar, \
    DEPS := interim-langtools, \
))

$(eval $(call SetupTarget, jdk-image, \
    MAKEFILE := Images, \
    TARGET := jdk, \
    DEPS := jmods zip-source demos release-file, \
))

$(eval $(call SetupTarget, legacy-jre-image, \
    MAKEFILE := Images, \
    TARGET := jre, \
    DEPS := jmods release-file, \
))

$(eval $(call SetupTarget, symbols-image, \
    MAKEFILE := Images, \
    TARGET := symbols, \
))

$(eval $(call SetupTarget, static-launcher, \
    MAKEFILE := StaticLibs, \
    TARGET := static-launcher, \
    DEPS := hotspot-static-libs static-libs, \
))

$(eval $(call SetupTarget, static-jdk-image, \
    MAKEFILE := StaticLibs, \
    TARGET := static-jdk-image, \
    DEPS := static-exploded-image jdk-image, \
))

$(eval $(call SetupTarget, static-libs-image, \
    MAKEFILE := StaticLibsImage, \
    TARGET := static-libs-image, \
))

$(eval $(call SetupTarget, static-libs-graal-image, \
    MAKEFILE := StaticLibsImage, \
    TARGET := static-libs-graal-image, \
))

$(eval $(call SetupTarget, mac-jdk-bundle, \
    MAKEFILE := MacBundles, \
    TARGET := jdk-bundle, \
    DEPS := jdk-image, \
))

$(eval $(call SetupTarget, mac-legacy-jre-bundle, \
    MAKEFILE := MacBundles, \
    TARGET := jre-bundle, \
    DEPS := legacy-jre-image, \
))

$(eval $(call SetupTarget, release-file, \
    MAKEFILE := ReleaseFile, \
    DEPS := create-source-revision-tracker, \
))

$(eval $(call SetupTarget, exploded-image-optimize, \
    MAKEFILE := ExplodedImageOptimize, \
    DEPS := java copy gendata java.base-libs java.base-launchers \
        buildtools-modules, \
))

$(eval $(call SetupTarget, graal-builder-image, \
    MAKEFILE := GraalBuilderImage, \
    DEPS := jdk-image static-libs-graal-image, \
))

ifeq ($(JCOV_ENABLED), true)
  $(eval $(call SetupTarget, jcov-image, \
      MAKEFILE := Coverage, \
      TARGET := jcov-image, \
      DEPS := jdk-image, \
  ))
endif

ALL_TARGETS += bootcycle-images

################################################################################
# Docs targets

# If building full docs, to complete docs-*-api we need both the javadoc and
# graphs targets.
$(eval $(call SetupTarget, docs-jdk-api-javadoc, \
    MAKEFILE := Docs, \
    TARGET := docs-jdk-api-javadoc, \
))

$(eval $(call SetupTarget, docs-jdk-api-graphs, \
    MAKEFILE := Docs, \
    TARGET := docs-jdk-api-graphs, \
    DEPS := buildtools-modules runnable-buildjdk, \
))

$(eval $(call SetupTarget, docs-javase-api-javadoc, \
    MAKEFILE := Docs, \
    TARGET := docs-javase-api-javadoc, \
))

$(eval $(call SetupTarget, docs-javase-api-graphs, \
    MAKEFILE := Docs, \
    TARGET := docs-javase-api-graphs, \
    DEPS := buildtools-modules runnable-buildjdk, \
))

$(eval $(call SetupTarget, docs-reference-api-javadoc, \
    MAKEFILE := Docs, \
    TARGET := docs-reference-api-javadoc, \
))

$(eval $(call SetupTarget, docs-reference-api-graphs, \
    MAKEFILE := Docs, \
    TARGET := docs-reference-api-graphs, \
    DEPS := buildtools-modules runnable-buildjdk, \
))

# The gensrc steps for jdk.jdi create html spec files.
$(eval $(call SetupTarget, docs-jdk-specs, \
    MAKEFILE := Docs, \
    TARGET := docs-jdk-specs, \
    DEPS := buildtools-jdk jdk.jdi-gensrc docs-jdk-index, \
))

$(eval $(call SetupTarget, docs-jdk-index, \
    MAKEFILE := Docs, \
    TARGET := docs-jdk-index, \
))

$(eval $(call SetupTarget, docs-zip, \
    MAKEFILE := Docs, \
    TARGET := docs-zip, \
    DEPS :=  docs-jdk buildtools-jdk, \
))

$(eval $(call SetupTarget, docs-specs-zip, \
    MAKEFILE := Docs, \
    TARGET := docs-specs-zip, \
    DEPS := docs-jdk-specs buildtools-jdk, \
))

$(eval $(call SetupTarget, update-build-docs, \
    MAKEFILE := UpdateBuildDocs, \
))

$(eval $(call SetupTarget, update-sleef-source, \
    MAKEFILE := UpdateSleefSource, \
))

$(eval $(call SetupTarget, update-x11wrappers, \
    MAKEFILE := UpdateX11Wrappers, \
    DEPS := java.base-copy buildtools-jdk, \
))

ifneq ($(HSDIS_BACKEND), none)
  $(eval $(call SetupTarget, build-hsdis, \
      MAKEFILE := Hsdis, \
      TARGET := build, \
  ))

  $(eval $(call SetupTarget, install-hsdis, \
      MAKEFILE := Hsdis, \
      TARGET := install, \
      DEPS := jdk-image, \
  ))
endif

################################################################################
# Cross compilation support

ifeq ($(CREATING_BUILDJDK), true)
  # This target is only called by the recursive call below.
  create-buildjdk-interim-image-helper: interim-image jdk.jlink-launchers \
      java.base-copy jdk.jdeps-launchers jdk.compiler-launchers
endif

BUILDJDK_MODULES := $(sort $(foreach m, jdk.jlink jdk.compiler \
    $(INTERIM_IMAGE_MODULES), $(call FindTransitiveDepsForModule, $m) $m))

$(eval $(call SetupTarget, create-buildjdk-interim-image, \
    MAKEFILE := Main, \
    TARGET := create-buildjdk-interim-image-helper, \
    ARGS := SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
        HOTSPOT_SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
        CREATING_BUILDJDK=true \
        LOG_PREFIX="[buildjdk] " \
        JAVA_MODULES="$(BUILDJDK_MODULES)", \
))

################################################################################
# The interim-image is a small jlinked image that is used to generate artifacts
# at build time for use when linking the real images.

INTERIM_JMOD_TARGETS := $(addsuffix -interim-jmod, $(INTERIM_IMAGE_MODULES))

define DeclareInterimJmodRecipe
  $1-interim-jmod:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CreateJmods.gmk \
	    MODULE=$1 \
	    JMODS_DIR=$(INTERIM_JMODS_DIR) \
	    JMODS_SUPPORT_DIR=$(INTERIM_JMODS_DIR)/support \
	    INTERIM_JMOD=true \
	)
endef

$(foreach m, $(INTERIM_IMAGE_MODULES), $(eval $(call DeclareInterimJmodRecipe,$m)))

$(eval $(call SetupTarget, interim-image, \
    MAKEFILE := InterimImage, \
))

ifeq ($(ENABLE_GENERATE_CLASSLIST), true)
  $(eval $(call SetupTarget, generate-link-opt-data, \
      MAKEFILE := GenerateLinkOptData, \
  ))
endif

################################################################################
# Generate test names for all JTReg test groups
#

define DeclareRunTestRecipe
  test-$1:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
	    TEST="$1")

  exploded-test-$1:
	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk \
	    TEST="$1" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR))
endef

# ALL_NAMED_TESTS is defined in FindTests.gmk
$(foreach t, $(ALL_NAMED_TESTS), $(eval $(call DeclareRunTestRecipe,$t)))
ALL_TEST_TARGETS := $(addprefix test-, $(ALL_NAMED_TESTS))

# We only support the "exploded-test-gtest" shortcut
ALL_EXPLODED_TESTS := gtest
ALL_EXPLODED_TEST_TARGETS := $(addprefix exploded-test-, $(ALL_EXPLODED_TESTS))

ALL_TARGETS += $(ALL_TEST_TARGETS) $(ALL_EXPLODED_TEST_TARGETS)

################################################################################
# Build tests and microbenchmarks
#

$(eval $(call SetupTarget, prepare-test-image, \
    MAKEFILE := TestImage, \
    TARGET := prepare-test-image, \
))

$(eval $(call SetupTarget, build-test-hotspot-jtreg-native, \
    MAKEFILE := test/JtregNativeHotspot, \
    TARGET := build-test-hotspot-jtreg-native, \
    DEPS := buildtools-jdk, \
))

$(eval $(call SetupTarget, test-image-hotspot-jtreg-native, \
    MAKEFILE := test/JtregNativeHotspot, \
    TARGET := test-image-hotspot-jtreg-native, \
    DEPS := build-test-hotspot-jtreg-native, \
))

$(eval $(call SetupTarget, build-test-jdk-jtreg-native, \
    MAKEFILE := test/JtregNativeJdk, \
    TARGET := build-test-jdk-jtreg-native, \
    DEPS := buildtools-jdk java.base-libs, \
))

$(eval $(call SetupTarget, test-image-jdk-jtreg-native, \
    MAKEFILE := test/JtregNativeJdk, \
    TARGET := test-image-jdk-jtreg-native, \
    DEPS := build-test-jdk-jtreg-native, \
))

# Native files needed by the testlib
$(eval $(call SetupTarget, build-test-lib-native, \
    MAKEFILE := test/BuildTestLibNative, \
    TARGET := build-test-lib-native, \
    DEPS := buildtools-jdk java.base-libs, \
))

$(eval $(call SetupTarget, test-image-lib-native, \
    MAKEFILE := test/BuildTestLibNative, \
    TARGET := test-image-lib-native, \
    DEPS := build-test-lib-native, \
))

# Native files needed when testing the testlib itself
$(eval $(call SetupTarget, build-test-libtest-jtreg-native, \
    MAKEFILE := test/JtregNativeLibTest, \
    TARGET := build-test-libtest-jtreg-native, \
    DEPS := buildtools-jdk, \
))

$(eval $(call SetupTarget, test-image-libtest-jtreg-native, \
    MAKEFILE := test/JtregNativeLibTest, \
    TARGET := test-image-libtest-jtreg-native, \
    DEPS := build-test-libtest-jtreg-native, \
))

ifneq ($(GTEST_FRAMEWORK_SRC), )
  $(eval $(call SetupTarget, test-image-hotspot-gtest, \
      MAKEFILE := hotspot/test/GtestImage, \
      DEPS := hotspot, \
  ))
endif

$(eval $(call SetupTarget, build-test-lib, \
    MAKEFILE := test/BuildTestLib, \
    TARGET := build-test-lib, \
    DEPS := exploded-image, \
))

$(eval $(call SetupTarget, test-image-lib, \
    MAKEFILE := test/BuildTestLib, \
    TARGET := test-image-lib, \
    DEPS := build-test-lib, \
))

$(eval $(call SetupTarget, build-test-setup-aot, \
    MAKEFILE := test/BuildTestSetupAOT, \
    DEPS := interim-langtools exploded-image, \
))

$(eval $(call SetupTarget, test-image-setup-aot, \
    MAKEFILE := test/BuildTestSetupAOT, \
    TARGET := images, \
    DEPS :=  build-test-setup-aot, \
))

ifeq ($(BUILD_FAILURE_HANDLER), true)
  # Builds the failure handler jtreg extension
  $(eval $(call SetupTarget, build-test-failure-handler, \
      MAKEFILE := test/BuildFailureHandler, \
      TARGET := build, \
      DEPS := interim-langtools, \
  ))

  # Copies the failure handler jtreg extension into the test image
  $(eval $(call SetupTarget, test-image-failure-handler, \
      MAKEFILE := test/BuildFailureHandler, \
      TARGET := images, \
      DEPS := build-test-failure-handler, \
  ))
endif

ifeq ($(BUILD_JTREG_TEST_THREAD_FACTORY), true)
  # Builds the test thread factory jtreg extension
  $(eval $(call SetupTarget, build-test-test-thread-factory, \
      MAKEFILE := test/BuildJtregTestThreadFactory, \
      TARGET := build, \
      DEPS := interim-langtools exploded-image, \
  ))

  # Copies the jtreg test thread factory into the test image
  $(eval $(call SetupTarget, test-image-test-thread-factory, \
      MAKEFILE := test/BuildJtregTestThreadFactory, \
      TARGET := images, \
      DEPS := build-test-test-thread-factory, \
  ))
endif

$(eval $(call SetupTarget, build-microbenchmark, \
    MAKEFILE := test/BuildMicrobenchmark, \
    DEPS := interim-langtools exploded-image build-test-lib, \
))

################################################################################
# Run tests

$(eval $(call SetupTarget, test, \
    MAKEFILE := RunTests, \
    ARGS := TEST="$(TEST)", \
    DEPS := jdk-image test-image $(TEST_DEPS), \
))

$(eval $(call SetupTarget, exploded-test, \
    MAKEFILE := RunTests, \
    ARGS := TEST="$(TEST)" JDK_IMAGE_DIR=$(JDK_OUTPUTDIR), \
    DEPS := exploded-image test-image $(TEST_DEPS), \
))

ifeq ($(JCOV_ENABLED), true)
  $(eval $(call SetupTarget, jcov-test, \
      MAKEFILE := RunTests, \
      ARGS := TEST="$(TEST)" TEST_OPTS_JCOV=true, \
      DEPS := jcov-image test-image, \
  ))
endif

################################################################################
# Bundles

$(eval $(call SetupTarget, product-bundles, \
    MAKEFILE := Bundles, \
    TARGET := product-bundles, \
    DEPS := product-images, \
))

$(eval $(call SetupTarget, legacy-bundles, \
    MAKEFILE := Bundles, \
    TARGET := legacy-bundles, \
    DEPS := legacy-images, \
))

$(eval $(call SetupTarget, test-bundles, \
    MAKEFILE := Bundles, \
    TARGET := test-bundles, \
    DEPS := test-image, \
))

$(eval $(call SetupTarget, docs-jdk-bundles, \
    MAKEFILE := Bundles, \
    TARGET := docs-jdk-bundles, \
    DEPS := docs-image, \
))

$(eval $(call SetupTarget, docs-javase-bundles, \
    MAKEFILE := Bundles, \
    TARGET := docs-javase-bundles, \
    DEPS := docs-javase-image, \
))

$(eval $(call SetupTarget, docs-reference-bundles, \
    MAKEFILE := Bundles, \
    TARGET := docs-reference-bundles, \
    DEPS := docs-reference-image, \
))

$(eval $(call SetupTarget, static-libs-bundles, \
    MAKEFILE := Bundles, \
    TARGET := static-libs-bundles, \
    DEPS := static-libs-image, \
))

$(eval $(call SetupTarget, static-libs-graal-bundles, \
    MAKEFILE := Bundles, \
    TARGET := static-libs-graal-bundles, \
    DEPS := static-libs-graal-image, \
))

$(eval $(call SetupTarget, static-jdk-bundles, \
    MAKEFILE := Bundles, \
    TARGET := static-jdk-bundles, \
    DEPS := static-jdk-image, \
))

ifeq ($(JCOV_ENABLED), true)
  $(eval $(call SetupTarget, jcov-bundles, \
      MAKEFILE := Bundles, \
      TARGET := jcov-bundles, \
      DEPS := jcov-image, \
  ))
endif

################################################################################
#
# Dependency declarations between targets.
#
# These are declared in two groups. First all dependencies between targets that
# have recipes above as these dependencies may be disabled. Then the aggregator
# targets that do not have recipes of their own, which will never have their
# dependencies disabled.
#
################################################################################
# Targets with recipes above

# If running an *-only target, parallel execution and dependencies between
# recipe targets are disabled. This makes it possible to run a select set of
# recipe targets in order. It's the responsibility of the user to make sure
# all prerequisites are fulfilled.
ifeq ($(DEPS), none)
  .NOTPARALLEL:
else
  $(LANGTOOLS_GENSRC_TARGETS): buildtools-langtools

  interim-langtools: $(INTERIM_LANGTOOLS_GENSRC_TARGETS)

  $(HOTSPOT_GENSRC_TARGETS): interim-langtools buildtools-hotspot

  $(JDK_GENSRC_TARGETS): interim-langtools buildtools-jdk

  $(GENSRC_MODULEINFO_TARGETS): buildtools-jdk

  $(GENDATA_TARGETS): interim-langtools buildtools-jdk

  $(JAVA_TARGETS): interim-langtools

  # Declare dependencies between hotspot-<variant>* targets
  $(foreach v, $(JVM_VARIANTS), \
      $(eval hotspot-$v-gensrc: java.base-copy buildtools-hotspot) \
      $(eval hotspot-$v-libs: hotspot-$v-gensrc java.base-copy) \
      $(eval hotspot-$v-static-libs: hotspot-$v-gensrc java.base-copy) \
  )

  # If not already set, set the JVM variant target so that the JVM will be built.
  JVM_MAIN_LIB_TARGETS ?= hotspot-$(JVM_VARIANT_MAIN)-libs
  JVM_MAIN_GENSRC_TARGETS ?= hotspot-$(JVM_VARIANT_MAIN)-gensrc

  # Building one JVM variant is enough to start building the other libs
  $(LIBS_TARGETS): $(JVM_MAIN_LIB_TARGETS)

  # Static libs depend on hotspot gensrc
  $(STATIC_LIBS_TARGETS): $(JVM_MAIN_GENSRC_TARGETS)

  $(LAUNCHER_TARGETS): java.base-libs

  # Declare dependency from <module>-java to <module>-gensrc
  $(foreach m, $(GENSRC_MODULES), $(eval $m-java: $m-gensrc))

  # Declare dependencies between java modules
  $(foreach m, $(JAVA_MODULES), \
      $(eval $m-java: $(addsuffix -java, $(filter $(JAVA_MODULES), \
      $(call FindDepsForModule,$m)))))
  # Declare dependencies between the module meta targets
  $(foreach m, $(ALL_MODULES), $(eval $m: $(call FindDepsForModule,$m)))

  # Declare dependencies from <module>-lib to <module>-java
  # Skip modules that do not have java source.
  $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java))

  # Declare dependencies from all other <module>-lib to java.base-lib
  $(foreach t, $(filter-out java.base-libs, $(LIBS_TARGETS)), \
      $(eval $t: java.base-libs))

  ifeq ($(ENABLE_HSDIS_BUNDLING), true)
    java.base-copy: build-hsdis
  endif

  # On Windows, we need to copy tzmappings generated by gensrc
  ifeq ($(call isTargetOs, windows), true)
    java.base-copy: java.base-gensrc
  endif

  # jdk.accessibility depends on java.desktop
  jdk.accessibility-libs: java.desktop-libs

  # This dependency needs to be explicitly declared. jdk.jdi-gensrc generates a
  # header file used by jdk.jdwp.agent-libs. The jdk.jdwp.agent-gensrc is a
  # virtual target.
  jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc

  # jdk.jfr-gendata uses TOOL_JFR_GEN from buildtools-hotspot
  jdk.jfr-gendata: buildtools-hotspot

  # The swing beans need to have java base properly generated to avoid errors
  # in javadoc. The X11 wrappers need the java.base include files to have been
  # copied and processed.
  java.desktop-gensrc-src: java.base-gensrc java.base-copy

  jdk.jdeps-gendata: java

  # jdk.compiler gendata generates ct.sym, which requires all generated
  # java source and compiled classes present.
  jdk.compiler-gendata: $(JAVA_TARGETS)

  # jdk.javadoc gendata generates element-list, which requires all java sources
  # but not compiled classes.
  jdk.javadoc-gendata: $(GENSRC_TARGETS)

  # ct.sym and element-list generation also needs the BUILD_JDK. If the
  # BUILD_JDK was supplied externally, no extra prerequisites are needed.
  ifeq ($(CREATE_BUILDJDK), true)
    ifneq ($(CREATING_BUILDJDK), true)
      # When cross compiling and an external BUILD_JDK wasn't supplied, it's
      # produced by the create-buildjdk target.
      jdk.compiler-gendata: create-buildjdk
      jdk.javadoc-gendata: create-buildjdk
    endif
  else ifeq ($(EXTERNAL_BUILDJDK), false)
    # When not cross compiling, the BUILD_JDK is the interim jdk image, and
    # the javac launcher is needed.
    jdk.compiler-gendata: jdk.compiler-launchers
    jdk.javadoc-gendata: jdk.compiler-launchers
  endif

  # Declare dependencies between jmod targets.
  # java.base jmod needs jrt-fs.jar and access to the jmods for all non
  # upgradeable modules and their transitive dependencies.
  # When creating the BUILDJDK, we don't need to add hashes to java.base, thus
  # we don't need to depend on all other jmods
  ifneq ($(CREATING_BUILDJDK), true)
    java.base-jmod: jrtfs-jar $(addsuffix -jmod, $(filter-out java.base, $(sort \
        $(foreach m, $(filter-out $(call FindAllUpgradeableModules), $(JMOD_MODULES)), \
          $m $(call FindTransitiveDepsForModules, $m) \
        ))))
  endif

  # If not already set, set the JVM target so that the JVM will be built.
  JVM_MAIN_TARGETS ?= hotspot

  # Building java.base-jmod requires all of VM (ie hotspot) to be built.
  java.base-jmod: $(JVM_MAIN_TARGETS)

  # Declare dependencies from <module>-jmod to all other module targets
  $(foreach m, $(JAVA_MODULES), $(eval $m_JMOD_DEPS += $m-java))
  $(foreach m, $(GENDATA_MODULES), $(eval $m_JMOD_DEPS += $m-gendata))
  $(foreach m, $(LIBS_MODULES), $(eval $m_JMOD_DEPS += $m-libs))
  $(foreach m, $(LAUNCHER_MODULES), $(eval $m_JMOD_DEPS += $m-launchers))
  $(foreach m, $(COPY_MODULES), $(eval $m_JMOD_DEPS += $m-copy))
  $(foreach m, $(ALL_MODULES), $(eval $m-jmod: $($(m)_JMOD_DEPS)))
  $(foreach m, $(INTERIM_IMAGE_MODULES), $(eval $m-interim-jmod: $($(m)_JMOD_DEPS)))

  # Setup the minimal set of generated native source dependencies for hotspot
  $(foreach v, $(JVM_VARIANTS), \
    $(eval hotspot-$v-libs-compile-commands: hotspot-$v-gensrc) \
    $(foreach m, $(filter java.desktop jdk.hotspot.agent, $(GENSRC_MODULES)), \
      $(eval hotspot-$v-libs-compile-commands: $m-gensrc)) \
  )

  # For the full JDK compile commands, create all possible generated sources
  $(foreach m, $(GENSRC_MODULES), $(eval $m-libs-compile-commands: $m-gensrc))
  $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs-compile-commands: $m-java))

  $(COMPILE_COMMANDS_TARGETS_HOTSPOT): clean-compile-commands
  $(COMPILE_COMMANDS_TARGETS_JDK): clean-compile-commands
  compile-commands-hotspot: $(COMPILE_COMMANDS_TARGETS_HOTSPOT)
  compile-commands: $(COMPILE_COMMANDS_TARGETS_HOTSPOT) $(COMPILE_COMMANDS_TARGETS_JDK)

  # The -static-libs targets depend on -java as well as java.base-copy.
  $(foreach m, $(filter $(JAVA_MODULES), $(STATIC_LIBS_MODULES)), \
    $(eval $m-static-libs: $m-java java.base-copy))

  # Jmods cannot be created until we have the jmod tool ready to run. During
  # a normal build we run it from the exploded image, but when cross compiling
  # it's run from the buildjdk, which is either created at build time or user
  # supplied.
  ifeq ($(CREATE_BUILDJDK), true)
    ifneq ($(CREATING_BUILDJDK), true)
      # When cross compiling and buildjdk is to be created, simply depend on
      # creating the buildjdk.
      $(JMOD_TARGETS): create-buildjdk
      buildtools-modules: create-buildjdk
    else
      # While actually creating the buildjdk, we need to list the bare
      # minimum dependencies needed before running jmod, to avoid building
      # more than necessary. This includes:
      # * all java modules
      # * jdk.jlink-launchers
      # * copy jvm.cfg (done in java.base-copy)
      # * tzdb.dat (done in java.base-gendata)
      # Without all of these jimage, jlink and jmod won't start.
      $(JMOD_TARGETS) $(INTERIM_JMOD_TARGETS): java.base-libs java.base-copy \
          java.base-gendata jdk.jlink-launchers java
    endif
  else ifeq ($(EXTERNAL_BUILDJDK), false)
    # The normal non cross compilation usecase needs to wait for the full
    # exploded-image to avoid a race with the optimize target.
    $(JMOD_TARGETS) $(INTERIM_JMOD_TARGETS): exploded-image
    # The buildtools-modules are used for the exploded-image-optimize target,
    # but can be built either using the exploded-image or an external BUILDJDK.
    buildtools-modules: exploded-image-base
  endif

  # All modules include the main license files from java.base.
  $(JMOD_TARGETS): java.base-copy

  # jdk.javadoc uses an internal copy of the main license files from java.base.
  jdk.javadoc-copy: java.base-copy

  zip-security: $(filter jdk.crypto%, $(JAVA_TARGETS))

  ifeq ($(ENABLE_GENERATE_CLASSLIST), true)
    ifeq ($(CREATE_BUILDJDK), true)
      # If creating a buildjdk, the interim image needs to be based on that.
      generate-link-opt-data: create-buildjdk
    else ifeq ($(EXTERNAL_BUILDJDK), false)
      # If an external buildjdk has been provided, we skip generating an
      # interim-image and just use the external buildjdk for generating
      # classlist.
      generate-link-opt-data: interim-image
    endif
    generate-link-opt-data: buildtools-jdk

    # The generated classlist needs to go into java.base-jmod.
    java.base-jmod jdk.jlink-jmod jdk-image legacy-jre-image: generate-link-opt-data
  endif

  symbols-image: $(LIBS_TARGETS) $(LAUNCHER_TARGETS)

  static-libs-image: hotspot-static-libs static-libs

  static-libs-graal-image: static-libs

  bootcycle-images: jdk-image

  docs-jdk-api-javadoc: $(GENSRC_TARGETS)

  docs-javase-api-javadoc: $(GENSRC_TARGETS)

  docs-reference-api-javadoc: $(GENSRC_TARGETS)

  # If not already set, then set the JVM specific docs targets
  JVM_DOCS_TARGETS ?= hotspot-$(JVM_VARIANT_MAIN)-gensrc

  # The gensrc steps for hotspot create html spec files.
  docs-jdk-specs: $(JVM_DOCS_TARGETS)

  # Tests
  test-make: clean-test-make compile-commands

  test-make-compile-commands: compile-commands

  # Declare dependency for all generated test targets
  $(foreach t, $(filter-out test-make%, $(ALL_TEST_TARGETS)), $(eval $t: jdk-image test-image $(TEST_DEPS)))
  $(foreach t, $(ALL_EXPLODED_TEST_TARGETS), $(eval $t: exploded-image test-image $(TEST_DEPS)))

  interim-image: $(INTERIM_JMOD_TARGETS)

  build-test-hotspot-jtreg-native: hotspot-$(JVM_VARIANT_MAIN)-libs
  build-test-libtest-jtreg-native: hotspot-$(JVM_VARIANT_MAIN)-libs

endif

################################################################################
# Virtual targets without recipes

# If not already set, set the JVM specific tools targets
JVM_TOOLS_TARGETS ?= buildtools-hotspot
buildtools: buildtools-langtools interim-langtools \
    buildtools-jdk $(JVM_TOOLS_TARGETS)

# Declare dependencies from hotspot-<variant> targets
$(foreach v, $(JVM_VARIANTS), \
  $(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \
)
hotspot: $(HOTSPOT_VARIANT_TARGETS)

# Create targets hotspot-libs and hotspot-gensrc.
$(foreach v, $(JVM_VARIANTS), \
  $(eval hotspot-libs: hotspot-$v-libs) \
  $(eval hotspot-gensrc: hotspot-$v-gensrc) \
  $(eval hotspot-static-libs: hotspot-$v-static-libs) \
)

gensrc: $(GENSRC_TARGETS)

gendata: $(GENDATA_TARGETS)

copy: $(ALL_COPY_TARGETS)

java: $(JAVA_TARGETS)

libs: $(LIBS_TARGETS)

static-libs: $(STATIC_LIBS_TARGETS)

launchers: $(LAUNCHER_TARGETS)

jmods: $(JMOD_TARGETS)

# Explicitly declare dependency for virtual target jdk.jdwp.agent-gensrc which
# is actually handled by jdk.jdi-gensrc
jdk.jdwp.agent-gensrc: jdk.jdi-gensrc

# Declare dependencies from <module> to all the individual targets specific
# to that module <module>-*, that are needed for the exploded image.
$(foreach m, $(GENSRC_MODULES), $(eval $m: $m-gensrc))
$(foreach m, $(JAVA_MODULES), $(eval $m: $m-java))
$(foreach m, $(GENDATA_MODULES), $(eval $m: $m-gendata))
$(foreach m, $(LIBS_MODULES), $(eval $m: $m-libs))
$(foreach m, $(LAUNCHER_MODULES), $(eval $m: $m-launchers))
$(foreach m, $(ALL_COPY_MODULES), $(eval $m: $m-copy))

# Building java.base includes building all of hotspot.
java.base: $(JVM_MAIN_TARGETS)

demos: demos-jdk

# The "exploded image" is a locally runnable JDK in $(OUTPUTDIR)/jdk.
exploded-image-base: $(ALL_MODULES)
exploded-image: exploded-image-base release-file
# When cross compiling, no need to optimize the exploded image since it won't
# be runnable on the host platform anyway.
ifneq ($(COMPILE_TYPE), cross)
  exploded-image: exploded-image-optimize
endif

# The runnable-buildjdk target guarantees that the buildjdk is done
# building and ready to be used. The exact set of dependencies it needs
# depends on what kind of buildjdk is used for the current configuration.
runnable-buildjdk:
ifeq ($(CREATE_BUILDJDK), true)
  ifneq ($(CREATING_BUILDJDK), true)
    runnable-buildjdk: create-buildjdk
  endif
else ifeq ($(EXTERNAL_BUILDJDK), false)
  runnable-buildjdk: exploded-image
endif

create-buildjdk: create-buildjdk-interim-image

docs-jdk-api: docs-jdk-api-javadoc
docs-javase-api: docs-javase-api-javadoc
docs-reference-api: docs-reference-api-javadoc

# If we're building full docs, we must also generate the module graphs to
# get non-broken api documentation.
ifeq ($(ENABLE_FULL_DOCS), true)
  docs-jdk-api: docs-jdk-api-graphs
  docs-javase-api: docs-javase-api-graphs
  docs-reference-api: docs-reference-api-graphs

  # We must generate javadoc first so we know what graphs are needed
  docs-jdk-api-graphs: docs-jdk-api-javadoc
  docs-javase-api-graphs: docs-javase-api-javadoc
  docs-reference-api-graphs: docs-reference-api-javadoc
endif

docs-jdk: docs-jdk-api docs-jdk-specs docs-jdk-index
docs-javase: docs-javase-api
docs-reference: docs-reference-api

# alias for backwards compatibility
docs-javadoc: docs-jdk-api

mac-bundles: mac-jdk-bundle

# The $(OUTPUTDIR)/images directory contain the resulting deliverables,
# and in line with this, our targets for creating these are named *-image[s].

# This target builds the product images, e.g. the JDK image
# (and possibly other, more specific versions)
product-images: jdk-image symbols-image exploded-image

# This target builds the legacy images, e.g. the legacy JRE image
legacy-images: legacy-jre-image

# zip-security is actually a bundle, but for now it needs to be considered
# an image until this can be cleaned up properly.
product-images: zip-security

# The module summary cannot be run when:
# * Cross compiling and building a partial BUILDJDK for the build host
# * An external buildjdk has been supplied since it may not match the
#   module selection of the target jdk
ifneq ($(CREATE_BUILDJDK), true)
  ifeq ($(EXTERNAL_BUILDJDK), false)
    product-images: generate-summary
  endif
endif

ifeq ($(call isTargetOs, macosx), true)
  product-images: mac-jdk-bundle

  legacy-images: mac-legacy-jre-bundle
endif

static-exploded-image: static-launcher exploded-image

# These targets build the various documentation images
docs-jdk-image: docs-jdk
docs-javase-image: docs-javase
docs-reference-image: docs-reference
# The docs-jdk-image is what most users expect to be built
docs-image: docs-jdk-image
all-docs-images: docs-jdk-image docs-javase-image docs-reference-image

docs-bundles: docs-jdk-bundles
all-docs-bundles: docs-jdk-bundles docs-javase-bundles docs-reference-bundles

# This target builds the test image
test-image: prepare-test-image test-image-jdk-jtreg-native \
    test-image-demos-jdk test-image-libtest-jtreg-native \
    test-image-lib test-image-lib-native \
    test-image-setup-aot

ifneq ($(JVM_TEST_IMAGE_TARGETS), )
  # If JVM_TEST_IMAGE_TARGETS is externally defined, use it instead of the
  # standard hotspot set of tests.
  test-image: $(JVM_TEST_IMAGE_TARGETS)
else
  test-image: test-image-hotspot-jtreg-native
  ifneq ($(GTEST_FRAMEWORK_SRC), )
    test-image: test-image-hotspot-gtest
  endif
endif

ifeq ($(BUILD_FAILURE_HANDLER), true)
  test-image: test-image-failure-handler
endif

ifeq ($(BUILD_JTREG_TEST_THREAD_FACTORY), true)
  test-image: test-image-test-thread-factory
endif

ifneq ($(JMH_CORE_JAR), )
  test-image: build-microbenchmark
endif

################################################################################

# all-images builds all our deliverables as images.
all-images: product-images static-jdk-image test-image all-docs-images

# all-bundles packages all our deliverables as tar.gz bundles.
all-bundles: product-bundles test-bundles docs-bundles static-libs-bundles

ALL_TARGETS += buildtools hotspot hotspot-libs hotspot-static-libs \
    hotspot-gensrc gensrc gendata \
    copy java libs static-libs launchers jmods \
    jdk.jdwp.agent-gensrc $(ALL_MODULES) demos \
    exploded-image-base exploded-image runnable-buildjdk \
    create-buildjdk docs-jdk-api docs-javase-api docs-reference-api docs-jdk \
    docs-javase docs-reference docs-javadoc mac-bundles product-images legacy-images \
    docs-image docs-javase-image docs-reference-image all-docs-images \
    docs-bundles all-docs-bundles test-image all-images static-exploded-image \
    all-bundles

################################################################################

# Traditional targets typically run by users.
# These can be considered aliases for the targets now named by a more
# "modern" naming scheme.
default-target: $(DEFAULT_MAKE_TARGET)
jdk: exploded-image
images: product-images
docs: docs-image
bundles: all-bundles
all: all-images

ALL_TARGETS += default jdk images docs bundles all

# Aliases used for running tests.

# Let "run-test" be an alias for "test"
$(foreach t, $(ALL_NAMED_TESTS), $(eval run-test-$t: test-$t))
RUN_TEST_TARGETS := $(addprefix run-test-, $(ALL_NAMED_TESTS))

run-test: test
exploded-run-test: exploded-test

# "make check" is a common idiom for running basic testing
check: test-tier1

# Keep some old names as aliases
test-hotspot-jtreg: test-hotspot_all
test-hotspot-jtreg-native: test-hotspot_native_sanity
test-hotspot-gtest: exploded-test-gtest
test-jdk-jtreg-native: test-jdk_native_sanity

# Set dependencies for doc tests
$(eval $(call AddTestDependency, docs_all, docs-jdk))
test-docs: test-docs_all

ALL_TARGETS += $(RUN_TEST_TARGETS) run-test exploded-run-test check \
    test-hotspot-jtreg test-hotspot-jtreg-native test-hotspot-gtest \
    test-jdk-jtreg-native test-docs

################################################################################
#
# Clean targets
#
################################################################################
# Clean targets are automatically run serially by the Makefile calling this
# file.

CLEAN_DIRS += hotspot jdk bootcycle-build test buildtools support \
    images make-support test-make bundles buildjdk test-results test-support \
    support/images
CLEAN_DIR_TARGETS := $(addprefix clean-, $(CLEAN_DIRS))
CLEAN_SUPPORT_DIRS += demos
CLEAN_SUPPORT_DIR_TARGETS := $(addprefix clean-, $(CLEAN_SUPPORT_DIRS))
CLEAN_TESTS += hotspot-jtreg-native jdk-jtreg-native lib
CLEAN_TEST_TARGETS += $(addprefix clean-test-, $(CLEAN_TESTS))
CLEAN_PHASES := gensrc java native include
CLEAN_PHASE_TARGETS := $(addprefix clean-, $(CLEAN_PHASES))
CLEAN_MODULE_TARGETS := $(addprefix clean-, $(ALL_MODULES))
# Construct targets of the form clean-$module-$phase
CLEAN_MODULE_PHASE_TARGETS := $(addprefix clean-, $(foreach m, $(ALL_MODULES), \
    $(addprefix $m-, $(CLEAN_PHASES))))

# Remove everything, except the output from configure.
clean: $(CLEAN_DIR_TARGETS)
	($(CD) $(OUTPUTDIR) && $(RM) -r build*.log* compile_commands.json)
	$(ECHO) Cleaned all build artifacts.

clean-docs:
	$(call CleanDocs)

clean-compile-commands:
	$(call CleanMakeSupportDir,compile-commands)

$(CLEAN_DIR_TARGETS):
	$(call CleanDir,$(patsubst clean-%, %, $@))

$(CLEAN_SUPPORT_DIR_TARGETS):
	$(call CleanSupportDir,$(patsubst clean-%, %, $@))

$(CLEAN_TEST_TARGETS):
	$(call CleanTest,$(patsubst clean-test-%, %, $@))

$(CLEAN_PHASE_TARGETS):
	$(call Clean-$(patsubst clean-%,%, $@))

$(CLEAN_MODULE_TARGETS):
	$(call CleanModule,$(patsubst clean-%, %, $@))

$(CLEAN_MODULE_PHASE_TARGETS):
	$(call Clean-$(word 3, $(subst -,$(SPACE),$@)), \
	    $(word 2, $(subst -,$(SPACE),$@)))

# When removing the support dir, we must also remove jdk. Building classes has
# the side effect of generating native headers. The headers end up in support
# while classes and touch files end up in jdk.
clean-support: clean-jdk

clean-test: clean-test-results clean-test-support

# When cleaning images, also clean the support/images directory.
clean-images: clean-support/images

# Remove everything, including configure configuration. If the output
# directory was created by configure and now becomes empty, remove it as well.
dist-clean: clean
	($(CD) $(OUTPUTDIR) && \
	    $(RM) -r *spec.gmk $(CONFIGURESUPPORT_OUTPUTDIR) Makefile compare.sh ide \
	    configure.log* build.log*)
	$(if $(filter $(CONF_NAME), $(notdir $(OUTPUTDIR))), \
	  if test "x`$(LS) $(OUTPUTDIR)`" != x; then \
	    $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ; \
	  else \
	    ($(CD) $(TOPDIR) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" \
	        && $(RM) -r $(OUTPUTDIR)) \
	  fi \
	)
	$(ECHO) Cleaned everything, you will have to re-run configure.

ALL_TARGETS += clean clean-docs clean-compile-commands dist-clean $(CLEAN_DIR_TARGETS) \
    $(CLEAN_SUPPORT_DIR_TARGETS) $(CLEAN_TEST_TARGETS) $(CLEAN_PHASE_TARGETS) \
    $(CLEAN_MODULE_TARGETS) $(CLEAN_MODULE_PHASE_TARGETS)

################################################################################
# Declare *-only targets for each normal target
$(foreach t, $(ALL_TARGETS), $(eval $(t)-only: $(t)))

ALL_TARGETS += $(addsuffix -only, $(filter-out dist-clean clean%, $(ALL_TARGETS)))

################################################################################

# The following targets are intentionally not added to ALL_TARGETS since they
# are internal only, to support Init.gmk.

print-targets:
	$(info $(subst $(SPACE),$(NEWLINE),$(sort $(ALL_TARGETS))))

print-modules:
	$(info $(subst $(SPACE),$(NEWLINE),$(sort $(ALL_MODULES))))

print-tests:
	$(info $(subst $(SPACE),$(NEWLINE),$(sort $(ALL_NAMED_TESTS))))

create-main-targets-include:
	  $(call LogInfo, Generating main target list)
	  $(call MakeDir, $(MAKESUPPORT_OUTPUTDIR))
	  @$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \
	      $(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk

.PHONY: $(ALL_TARGETS)

FRC: # Force target

include MakeFileEnd.gmk
