Main.gmk revision 2641:3389bd361d46
1104477Ssam#
2104477Ssam# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
3104477Ssam# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4104477Ssam#
5104477Ssam# This code is free software; you can redistribute it and/or modify it
6104477Ssam# under the terms of the GNU General Public License version 2 only, as
7104477Ssam# published by the Free Software Foundation.  Oracle designates this
8104477Ssam# particular file as subject to the "Classpath" exception as provided
9104477Ssam# by Oracle in the LICENSE file that accompanied this code.
10104477Ssam#
11104477Ssam# This code is distributed in the hope that it will be useful, but WITHOUT
12104477Ssam# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13104477Ssam# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14104477Ssam# version 2 for more details (a copy is included in the LICENSE file that
15104477Ssam# accompanied this code).
16104477Ssam#
17104477Ssam# You should have received a copy of the GNU General Public License version
18104477Ssam# 2 along with this work; if not, write to the Free Software Foundation,
19104477Ssam# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20104477Ssam#
21104477Ssam# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22104477Ssam# or visit www.oracle.com if you need additional information or have any
23104477Ssam# questions.
24104477Ssam#
25104477Ssam
26104477Ssam################################################################################
27104477Ssam# This is the main makefile containing most actual top level targets. It needs
28104477Ssam# to be called with a SPEC file defined.
29104477Ssam################################################################################
30104477Ssam
31104477Ssam# Declare default target
32104477Ssamdefault:
33104477Ssam
34104477Ssamifeq ($(wildcard $(SPEC)),)
35104477Ssam  $(error Main.gmk needs SPEC set to a proper spec.gmk)
36104477Ssamendif
37104477Ssam
38104477Ssam# Now load the spec
39104477Ssaminclude $(SPEC)
40104477Ssam
41104477Ssaminclude $(SRC_ROOT)/make/MainSupport.gmk
42104477Ssam
43104477Ssam# Load the vital tools for all the makefiles.
44104477Ssaminclude $(SRC_ROOT)/make/common/MakeBase.gmk
45104477Ssaminclude $(SRC_ROOT)/make/common/Modules.gmk
46104477Ssaminclude $(SRC_ROOT)/make/common/FindTests.gmk
47112124Ssam
48104477Ssam# Declare ALL_TARGETS as an immediate variable. This variable is a list of all
49104477Ssam# valid top level targets. It's used to declare them all as PHONY and to
50104477Ssam# generate the -only targets.
51104477SsamALL_TARGETS :=
52104477Ssam
53104477Ssam# Hook to include the corresponding custom file, if present.
54104477Ssam$(eval $(call IncludeCustomExtension, , Main.gmk))
55104477Ssam
56104477Ssam# All modules for the current target platform.
57104477SsamALL_MODULES := $(call FindAllModules)
58104477Ssam
59104477Ssam################################################################################
60104477Ssam################################################################################
61104477Ssam#
62104477Ssam# Recipes for all targets. Only recipes, dependencies are declared later.
63104477Ssam#
64104477Ssam################################################################################
65104477Ssam
66104477Ssam################################################################################
67104477Ssam# Interim/build tools targets, compiling tools used during the build
68104477Ssam
69104477Ssam# When creating a BUILDJDK, the buildtools and interim targets have already
70104477Ssam# been built and should not be built again.
71104477Ssamifneq ($(CREATING_BUILDJDK), true)
72104477Ssam  buildtools-langtools:
73104477Ssam	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Tools.gmk)
74112124Ssam
75112124Ssam  interim-langtools:
76112124Ssam	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk)
77112124Ssam
78104477Ssam  interim-rmic:
79104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterimRmic.gmk)
80104477Ssam
81104477Ssam  interim-cldrconverter:
82104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimCLDRConverter.gmk)
83104477Ssam
84104477Ssam  buildtools-jdk:
85104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileTools.gmk)
86104477Ssam
87104477Ssam  buildtools-modules:
88104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileModuleTools.gmk)
89104477Ssam
90104477Ssam  buildtools-hotspot:
91104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileTools.gmk)
92104477Ssamendif
93104477Ssam
94104477SsamALL_TARGETS += buildtools-langtools interim-langtools \
95104477Ssam    interim-rmic interim-cldrconverter buildtools-jdk buildtools-modules \
96104477Ssam    buildtools-hotspot
97104477Ssam
98104477Ssam################################################################################
99104477Ssam# Special targets for certain modules
100104477Ssam
101104477Ssamunpack-sec:
102104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f UnpackSecurity.gmk)
103104477Ssam
104104477Ssamgenerate-exported-symbols:
105104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f BuildStatic.gmk)
106104477Ssam
107104477SsamALL_TARGETS += unpack-sec generate-exported-symbols
108104477Ssam
109104477Ssam################################################################################
110104477Ssam# Gensrc targets, generating source before java compilation can be done
111104477Ssam#
112104477Ssam# When creating a BUILDJDK, the java targets have already been built and copied
113104477Ssam# into the buildjdk so no need to generate sources.
114105251Smarkmifneq ($(CREATING_BUILDJDK), true)
115112124Ssam  $(eval $(call DeclareRecipesForPhase, GENSRC, \
116112124Ssam      TARGET_SUFFIX := gensrc, \
117112124Ssam      FILE_PREFIX := Gensrc, \
118104477Ssam      MAKE_SUBDIR := gensrc, \
119104477Ssam      CHECK_MODULES := $(ALL_MODULES), \
120104477Ssam      MULTIPLE_MAKEFILES := true))
121104477Ssam
122104477Ssam  JDK_GENSRC_TARGETS := $(filter %-gensrc-jdk, $(GENSRC_TARGETS))
123104477Ssam  LANGTOOLS_GENSRC_TARGETS := $(filter %-gensrc-langtools, $(GENSRC_TARGETS))
124104477Ssam  CORBA_GENSRC_TARGETS := $(filter %-gensrc-corba, $(GENSRC_TARGETS))
125104477Ssam  HOTSPOT_GENSRC_TARGETS := $(filter %-gensrc-hotspot, $(GENSRC_TARGETS))
126104477Ssam
127104477Ssam  GENSRC_MODULEINFO_MODULES := $(ALL_MODULES)
128104477Ssam  GENSRC_MODULEINFO_TARGETS := $(addsuffix -gensrc-moduleinfo, \
129104477Ssam      $(GENSRC_MODULEINFO_MODULES))
130104477Ssam
131104477Ssam  GENSRC_MODULES := $(GENSRC_MODULEINFO_MODULES)
132104477Ssam  GENSRC_TARGETS += $(sort $(GENSRC_MODULEINFO_TARGETS) \
133104477Ssam      $(addsuffix -gensrc, $(GENSRC_MODULES)))
134104477Ssam
135104477Ssam  define DeclareModuleInfoRecipe
136104477Ssam    $1-gensrc-moduleinfo:
137104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
138104477Ssam	    -f GensrcModuleInfo.gmk MODULE=$1)
139104477Ssam
140104477Ssam    $1-gensrc: $1-gensrc-moduleinfo
141104477Ssam  endef
142104477Ssam
143104477Ssam  $(foreach m, $(GENSRC_MODULEINFO_MODULES), $(eval $(call DeclareModuleInfoRecipe,$m)))
144104477Ssamendif
145104477Ssam
146104477SsamALL_TARGETS += $(GENSRC_TARGETS)
147104477Ssam
148104477Ssam################################################################################
149104477Ssam# Generate data targets
150104477Ssam$(eval $(call DeclareRecipesForPhase, GENDATA, \
151104477Ssam    TARGET_SUFFIX := gendata, \
152104477Ssam    FILE_PREFIX := Gendata, \
153104477Ssam    MAKE_SUBDIR := gendata, \
154104477Ssam    CHECK_MODULES := $(ALL_MODULES), \
155104477Ssam    USE_WRAPPER := true))
156104477Ssam
157104477SsamALL_TARGETS += $(GENDATA_TARGETS)
158104477Ssam
159104477Ssam################################################################################
160104477Ssam# Copy files targets
161104477Ssam$(eval $(call DeclareRecipesForPhase, COPY, \
162104477Ssam    TARGET_SUFFIX := copy, \
163104477Ssam    FILE_PREFIX := Copy, \
164104477Ssam    MAKE_SUBDIR := copy, \
165104477Ssam    CHECK_MODULES := $(ALL_MODULES), \
166104477Ssam    USE_WRAPPER := true, \
167104477Ssam    MULTIPLE_MAKEFILES := true))
168104477Ssam
169109596SsamALL_COPY_MODULES += $(COPY_MODULES)
170109596SsamALL_COPY_TARGETS += $(COPY_TARGETS)
171104477Ssam
172104477SsamIMPORT_COPY_MODULES := $(call FindImportedModules)
173109596SsamIMPORT_COPY_TARGETS := $(addsuffix -copy, $(IMPORT_COPY_MODULES))
174109596SsamALL_COPY_MODULES += $(IMPORT_COPY_MODULES)
175104477SsamALL_COPY_TARGETS += $(IMPORT_COPY_TARGETS)
176104477Ssam
177104477Ssamdefine DeclareImportCopyRecipe
178109596Ssam  $1-copy:
179109596Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
180112121Ssam	    -f CopyImportModules.gmk MODULE=$1)
181109596Ssamendef
182109596Ssam
183104477Ssam$(foreach m, $(IMPORT_COPY_MODULES), $(eval $(call DeclareImportCopyRecipe,$m)))
184104477Ssam
185104477SsamALL_TARGETS += $(ALL_COPY_TARGETS)
186104477Ssam
187104477Ssam################################################################################
188104477Ssam# Targets for compiling all java modules. Nashorn is treated separately.
189104477SsamJAVA_MODULES := $(ALL_MODULES)
190104477SsamJAVA_TARGETS := $(addsuffix -java, $(JAVA_MODULES))
191104477Ssam
192104477Ssamdefine DeclareCompileJavaRecipe
193104477Ssam  $1-java:
194104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
195104477Ssam	    -f CompileJavaModules.gmk MODULE=$1)
196104477Ssamendef
197104477Ssam
198104477Ssam$(foreach m, $(filter-out jdk.scripting.nashorn, $(JAVA_MODULES)), \
199104477Ssam    $(eval $(call DeclareCompileJavaRecipe,$m)))
200104477Ssam
201104477Ssam# Build nashorn. Needs to be compiled separately from the rest of the modules
202104477Ssam# due to nasgen.
203104477Ssamjdk.scripting.nashorn-java:
204104477Ssam	+($(CD) $(NASHORN_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
205104477Ssam	    -f BuildNashorn.gmk compile)
206104477Ssam
207104477SsamALL_TARGETS += $(JAVA_TARGETS)
208104477Ssam
209104477Ssam################################################################################
210104477Ssam# Targets for running rmic.
211104477Ssam$(eval $(call DeclareRecipesForPhase, RMIC, \
212104477Ssam    TARGET_SUFFIX := rmic, \
213104477Ssam    FILE_PREFIX := Rmic, \
214104477Ssam    MAKE_SUBDIR := rmic, \
215104477Ssam    CHECK_MODULES := $(ALL_MODULES)))
216104477Ssam
217104477SsamALL_TARGETS += $(RMIC_TARGETS)
218104477Ssam
219104477Ssam################################################################################
220104477Ssam# Targets for compiling native libraries
221104477Ssam$(eval $(call DeclareRecipesForPhase, LIBS, \
222104477Ssam    TARGET_SUFFIX := libs, \
223104477Ssam    FILE_PREFIX := Lib, \
224104477Ssam    MAKE_SUBDIR := lib, \
225104477Ssam    CHECK_MODULES := $(ALL_MODULES), \
226104477Ssam    USE_WRAPPER := true))
227104477Ssam
228104477SsamALL_TARGETS += $(LIBS_TARGETS)
229104477Ssam
230104477Ssam################################################################################
231104477Ssam# Targets for compiling native executables
232104477Ssam$(eval $(call DeclareRecipesForPhase, LAUNCHER, \
233104477Ssam    TARGET_SUFFIX := launchers, \
234104477Ssam    FILE_PREFIX := Launcher, \
235104477Ssam    MAKE_SUBDIR := launcher, \
236104477Ssam    CHECK_MODULES := $(ALL_MODULES), \
237104477Ssam    USE_WRAPPER := true))
238104477Ssam
239112124SsamALL_TARGETS += $(LAUNCHER_TARGETS)
240112124Ssam
241112124Ssam################################################################################
242112124Ssam# Build hotspot target
243112124Ssam
244112124SsamHOTSPOT_VARIANT_TARGETS := $(addprefix hotspot-, $(JVM_VARIANTS))
245104477SsamHOTSPOT_VARIANT_GENSRC_TARGETS := $(addsuffix -gensrc, $(HOTSPOT_VARIANT_TARGETS))
246104477SsamHOTSPOT_VARIANT_LIBS_TARGETS := $(addsuffix -libs, $(HOTSPOT_VARIANT_TARGETS))
247104477Ssam
248104477Ssamdefine DeclareHotspotGensrcRecipe
249104477Ssam  hotspot-$1-gensrc:
250104477Ssam	$$(call LogInfo, Building JVM variant '$1' with features '$(JVM_FEATURES_$1)')
251104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f gensrc/GenerateSources.gmk \
252104477Ssam	    JVM_VARIANT=$1)
253104477Ssamendef
254104477Ssam
255104477Ssam$(foreach v, $(JVM_VARIANTS), $(eval $(call DeclareHotspotGensrcRecipe,$v)))
256104477Ssam
257104477Ssamdefine DeclareHotspotLibsRecipe
258104477Ssam  hotspot-$1-libs:
259104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f lib/CompileLibraries.gmk \
260104477Ssam	    JVM_VARIANT=$1)
261104477Ssamendef
262115748Ssam
263104477Ssam$(foreach v, $(JVM_VARIANTS), $(eval $(call DeclareHotspotLibsRecipe,$v)))
264104477Ssam
265104477Ssamhotspot-jsig:
266104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f lib/CompileLibjsig.gmk)
267104477Ssam
268104477Ssamhotspot-ide-project:
269104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f ide/CreateVSProject.gmk)
270104477Ssam
271104477SsamALL_TARGETS += $(HOTSPOT_VARIANT_TARGETS) $(HOTSPOT_VARIANT_GENSRC_TARGETS) \
272104477Ssam    $(HOTSPOT_VARIANT_LIBS_TARGETS) hotspot-jsig hotspot-ide-project
273104477Ssam
274104477Ssam################################################################################
275104477Ssam# Build demos targets
276104477Ssam
277104477Ssamdemos-jdk:
278104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk)
279104477Ssam
280104477Ssamtest-image-demos-jdk:
281104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk images)
282104477Ssam
283104477SsamALL_TARGETS += demos-jdk test-image-demos-jdk
284104477Ssam
285104477Ssam################################################################################
286104477Ssam# Jigsaw specific data and analysis targets.
287104477Ssam
288104477Ssamgenerate-summary:
289104477Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f GenerateModuleSummary.gmk)
290104477Ssam
291104477SsamALL_TARGETS += generate-summary
292104477Ssam
293104477Ssam################################################################################
294104477Ssam# Jmod targets
295104477Ssam
296104477SsamJMOD_MODULES := $(ALL_MODULES)
297104477SsamJMOD_TARGETS := $(addsuffix -jmod, $(JMOD_MODULES))
298104477Ssam
299104477Ssamdefine DeclareJmodRecipe
300104477Ssam  $1-jmod:
301104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateJmods.gmk \
302104477Ssam	    MODULE=$1)
303104477Ssamendef
304104477Ssam
305104477Ssam$(foreach m, $(JMOD_MODULES), $(eval $(call DeclareJmodRecipe,$m)))
306104477Ssam
307104477SsamALL_TARGETS += $(JMOD_TARGETS)
308104477Ssam
309104477Ssam################################################################################
310104477Ssam# Images targets
311104477Ssam
312104477Ssamstore-source-revision:
313104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f SourceRevision.gmk store-source-revision)
314104477Ssam
315104477Ssamcreate-source-revision-tracker:
316104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f SourceRevision.gmk create-source-revision-tracker)
317104477Ssam
318104477SsamBOOTCYCLE_TARGET := product-images
319104477Ssambootcycle-images:
320104477Ssam        ifneq ($(COMPILE_TYPE), cross)
321104477Ssam	  $(call LogWarn, Boot cycle build step 2: Building a new JDK image using previously built image)
322104477Ssam	  +$(MAKE) $(MAKE_ARGS) -f $(SRC_ROOT)/make/Init.gmk PARALLEL_TARGETS=$(BOOTCYCLE_TARGET) \
323104477Ssam	      JOBS= SPEC=$(dir $(SPEC))bootcycle-spec.gmk main
324104477Ssam        else
325104477Ssam	  $(call LogWarn, Boot cycle build disabled when cross compiling)
326104477Ssam        endif
327104477Ssam
328104477Ssamzip-security:
329104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSecurity.gmk)
330104477Ssam
331104477Ssamzip-source:
332104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSource.gmk)
333104477Ssam
334104477Ssamjrtfs-jar:
335104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f JrtfsJar.gmk)
336104477Ssam
337104477Ssamjdk-image:
338104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk jdk)
339104477Ssam
340104477Ssamjre-image:
341104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk jre)
342104477Ssam
343117126Sscottlsymbols-image:
344117126Sscottl	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk symbols)
345104477Ssam
346104477Ssamprofiles-image:
347104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk profiles)
348104477Ssam
349104477Ssammac-bundles-jdk:
350104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f MacBundles.gmk)
351104477Ssam
352104477Ssamrelease-file:
353104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ReleaseFile.gmk)
354104477Ssam
355104477Ssamexploded-image-optimize:
356104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ExplodedImageOptimize.gmk)
357104477Ssam
358104477SsamALL_TARGETS += store-source-revision create-source-revision-tracker bootcycle-images zip-security \
359104477Ssam    zip-source jrtfs-jar jdk-image jre-image \
360104477Ssam    symbols-image profiles-image mac-bundles-jdk \
361104477Ssam    release-file exploded-image-optimize
362104477Ssam
363104477Ssam################################################################################
364104477Ssam# Docs targets
365104477Ssam
366104477Ssam# If building full docs, to complete docs-*-api we need both the javadoc and
367104477Ssam# modulegraph targets.
368104477Ssamdocs-jdk-api-javadoc:
369104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-jdk-api-javadoc)
370104477Ssam
371104477Ssamdocs-jdk-api-modulegraph:
372104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-jdk-api-modulegraph)
373104477Ssam
374104477Ssamdocs-javase-api-javadoc:
375104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-javase-api-javadoc)
376104477Ssam
377104477Ssamdocs-javase-api-modulegraph:
378104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-javase-api-modulegraph)
379104477Ssam
380104477Ssamdocs-jdk-specs:
381104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-jdk-specs)
382104477Ssam
383104477Ssamdocs-jdk-index:
384104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-jdk-index)
385104477Ssam
386104477Ssamdocs-zip:
387104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Docs.gmk docs-zip)
388104477Ssam
389104477Ssamupdate-build-docs:
390104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f UpdateBuildDocs.gmk)
391104477Ssam
392104477SsamALL_TARGETS += docs-jdk-api-javadoc docs-jdk-api-modulegraph \
393104477Ssam    docs-javase-api-javadoc docs-javase-api-modulegraph docs-jdk-specs \
394104477Ssam    docs-jdk-index docs-zip update-build-docs
395104477Ssam
396104477Ssam################################################################################
397104477Ssam# Cross compilation support
398104477Ssam
399104477Ssamifeq ($(CREATING_BUILDJDK), true)
400104477Ssam  # This target is only called by the recursive call below.
401104477Ssam  create-buildjdk-interim-image-helper: interim-image jdk.jlink-launchers \
402104477Ssam      java.base-copy jdk.jdeps-launchers
403104477Ssamendif
404104477Ssam
405104477Ssamcreate-buildjdk-copy:
406104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateBuildJdkCopy.gmk)
407104477Ssam
408104477Ssamcreate-buildjdk-interim-image:
409104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Main.gmk \
410104477Ssam	    $@-helper \
411104477Ssam	    SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
412104477Ssam	    HOTSPOT_SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
413104477Ssam	    CREATING_BUILDJDK=true)
414104477Ssam
415104477SsamALL_TARGETS += create-buildjdk-copy create-buildjdk-interim-image
416104477Ssam
417104477Ssam################################################################################
418104477Ssam# The interim-image is a small jlinked image that is used to generate artifacts
419104477Ssam# at build time for use when linking the real images.
420104477Ssam
421104477SsamINTERIM_JMOD_TARGETS := $(addsuffix -interim-jmod, $(INTERIM_IMAGE_MODULES))
422104477Ssam
423104477Ssamdefine DeclareInterimJmodRecipe
424104477Ssam  $1-interim-jmod:
425104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateJmods.gmk \
426104477Ssam	    MODULE=$1 \
427104477Ssam	    JMODS_DIR=$(INTERIM_JMODS_DIR) \
428115748Ssam	    JMODS_TEMPDIR=$(INTERIM_JMODS_DIR)/temp \
429104477Ssam	    INTERIM_JMOD=true \
430104477Ssam	)
431104477Ssamendef
432104477Ssam
433104477Ssam$(foreach m, $(INTERIM_IMAGE_MODULES), $(eval $(call DeclareInterimJmodRecipe,$m)))
434104477Ssam
435104477Ssaminterim-image:
436104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f InterimImage.gmk)
437104477Ssam
438104477Ssamifeq ($(ENABLE_GENERATE_CLASSLIST), true)
439104477Ssam  generate-link-opt-data:
440104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f GenerateLinkOptData.gmk)
441104477Ssamendif
442104477Ssam
443104477SsamALL_TARGETS += $(INTERIM_JMOD_TARGETS) interim-image generate-link-opt-data
444104477Ssam
445104477Ssam################################################################################
446104477Ssam# Generate test names for all JTReg test groups
447104477Ssam#
448104477Ssam
449104477Ssamdefine DeclareRunTestRecipe
450104477Ssam  run-test-$1:
451104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$1")
452104477Ssam
453104477Ssamendef
454104477Ssam
455104477Ssam# ALL_NAMED_TESTS is defined in FindTests.gmk
456104477Ssam$(foreach t, $(ALL_NAMED_TESTS), $(eval $(call DeclareRunTestRecipe,$t)))
457104477SsamALL_TEST_TARGETS := $(addprefix run-test-, $(ALL_NAMED_TESTS))
458104477Ssam
459104477SsamALL_TARGETS += $(ALL_TEST_TARGETS)
460104477Ssam
461104477Ssam################################################################################
462104477Ssam# Build tests
463104477Ssam#
464104477Ssam
465104477Ssamprepare-test-image:
466104477Ssam	$(MKDIR) -p $(TEST_IMAGE_DIR)
467104477Ssam	$(ECHO) > $(TEST_IMAGE_DIR)/Readme.txt 'JDK test image'
468104477Ssam
469104477Ssambuild-test-hotspot-jtreg-native:
470104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
471104477Ssam	    build-test-hotspot-jtreg-native)
472104477Ssam
473104477Ssamtest-image-hotspot-jtreg-native:
474104477Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
475104477Ssam	    test-image-hotspot-jtreg-native)
476104477Ssam
477104477Ssambuild-test-jdk-jtreg-native:
478104477Ssam	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
479104477Ssam	    build-test-jdk-jtreg-native)
480104477Ssam
481104477Ssamtest-image-jdk-jtreg-native:
482104477Ssam	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
483104477Ssam	    test-image-jdk-jtreg-native)
484104477Ssam
485104477Ssamrun-test:
486104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f RunTests.gmk run-test TEST="$(TEST)")
487104477Ssam
488104477Ssamifeq ($(BUILD_GTEST), true)
489104477Ssam  test-image-hotspot-gtest:
490104918Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f GtestImage.gmk)
491104918Ssamendif
492104477Ssam
493104477Ssambuild-test-lib:
494104477Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f BuildTestLib.gmk)
495104477Ssam
496104477Ssamifeq ($(BUILD_FAILURE_HANDLER), true)
497104477Ssam  # Builds the failure handler jtreg extension
498104477Ssam  build-test-failure-handler:
499104477Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
500104477Ssam	    -f BuildFailureHandler.gmk build)
501104477Ssam
502104477Ssam  # Runs the tests for the failure handler jtreg extension
503104477Ssam  test-failure-handler:
504104477Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
505104477Ssam	    -f BuildFailureHandler.gmk test)
506104477Ssam
507104477Ssam  # Copies the failure handler jtreg extension into the test image
508104477Ssam  test-image-failure-handler:
509104477Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
510104477Ssam	     -f BuildFailureHandler.gmk images)
511104477Ssamendif
512104477Ssam
513104477SsamALL_TARGETS += prepare-test-image build-test-hotspot-jtreg-native \
514104477Ssam    test-image-hotspot-jtreg-native build-test-jdk-jtreg-native \
515104477Ssam    test-image-jdk-jtreg-native build-test-lib build-test-failure-handler \
516104477Ssam    test-failure-handler test-image-failure-handler test-image-hotspot-gtest \
517104477Ssam    run-test
518104477Ssam
519104477Ssam################################################################################
520104477Ssam# Run tests
521104477Ssam
522104477Ssam# Run tests specified by $(TEST), or the default test set.
523104477Ssamtest:
524104477Ssam	$(call RunTests, $(TEST), $(JDK_IMAGE_DIR))
525104477Ssam
526104477Ssamtest-hotspot-jtreg:
527104477Ssam	$(call RunTests, "hotspot_all", $(JDK_IMAGE_DIR))
528104477Ssam
529115748Ssamtest-hotspot-jtreg-native:
530115748Ssam	$(call RunTests, "hotspot_native_sanity", $(JDK_IMAGE_DIR))
531104477Ssam
532104477Ssamtest-hotspot-internal:
533104477Ssam	$(call RunTests, "hotspot_internal", $(JDK_OUTPUTDIR))
534104477Ssam
535115848Ssamtest-hotspot-gtest:
536115848Ssam	$(call RunTests, "hotspot_gtest", $(JDK_OUTPUTDIR))
537115862Ssam
538115848Ssamtest-jdk-jtreg-native:
539104477Ssam	$(call RunTests, "jdk_native_sanity", $(JDK_IMAGE_DIR))
540104477Ssam
541104477Ssamtest-make:
542104477Ssam	($(CD) $(SRC_ROOT)/test/make && $(MAKE) $(MAKE_ARGS) -f TestMake.gmk $(TEST_TARGET))
543104477Ssam
544104477SsamALL_TARGETS += test test-hotspot-jtreg test-hotspot-jtreg-native \
545104477Ssam    test-hotspot-internal test-hotspot-gtest test-jdk-jtreg-native test-make
546104477Ssam
547104477Ssam################################################################################
548104477Ssam# Bundles
549104477Ssam
550104477Ssamproduct-bundles:
551104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk product-bundles)
552104477Ssam
553104477Ssamprofiles-bundles:
554104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk profiles-bundles)
555104477Ssam
556104477Ssamtest-bundles:
557104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk test-bundles)
558104477Ssam
559104477Ssamdocs-bundles:
560104477Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Bundles.gmk docs-bundles)
561104477Ssam
562104477SsamALL_TARGETS += product-bundles profiles-bundles test-bundles docs-bundles
563104477Ssam
564104477Ssam################################################################################
565104477Ssam# Install targets
566104477Ssam
567104477Ssaminstall:
568104477Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Install.gmk)
569104477Ssam
570104477SsamALL_TARGETS += install
571104477Ssam
572104477Ssam################################################################################
573104477Ssam#
574104477Ssam# Dependency declarations between targets.
575104477Ssam#
576104477Ssam# These are declared in two groups. First all dependencies between targets that
577104477Ssam# have recipes above as these dependencies may be disabled. Then the aggregator
578104477Ssam# targets that do not have recipes of their own, which will never have their
579104477Ssam# dependencies disabled.
580104477Ssam#
581104477Ssam################################################################################
582104477Ssam# Targets with recipes above
583104477Ssam
584104477Ssam# If running an *-only target, parallel execution and dependencies between
585104477Ssam# recipe targets are disabled. This makes it possible to run a select set of
586104477Ssam# recipe targets in order. It's the responsibility of the user to make sure
587104477Ssam# all prerequisites are fulfilled.
588104477Ssamifneq ($(findstring -only, $(MAKECMDGOALS)), )
589104477Ssam  .NOTPARALLEL:
590104477Ssamelse
591104477Ssam  $(LANGTOOLS_GENSRC_TARGETS): buildtools-langtools
592104477Ssam
593104477Ssam  interim-langtools: $(LANGTOOLS_GENSRC_TARGETS)
594104477Ssam
595104477Ssam  buildtools-jdk: interim-langtools interim-cldrconverter
596104477Ssam
597104477Ssam  buildtools-hotspot: interim-langtools
598104477Ssam
599104477Ssam  buildtools-modules: exploded-image-base
600104477Ssam
601104477Ssam  $(CORBA_GENSRC_TARGETS): interim-langtools
602104477Ssam
603104477Ssam  $(HOTSPOT_GENSRC_TARGETS): interim-langtools buildtools-hotspot
604104477Ssam
605104477Ssam  $(JDK_GENSRC_TARGETS): interim-langtools buildtools-jdk
606104477Ssam
607104477Ssam  $(GENSRC_MODULEINFO_TARGETS): buildtools-jdk
608104477Ssam
609104477Ssam  $(GENDATA_TARGETS): interim-langtools buildtools-jdk
610104477Ssam
611104477Ssam  interim-rmic: interim-langtools
612104477Ssam
613104477Ssam  $(RMIC_TARGETS): interim-langtools interim-rmic
614104477Ssam
615104477Ssam  $(JAVA_TARGETS): interim-langtools
616104477Ssam
617104477Ssam  # Declare dependencies between hotspot-<variant>* targets
618104477Ssam  $(foreach v, $(JVM_VARIANTS), \
619104477Ssam      $(eval hotspot-$v: hotspot-$v-gensrc hotspot-$v-libs) \
620104477Ssam      $(eval hotspot-$v-libs: hotspot-$v-gensrc) \
621104477Ssam  )
622104477Ssam
623104477Ssam  hotspot-ide-project: hotspot exploded-image
624104477Ssam
625104477Ssam  generate-exported-symbols: java.base-libs jdk.jdwp.agent-libs
626104477Ssam
627104477Ssam  # Building one JVM variant is enough to start building the other libs
628104477Ssam  $(LIBS_TARGETS): hotspot-$(JVM_VARIANT_MAIN)-libs
629104477Ssam
630104477Ssam  $(LAUNCHER_TARGETS): java.base-libs
631104477Ssam
632104477Ssam  ifeq ($(STATIC_BUILD), true)
633104477Ssam    $(LAUNCHER_TARGETS): generate-exported-symbols
634104477Ssam  endif
635104477Ssam
636104477Ssam  # The demos are currently linking to libjvm and libjava, just like all other
637104477Ssam  # jdk libs, even though they don't need to. To avoid warnings, make sure they
638104477Ssam  # aren't built until after libjava and libjvm are available to link to.
639104477Ssam  demos-jdk: java.base-libs exploded-image-optimize
640104477Ssam  test-image-demos-jdk: demos-jdk
641112124Ssam
642112124Ssam  # Declare dependency from <module>-java to <module>-gensrc
643112124Ssam  $(foreach m, $(GENSRC_MODULES), $(eval $m-java: $m-gensrc))
644112124Ssam
645112124Ssam  # Declare dependencies between java modules
646112124Ssam  $(foreach m, $(JAVA_MODULES), \
647112124Ssam      $(eval $m-java: $(addsuffix -java, $(filter $(JAVA_MODULES), \
648112124Ssam      $(call FindDepsForModule,$m)))))
649112124Ssam
650104477Ssam  # Declare dependencies between <module>-rmic to <module>-java
651104477Ssam  $(foreach m, $(RMIC_MODULES), $(eval $m-rmic: $m-java))
652104477Ssam
653104477Ssam  # Declare dependencies from <module>-lib to <module>-java
654104477Ssam  # Skip modules that do not have java source.
655104477Ssam  # When creating a BUILDJDK, the java compilation has already been done by the
656104477Ssam  # normal build and copied in.
657104477Ssam  ifneq ($(CREATING_BUILDJDK), true)
658104477Ssam    $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java))
659104477Ssam  endif
660104477Ssam
661104477Ssam  # Declare dependencies from all other <module>-lib to java.base-lib
662104477Ssam  $(foreach t, $(filter-out java.base-libs, $(LIBS_TARGETS)), \
663104477Ssam      $(eval $t: java.base-libs))
664104477Ssam
665104477Ssam  # jdk.accessibility depends on java.desktop
666104477Ssam  jdk.accessibility-libs: java.desktop-libs
667104477Ssam
668104477Ssam  # This dependency needs to be explicitly declared. jdk.jdi-gensrc generates a
669104477Ssam  # header file used by jdk.jdwp.agent-libs. The jdk.jdwp.agent-gensrc is a
670104477Ssam  # virtual target.
671104477Ssam  jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc
672104477Ssam
673104477Ssam  # The swing beans need to have java base properly generated to avoid errors
674104477Ssam  # in javadoc.
675104477Ssam  java.desktop-gensrc-jdk: java.base-gensrc
676104477Ssam
677104477Ssam  # The annotation processing for jdk.internal.vm.ci and jdk.internal.vm.compiler
678104477Ssam  # needs classes from the current JDK.
679104477Ssam  jdk.internal.vm.ci-gensrc-hotspot: $(addsuffix -java, \
680104477Ssam      $(call FindTransitiveDepsForModule, jdk.internal.vm.ci))
681104477Ssam  jdk.internal.vm.compiler-gensrc-hotspot: $(addsuffix -java, \
682104477Ssam      $(call FindTransitiveDepsForModule, jdk.internal.vm.compiler))
683104477Ssam
684104477Ssam  # For jdk.internal.vm.compiler, the gensrc step is generating a module-info.java.extra
685104477Ssam  # file to be processed by the gensrc-moduleinfo target.
686104477Ssam  jdk.internal.vm.compiler-gensrc-moduleinfo: jdk.internal.vm.compiler-gensrc-hotspot
687104477Ssam
688104477Ssam  # Explicitly add dependencies for special targets
689104477Ssam  java.base-java: unpack-sec
690105190Ssam
691105190Ssam  jdk.jdeps-gendata: java rmic
692104477Ssam
693104477Ssam  # Declare dependencies between jmod targets.
694104477Ssam  # java.base jmod needs jrt-fs.jar and access to the other jmods to be built.
695104477Ssam  # When creating a BUILDJDK, we don't need to add hashes to java.base, thus
696104477Ssam  # we don't need to depend on all other jmods
697104477Ssam  ifneq ($(CREATING_BUILDJDK), true)
698104477Ssam    java.base-jmod: jrtfs-jar $(filter-out java.base-jmod, $(JMOD_TARGETS))
699104477Ssam  endif
700104477Ssam
701104477Ssam  # Building java.base-jmod requires all of hotspot to be built.
702104477Ssam  java.base-jmod: hotspot
703104477Ssam
704104477Ssam  # Declare dependencies from <module>-jmod to all other module targets
705104477Ssam  # When creating a BUILDJDK, the java compilation has already been done by the
706104477Ssam  # normal build and copied in.
707104477Ssam  ifneq ($(CREATING_BUILDJDK), true)
708104477Ssam    $(foreach m, $(JAVA_MODULES), $(eval $m_JMOD_DEPS += $m-java))
709104477Ssam  endif
710104477Ssam  $(foreach m, $(GENDATA_MODULES), $(eval $m_JMOD_DEPS += $m-gendata))
711104477Ssam  $(foreach m, $(RMIC_MODULES), $(eval $m_JMOD_DEPS += $m-rmic))
712104477Ssam  $(foreach m, $(LIBS_MODULES), $(eval $m_JMOD_DEPS += $m-libs))
713104477Ssam  $(foreach m, $(LAUNCHER_MODULES), $(eval $m_JMOD_DEPS += $m-launchers))
714104477Ssam  $(foreach m, $(COPY_MODULES), $(eval $m_JMOD_DEPS += $m-copy))
715104477Ssam  $(foreach m, $(ALL_MODULES), $(eval $m-jmod: $($(m)_JMOD_DEPS)))
716104477Ssam  $(foreach m, $(INTERIM_IMAGE_MODULES), $(eval $m-interim-jmod: $($(m)_JMOD_DEPS)))
717104477Ssam
718104477Ssam  # Jmods cannot be created until we have the jmod tool ready to run. During
719104477Ssam  # a normal build we run it from the exploded image, but when cross compiling
720104477Ssam  # it's run from the buildjdk, which is either created at build time or user
721104477Ssam  # supplied.
722104477Ssam  #
723104477Ssam  # For the exploded image to be runnable, all java modules and
724104477Ssam  # jdk.jlink-launchers need to be built. We also need to copy jvm.cfg (done
725104477Ssam  # in java.base-copy) and tzdb.dat (done in java.base-gendata) to the
726104477Ssam  # appropriate location otherwise jimage, jlink and jmod won't start. This
727104477Ssam  # also applies when creating the buildjdk.
728104477Ssam  DEFAULT_JMOD_DEPS := java.base-libs java.base-copy java.base-gendata \
729104477Ssam      jdk.jlink-launchers
730104477Ssam  # When cross compiling and buildjdk is to be created, depend on creating the
731104477Ssam  # buildjdk instead of the default dependencies.
732104477Ssam  ifeq ($(CREATE_BUILDJDK), true)
733104477Ssam    # Avoid calling create-buildjdk from within a create-buildjdk call.
734112124Ssam    ifneq ($(CREATING_BUILDJDK), true)
735112124Ssam      $(JMOD_TARGETS): create-buildjdk
736104477Ssam      buildtools-modules: create-buildjdk
737104477Ssam    else
738104477Ssam      # While actually creating the buildjdk, the default deps applies.
739104477Ssam      $(JMOD_TARGETS) $(INTERIM_JMOD_TARGETS): $(DEFAULT_JMOD_DEPS)
740104477Ssam    endif
741104477Ssam  else
742104477Ssam    # The normal non cross compilation case uses the default deps.
743104477Ssam    # To avoid races with the optimize target, that also needs to happen first.
744112124Ssam    $(JMOD_TARGETS) $(INTERIM_JMOD_TARGETS): $(DEFAULT_JMOD_DEPS) \
745112124Ssam        exploded-image-optimize
746104477Ssam  endif
747104477Ssam
748104477Ssam  # All modules include the main license files from java.base.
749104477Ssam  $(JMOD_TARGETS): java.base-copy
750104477Ssam
751104477Ssam  zip-security: java.base-java java.security.jgss-java java.security.jgss-libs \
752104477Ssam      $(filter jdk.crypto%, $(JAVA_TARGETS))
753104477Ssam
754104477Ssam  zip-source: gensrc rmic
755104477Ssam
756104477Ssam  jrtfs-jar: interim-langtools
757104477Ssam
758104477Ssam  ifeq ($(ENABLE_GENERATE_CLASSLIST), true)
759104477Ssam    ifeq ($(CREATE_BUILDJDK), true)
760104477Ssam      # If creating a buildjdk, the interim image needs to be based on that.
761104477Ssam      generate-link-opt-data: create-buildjdk
762104477Ssam    else ifeq ($(EXTERNAL_BUILDJDK), false)
763104477Ssam      # If an external buildjdk has been provided, we skip generating an
764104477Ssam      # interim-image and just use the external buildjdk for generating
765104477Ssam      # classlist.
766104477Ssam      generate-link-opt-data: interim-image
767104477Ssam    endif
768104477Ssam    generate-link-opt-data: buildtools-jdk
769104477Ssam
770104477Ssam    # The generated classlist needs to go into java.base-jmod.
771104477Ssam    java.base-jmod jdk.jlink-jmod jdk-image jre-image: generate-link-opt-data
772104477Ssam  endif
773104477Ssam
774104477Ssam  release-file: create-source-revision-tracker
775104477Ssam
776104477Ssam  jdk-image: jmods zip-source demos release-file
777104477Ssam  jre-image: jmods release-file
778104477Ssam  symbols-image: $(LIBS_TARGETS) $(LAUNCHER_TARGETS)
779104477Ssam
780104477Ssam  profiles-image: jmods release-file
781104477Ssam
782104477Ssam  mac-bundles-jdk: jdk-image jre-image
783104477Ssam
784104477Ssam  # The optimize target can run as soon as the modules dir has been completely
785104477Ssam  # populated (java, copy and gendata targets) and the basic libs and launchers
786104477Ssam  # have been built.
787104477Ssam  exploded-image-optimize: java copy gendata java.base-libs java.base-launchers \
788104477Ssam      buildtools-modules
789104477Ssam
790104477Ssam  bootcycle-images: jdk-image
791104477Ssam
792104477Ssam  docs-jdk-api-javadoc: $(GENSRC_TARGETS) rmic
793104477Ssam
794104477Ssam  docs-javase-api-javadoc: $(GENSRC_TARGETS) rmic
795104477Ssam
796104477Ssam  docs-jdk-api-modulegraph: exploded-image buildtools-modules
797104477Ssam
798104477Ssam  docs-javase-api-modulegraph: exploded-image buildtools-modules
799104477Ssam
800104477Ssam  # The gensrc steps for hotspot and jdk.jdi create html spec files.
801104477Ssam  docs-jdk-specs: hotspot-$(JVM_VARIANT_MAIN)-gensrc jdk.jdi-gensrc \
802104477Ssam      docs-jdk-index
803104477Ssam
804104477Ssam  docs-jdk-index: exploded-image buildtools-modules
805104477Ssam
806104477Ssam  docs-zip: docs-jdk
807104477Ssam
808104477Ssam  test: jdk-image test-image
809104477Ssam
810104477Ssam  run-test: jdk-image test-image
811104477Ssam
812104477Ssam  # Declare dependency for all generated test targets
813104477Ssam  $(foreach t, $(ALL_TEST_TARGETS), $(eval $t: jdk-image test-image))
814104477Ssam
815104477Ssam  create-buildjdk-copy: jdk.jlink-java java.base-gendata \
816104477Ssam      $(addsuffix -java, $(INTERIM_IMAGE_MODULES))
817104477Ssam
818104477Ssam  create-buildjdk-interim-image: create-buildjdk-copy
819104477Ssam
820104477Ssam  interim-image: $(INTERIM_JMOD_TARGETS)
821104477Ssam
822104477Ssam  test-make: clean-test-make
823104477Ssam
824104477Ssam  build-test-lib: exploded-image-optimize
825104477Ssam
826104477Ssam  build-test-failure-handler: interim-langtools
827104477Ssam
828104477Ssam  test-failure-handler: build-test-failure-handler
829104477Ssam
830104477Ssam  test-image-failure-handler: build-test-failure-handler
831104477Ssam
832104477Ssam  build-test-hotspot-jtreg-native: buildtools-jdk \
833104477Ssam      hotspot-$(JVM_VARIANT_MAIN)-libs
834104477Ssam
835104477Ssam  build-test-jdk-jtreg-native: buildtools-jdk
836104477Ssam
837104477Ssam  test-image-hotspot-jtreg-native: build-test-hotspot-jtreg-native
838104477Ssam
839104477Ssam  test-image-jdk-jtreg-native: build-test-jdk-jtreg-native
840104477Ssam
841104477Ssam  test-image-hotspot-gtest: hotspot
842104477Ssam
843104477Ssam  test-hotspot-internal: exploded-image
844104477Ssam
845104477Ssam  test-hotspot-jtreg: jdk-image test-image
846104477Ssam
847104477Ssam  test-hotspot-gtest: exploded-image test-image-hotspot-gtest
848104477Ssam
849104477Ssam  install: product-images
850104477Ssam
851104477Ssam  product-bundles: product-images
852104477Ssam
853104477Ssam  profiles-bundles: profiles-images
854104477Ssam
855104477Ssam  test-bundles: test-image
856104477Ssam
857104477Ssam  docs-bundles: docs-image
858104477Ssam
859104477Ssam  generate-summary: jmods buildtools-modules
860104477Ssam
861104477Ssamendif
862104477Ssam
863104477Ssam################################################################################
864104477Ssam# Virtual targets without recipes
865104477Ssam
866104477Ssambuildtools: buildtools-langtools interim-langtools interim-rmic \
867104477Ssam    buildtools-jdk buildtools-hotspot
868104477Ssam
869104477Ssamhotspot: $(HOTSPOT_VARIANT_TARGETS) hotspot-jsig
870104477Ssam
871104477Ssamhotspot-libs: hotspot-jsig
872104477Ssam
873104477Ssam# Create targets hotspot-libs and hotspot-gensrc.
874104477Ssam$(foreach v, $(JVM_VARIANTS), \
875104477Ssam  $(eval hotspot-libs: hotspot-$v-libs) \
876104477Ssam  $(eval hotspot-gensrc: hotspot-$v-gensrc) \
877104477Ssam)
878104477Ssam
879104477Ssamgensrc: $(GENSRC_TARGETS)
880104477Ssam
881104477Ssamgendata: $(GENDATA_TARGETS)
882104477Ssam
883104477Ssamcopy: $(ALL_COPY_TARGETS)
884104477Ssam
885104477Ssamjava: $(JAVA_TARGETS)
886104477Ssam
887104477Ssamrmic: $(RMIC_TARGETS)
888104477Ssam
889104477Ssamlibs: $(LIBS_TARGETS)
890104477Ssam
891104477Ssamlaunchers: $(LAUNCHER_TARGETS)
892104477Ssam
893104477Ssamjmods: $(JMOD_TARGETS)
894104477Ssam
895104477Ssam# Explicitly declare dependency for virtual target jdk.jdwp.agent-gensrc which
896104477Ssam# is actually handled by jdk.jdi-gensrc
897104477Ssamjdk.jdwp.agent-gensrc: jdk.jdi-gensrc
898104477Ssam
899104477Ssam# Declare dependencies from <module> to all the individual targets specific
900104477Ssam# to that module <module>-*, that are needed for the exploded image.
901104477Ssam$(foreach m, $(GENSRC_MODULES), $(eval $m: $m-gensrc))
902104477Ssam$(foreach m, $(JAVA_MODULES), $(eval $m: $m-java))
903104477Ssam$(foreach m, $(GENDATA_MODULES), $(eval $m: $m-gendata))
904104477Ssam$(foreach m, $(RMIC_MODULES), $(eval $m: $m-rmic))
905104477Ssam$(foreach m, $(LIBS_MODULES), $(eval $m: $m-libs))
906104477Ssam$(foreach m, $(LAUNCHER_MODULES), $(eval $m: $m-launchers))
907104477Ssam$(foreach m, $(ALL_COPY_MODULES), $(eval $m: $m-copy))
908104477Ssam
909104477Ssam# Building java.base includes building all of hotspot.
910104477Ssamjava.base: hotspot
911104477Ssam
912104477Ssamdemos: demos-jdk
913104477Ssam
914104477Ssam# The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk.
915104477Ssamexploded-image-base: $(ALL_MODULES)
916104477Ssamexploded-image: exploded-image-base release-file
917104477Ssam# When cross compiling, no need to optimize the exploded image since it won't
918104477Ssam# be runnable on the host platform anyway.
919104477Ssamifneq ($(COMPILE_TYPE), cross)
920104477Ssam  exploded-image: exploded-image-optimize
921104477Ssamendif
922104477Ssam
923104477Ssamcreate-buildjdk: create-buildjdk-copy create-buildjdk-interim-image
924104477Ssam
925104477Ssamdocs-jdk-api: docs-jdk-api-javadoc
926104477Ssamdocs-javase-api: docs-javase-api-javadoc
927104477Ssam
928104477Ssam# If we're building full docs, we must also generate the module graphs to
929104477Ssam# get non-broken api documentation.
930104477Ssamifeq ($(ENABLE_FULL_DOCS), true)
931104477Ssam  docs-jdk-api: docs-jdk-api-modulegraph
932104477Ssam  docs-javase-api: docs-javase-api-modulegraph
933104477Ssamendif
934104477Ssam
935104477Ssamdocs-jdk: docs-jdk-api docs-jdk-specs docs-jdk-index
936104477Ssamdocs-javase: docs-javase-api
937104477Ssam
938104477Ssam# alias for backwards compatibility
939104477Ssamdocs-javadoc: docs-jdk-api
940104477Ssam
941104477Ssammac-bundles: mac-bundles-jdk
942104477Ssam
943104477Ssam# The $(BUILD_OUTPUT)/images directory contain the resulting deliverables,
944104477Ssam# and in line with this, our targets for creating these are named *-image[s].
945104477Ssam
946104477Ssam# This target builds the product images, e.g. the JRE and JDK image
947104477Ssam# (and possibly other, more specific versions)
948104477Ssamproduct-images: jdk-image jre-image symbols-image exploded-image
949104477Ssam
950104477Ssam# zip-security is actually a bundle, but for now it needs to be considered
951104477Ssam# an image until this can be cleaned up properly.
952104477Ssamproduct-images: zip-security
953104477Ssam
954104477Ssam# Declare these for backwards compatiblity and convenience.
955104477Ssamprofiles profiles-images: profiles-image
956104477Ssam
957104477Ssam# The module summary cannot be run when:
958104477Ssam# * Cross compiling and building a partial BUILDJDK for the build host
959104477Ssam# * An external buildjdk has been supplied since it may not match the
960104477Ssam#   module selection of the target jdk
961104477Ssamifneq ($(CREATE_BUILDJDK), true)
962104477Ssam  ifeq ($(EXTERNAL_BUILDJDK), false)
963104477Ssam    product-images: generate-summary
964104477Ssam  endif
965104477Ssamendif
966104477Ssam
967104477Ssamifeq ($(OPENJDK_TARGET_OS), macosx)
968104477Ssam  product-images: mac-bundles
969104477Ssamendif
970104477Ssam
971104477Ssam# This target builds the documentation image
972104477Ssamdocs-image: docs-jdk
973104477Ssam
974104477Ssam# This target builds the test image
975104477Ssamtest-image: prepare-test-image test-image-hotspot-jtreg-native \
976104477Ssam    test-image-jdk-jtreg-native test-image-failure-handler test-image-hotspot-gtest \
977104477Ssam    test-image-demos-jdk
978104477Ssam
979104477Ssam# all-images builds all our deliverables as images.
980104477Ssamall-images: product-images test-image docs-image
981104477Ssam
982104477Ssam# all-bundles packages all our deliverables as tar.gz bundles.
983104477Ssamall-bundles: product-bundles test-bundles docs-bundles
984104477Ssam
985104477SsamALL_TARGETS += buildtools hotspot hotspot-libs hotspot-gensrc gensrc gendata \
986104477Ssam    copy java rmic libs launchers jmods \
987104477Ssam    jdk.jdwp.agent-gensrc $(ALL_MODULES) demos \
988104477Ssam    exploded-image-base exploded-image \
989104477Ssam    create-buildjdk docs-jdk-api docs-javase-api docs-jdk docs-javase \
990104477Ssam    docs-javadoc mac-bundles product-images \
991104477Ssam    profiles profiles-images \
992104477Ssam    docs-image test-image all-images \
993104477Ssam    all-bundles
994104477Ssam
995104477Ssam################################################################################
996104477Ssam
997104477Ssam# Traditional targets typically run by users.
998104477Ssam# These can be considered aliases for the targets now named by a more
999104477Ssam# "modern" naming scheme.
1000104477Ssamdefault: $(DEFAULT_MAKE_TARGET)
1001104477Ssamjdk: exploded-image
1002104477Ssamimages: product-images
1003104477Ssamdocs: docs-image
1004104477Ssambundles: all-bundles
1005104477Ssamall: all-images
1006104477Ssam
1007104477SsamALL_TARGETS += default jdk images docs bundles all
1008104477Ssam
1009104477Ssam################################################################################
1010104477Ssam################################################################################
1011104477Ssam#
1012104477Ssam# Clean targets
1013104477Ssam#
1014104477Ssam################################################################################
1015104477Ssam# Clean targets are automatically run serially by the Makefile calling this
1016104477Ssam# file.
1017104477Ssam
1018104477SsamCLEAN_DIRS += hotspot jdk bootcycle-build test buildtools support \
1019104477Ssam    images make-support test-make bundles buildjdk
1020104477SsamCLEAN_DIR_TARGETS := $(addprefix clean-, $(CLEAN_DIRS))
1021104477SsamCLEAN_SUPPORT_DIRS += demos
1022104477SsamCLEAN_SUPPORT_DIR_TARGETS := $(addprefix clean-, $(CLEAN_SUPPORT_DIRS))
1023104477SsamCLEAN_TESTS += hotspot-jtreg-native jdk-jtreg-native lib
1024104477SsamCLEAN_TEST_TARGETS += $(addprefix clean-test-, $(CLEAN_TESTS))
1025104477SsamCLEAN_PHASES := gensrc java native include
1026104477SsamCLEAN_PHASE_TARGETS := $(addprefix clean-, $(CLEAN_PHASES))
1027104477SsamCLEAN_MODULE_TARGETS := $(addprefix clean-, $(ALL_MODULES))
1028104477Ssam# Construct targets of the form clean-$module-$phase
1029104477SsamCLEAN_MODULE_PHASE_TARGETS := $(addprefix clean-, $(foreach m, $(ALL_MODULES), \
1030104477Ssam    $(addprefix $m-, $(CLEAN_PHASES))))
1031104477Ssam
1032104477Ssam# Remove everything, except the output from configure.
1033104477Ssamclean: $(CLEAN_DIR_TARGETS)
1034104477Ssam	($(CD) $(OUTPUT_ROOT) && $(RM) -r build*.log*)
1035104477Ssam	$(ECHO) Cleaned all build artifacts.
1036104477Ssam
1037104477Ssamclean-docs:
1038104477Ssam	$(call CleanDocs)
1039104477Ssam
1040104477Ssam$(CLEAN_DIR_TARGETS):
1041104477Ssam	$(call CleanDir,$(patsubst clean-%, %, $@))
1042104477Ssam
1043104477Ssam$(CLEAN_SUPPORT_DIR_TARGETS):
1044104477Ssam	$(call CleanSupportDir,$(patsubst clean-%, %, $@))
1045104477Ssam
1046104477Ssam$(CLEAN_TEST_TARGETS):
1047104477Ssam	$(call CleanTest,$(patsubst clean-test-%, %, $@))
1048104477Ssam
1049104477Ssam$(CLEAN_PHASE_TARGETS):
1050104477Ssam	$(call Clean-$(patsubst clean-%,%, $@))
1051104477Ssam
1052104477Ssam$(CLEAN_MODULE_TARGETS):
1053104477Ssam	$(call CleanModule,$(patsubst clean-%, %, $@))
1054104477Ssam
1055104477Ssam$(CLEAN_MODULE_PHASE_TARGETS):
1056104477Ssam	$(call Clean-$(word 3, $(subst -,$(SPACE),$@)), \
1057104477Ssam	    $(word 2, $(subst -,$(SPACE),$@)))
1058104477Ssam
1059104477Ssam# When removing the support dir, we must also remove jdk. Building classes has
1060104477Ssam# the side effect of generating native headers. The headers end up in support
1061104477Ssam# while classes and touch files end up in jdk.
1062104477Ssamclean-support: clean-jdk
1063104477Ssam
1064104477Ssam# Remove everything, including configure configuration. If the output
1065104477Ssam# directory was created by configure and now becomes empty, remove it as well.
1066104477Ssamdist-clean: clean
1067104477Ssam	($(CD) $(OUTPUT_ROOT) && \
1068104477Ssam	    $(RM) -r *spec.gmk $(CONFIGURESUPPORT_OUTPUTDIR) Makefile compare.sh ide)
1069104477Ssam	$(if $(filter $(CONF_NAME),$(notdir $(OUTPUT_ROOT))), \
1070104477Ssam	  if test "x`$(LS) $(OUTPUT_ROOT)`" != x; then \
1071104477Ssam	    $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ; \
1072104477Ssam	  else \
1073104477Ssam	    ($(CD) $(SRC_ROOT) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" \
1074104477Ssam	        && $(RM) -r $(OUTPUT_ROOT)) \
1075104477Ssam	  fi \
1076104477Ssam	)
1077104477Ssam	$(ECHO) Cleaned everything, you will have to re-run configure.
1078104477Ssam
1079104477SsamALL_TARGETS += clean clean-docs dist-clean $(CLEAN_DIR_TARGETS) $(CLEAN_SUPPORT_DIR_TARGETS) \
1080104477Ssam    $(CLEAN_TEST_TARGETS) $(CLEAN_PHASE_TARGETS) $(CLEAN_MODULE_TARGETS) \
1081104477Ssam    $(CLEAN_MODULE_PHASE_TARGETS)
1082104477Ssam
1083104477Ssam################################################################################
1084104477Ssam# Declare *-only targets for each normal target
1085104477Ssam$(foreach t, $(ALL_TARGETS), $(eval $(t)-only: $(t)))
1086104477Ssam
1087104477SsamALL_TARGETS += $(addsuffix -only, $(filter-out dist-clean clean%, $(ALL_TARGETS)))
1088104477Ssam
1089104477Ssam################################################################################
1090104477Ssam
1091104477Ssam# Include JPRT targets
1092104477Ssaminclude $(SRC_ROOT)/make/Jprt.gmk
1093104477Ssam
1094104477Ssam################################################################################
1095104477Ssam
1096104477Ssam# The following targets are intentionally not added to ALL_TARGETS since they
1097104477Ssam# are internal only, to support Init.gmk.
1098104477Ssam
1099104477Ssamprint-targets:
1100104477Ssam	  @$(ECHO) $(sort $(ALL_TARGETS))
1101104477Ssam
1102104477Ssamprint-modules:
1103104477Ssam	  @$(ECHO) $(sort $(ALL_MODULES))
1104104477Ssam
1105104477Ssamprint-tests:
1106104477Ssam	  @$(ECHO) $(sort $(ALL_NAMED_TESTS))
1107104477Ssam
1108104477Ssamcreate-main-targets-include:
1109104477Ssam	  $(call LogInfo, Generating main target list)
1110104477Ssam	  @$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \
1111104477Ssam	      $(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk
1112104477Ssam
1113104477Ssam################################################################################
1114104477Ssam
1115104477Ssam.PHONY: $(ALL_TARGETS)
1116104477Ssam
1117104477SsamFRC: # Force target
1118104477Ssam