Main.gmk revision 2081:278dbe271a52
1189251Ssam#
2214734Srpaulo# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
3214734Srpaulo# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4189251Ssam#
5252726Srpaulo# This code is free software; you can redistribute it and/or modify it
6252726Srpaulo# under the terms of the GNU General Public License version 2 only, as
7189251Ssam# published by the Free Software Foundation.  Oracle designates this
8189251Ssam# particular file as subject to the "Classpath" exception as provided
9189251Ssam# by Oracle in the LICENSE file that accompanied this code.
10189251Ssam#
11189251Ssam# This code is distributed in the hope that it will be useful, but WITHOUT
12189251Ssam# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13189251Ssam# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14189251Ssam# version 2 for more details (a copy is included in the LICENSE file that
15189251Ssam# accompanied this code).
16189251Ssam#
17189251Ssam# You should have received a copy of the GNU General Public License version
18189251Ssam# 2 along with this work; if not, write to the Free Software Foundation,
19189251Ssam# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20189251Ssam#
21189251Ssam# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22189251Ssam# or visit www.oracle.com if you need additional information or have any
23189251Ssam# questions.
24189251Ssam#
25189251Ssam
26189251Ssam################################################################################
27189251Ssam# This is the main makefile containing most actual top level targets. It needs
28189251Ssam# to be called with a SPEC file defined.
29189251Ssam################################################################################
30189251Ssam
31189251Ssam# Declare default target
32189251Ssamdefault:
33189251Ssam
34189251Ssamifeq ($(wildcard $(SPEC)),)
35189251Ssam  $(error Main.gmk needs SPEC set to a proper spec.gmk)
36189251Ssamendif
37189251Ssam
38189251Ssam# Now load the spec
39189251Ssaminclude $(SPEC)
40189251Ssam
41189251Ssaminclude $(SRC_ROOT)/make/MainSupport.gmk
42189251Ssam
43189251Ssam# Load the vital tools for all the makefiles.
44189251Ssaminclude $(SRC_ROOT)/make/common/MakeBase.gmk
45189251Ssaminclude $(SRC_ROOT)/make/common/Modules.gmk
46189251Ssam
47189251Ssam# Declare ALL_TARGETS as an immediate variable. This variable is a list of all
48189251Ssam# valid top level targets. It's used to declare them all as PHONY and to
49189251Ssam# generate the -only targets.
50189251SsamALL_TARGETS :=
51189251Ssam
52189251Ssam# Hook to include the corresponding custom file, if present.
53189251Ssam$(eval $(call IncludeCustomExtension, , Main.gmk))
54189251Ssam
55189251Ssam# All modules for the current target platform.
56189251SsamALL_MODULES := $(call FindAllModules)
57189251Ssam
58189251Ssam################################################################################
59189251Ssam################################################################################
60189251Ssam#
61189251Ssam# Recipes for all targets. Only recipes, dependencies are declared later.
62189251Ssam#
63189251Ssam################################################################################
64189251Ssam
65189251Ssam################################################################################
66189251Ssam# Interim/build tools targets, compiling tools used during the build
67189251Ssam
68189251Ssambuildtools-langtools:
69189251Ssam	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Tools.gmk)
70189251Ssam
71189251Ssaminterim-langtools:
72189251Ssam	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk)
73189251Ssam
74189251Ssaminterim-rmic:
75189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterimRmic.gmk)
76189251Ssam
77189251Ssaminterim-cldrconverter:
78189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopyInterimCLDRConverter.gmk)
79189251Ssam
80189251Ssambuildtools-jdk:
81189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileTools.gmk)
82189251Ssam
83189251SsamALL_TARGETS += buildtools-langtools interim-langtools \
84189251Ssam    interim-rmic interim-cldrconverter buildtools-jdk
85189251Ssam
86189251Ssam################################################################################
87189251Ssam# Special targets for certain modules
88189251Ssam
89189251Ssamimport-hotspot:
90189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Import.gmk)
91189251Ssam
92189251Ssamunpack-sec:
93189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f UnpackSecurity.gmk)
94189251Ssam
95189251Ssamgenerate-exported-symbols:
96189251Ssam	+($(CD) $(TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f BuildStatic.gmk)
97189251Ssam
98189251SsamALL_TARGETS += import-hotspot unpack-sec generate-exported-symbols
99189251Ssam
100189251Ssam################################################################################
101189251Ssam# Gensrc targets, generating source before java compilation can be done
102189251Ssam$(eval $(call DeclareRecipesForPhase, GENSRC, \
103189251Ssam    TARGET_SUFFIX := gensrc, \
104189251Ssam    FILE_PREFIX := Gensrc, \
105189251Ssam    MAKE_SUBDIR := gensrc, \
106189251Ssam    CHECK_MODULES := $(ALL_MODULES), \
107189251Ssam    MULTIPLE_MAKEFILES := true))
108189251Ssam
109189251SsamJDK_GENSRC_TARGETS := $(filter %-gensrc-jdk, $(GENSRC_TARGETS))
110189251SsamLANGTOOLS_GENSRC_TARGETS := $(filter %-gensrc-langtools, $(GENSRC_TARGETS))
111189251SsamCORBA_GENSRC_TARGETS := $(filter %-gensrc-corba, $(GENSRC_TARGETS))
112189251SsamHOTSPOT_GENSRC_TARGETS := $(filter %-gensrc-hotspot, $(GENSRC_TARGETS))
113189251Ssam
114189251SsamGENSRC_MODULEINFO_MODULES := $(ALL_MODULES)
115189251SsamGENSRC_MODULEINFO_TARGETS := $(addsuffix -gensrc-moduleinfo, \
116189251Ssam    $(GENSRC_MODULEINFO_MODULES))
117189251Ssam
118189251SsamGENSRC_MODULES := $(GENSRC_MODULEINFO_MODULES)
119189251SsamGENSRC_TARGETS += $(sort $(GENSRC_MODULEINFO_TARGETS) \
120189251Ssam    $(addsuffix -gensrc, $(GENSRC_MODULES)))
121189251Ssam
122189251Ssamdefine DeclareModuleInfoRecipe
123189251Ssam  $1-gensrc-moduleinfo:
124189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
125189251Ssam	    -f GensrcModuleInfo.gmk MODULE=$1)
126189251Ssam
127189251Ssam  $1-gensrc: $1-gensrc-moduleinfo
128189251Ssamendef
129189251Ssam
130189251Ssam$(foreach m, $(GENSRC_MODULEINFO_MODULES), $(eval $(call DeclareModuleInfoRecipe,$m)))
131189251Ssam
132189251SsamALL_TARGETS += $(GENSRC_TARGETS)
133189251Ssam
134189251Ssam################################################################################
135189251Ssam# Generate data targets
136189251Ssam$(eval $(call DeclareRecipesForPhase, GENDATA, \
137189251Ssam    TARGET_SUFFIX := gendata, \
138189251Ssam    FILE_PREFIX := Gendata, \
139189251Ssam    MAKE_SUBDIR := gendata, \
140189251Ssam    CHECK_MODULES := $(ALL_MODULES), \
141189251Ssam    USE_WRAPPER := true))
142189251Ssam
143189251SsamALL_TARGETS += $(GENDATA_TARGETS)
144189251Ssam
145189251Ssam################################################################################
146189251Ssam# Copy files targets
147189251Ssam$(eval $(call DeclareRecipesForPhase, COPY, \
148189251Ssam    TARGET_SUFFIX := copy, \
149189251Ssam    FILE_PREFIX := Copy, \
150189251Ssam    MAKE_SUBDIR := copy, \
151189251Ssam    CHECK_MODULES := $(ALL_MODULES), \
152189251Ssam    USE_WRAPPER := true, \
153189251Ssam    MULTIPLE_MAKEFILES := true))
154189251Ssam
155189251SsamALL_COPY_MODULES += $(COPY_MODULES)
156189251SsamALL_COPY_TARGETS += $(COPY_TARGETS)
157189251Ssam
158189251SsamIMPORT_COPY_MODULES := $(call FindImportedModules)
159189251SsamIMPORT_COPY_TARGETS := $(addsuffix -copy, $(IMPORT_COPY_MODULES))
160189251SsamALL_COPY_MODULES += $(IMPORT_COPY_MODULES)
161189251SsamALL_COPY_TARGETS += $(IMPORT_COPY_TARGETS)
162189251Ssam
163189251Ssamdefine DeclareImportCopyRecipe
164189251Ssam  $1-copy:
165189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
166189251Ssam	    -f CopyImportModules.gmk MODULE=$1)
167189251Ssamendef
168189251Ssam
169189251Ssam$(foreach m, $(IMPORT_COPY_MODULES), $(eval $(call DeclareImportCopyRecipe,$m)))
170189251Ssam
171189251SsamALL_TARGETS += $(ALL_COPY_TARGETS)
172189251Ssam
173189251Ssam################################################################################
174189251Ssam# Targets for compiling all java modules. Nashorn is treated separately.
175189251SsamJAVA_MODULES := $(ALL_MODULES)
176189251SsamJAVA_TARGETS := $(addsuffix -java, $(JAVA_MODULES))
177189251Ssam
178189251Ssamdefine DeclareCompileJavaRecipe
179189251Ssam  $1-java:
180189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
181189251Ssam	    -f CompileJavaModules.gmk MODULE=$1)
182189251Ssamendef
183189251Ssam
184189251Ssam$(foreach m, $(filter-out jdk.scripting.nashorn, $(JAVA_MODULES)), \
185189251Ssam    $(eval $(call DeclareCompileJavaRecipe,$m)))
186189251Ssam
187189251Ssam# Build nashorn. Needs to be compiled separately from the rest of the modules
188189251Ssam# due to nasgen.
189189251Ssamjdk.scripting.nashorn-java:
190189251Ssam	+($(CD) $(NASHORN_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) \
191189251Ssam	    -f BuildNashorn.gmk compile)
192189251Ssam
193189251SsamALL_TARGETS += $(JAVA_TARGETS)
194189251Ssam
195189251Ssam################################################################################
196189251Ssam# Targets for running rmic.
197189251Ssam$(eval $(call DeclareRecipesForPhase, RMIC, \
198189251Ssam    TARGET_SUFFIX := rmic, \
199189251Ssam    FILE_PREFIX := Rmic, \
200189251Ssam    MAKE_SUBDIR := rmic, \
201189251Ssam    CHECK_MODULES := $(ALL_MODULES)))
202189251Ssam
203189251SsamALL_TARGETS += $(RMIC_TARGETS)
204189251Ssam
205189251Ssam################################################################################
206189251Ssam# Targets for compiling native libraries
207189251Ssam$(eval $(call DeclareRecipesForPhase, LIBS, \
208189251Ssam    TARGET_SUFFIX := libs, \
209189251Ssam    FILE_PREFIX := Lib, \
210189251Ssam    MAKE_SUBDIR := lib, \
211189251Ssam    CHECK_MODULES := $(ALL_MODULES), \
212214734Srpaulo    USE_WRAPPER := true))
213214734Srpaulo
214189251SsamALL_TARGETS += $(LIBS_TARGETS)
215189251Ssam
216189251Ssam################################################################################
217189251Ssam# Targets for compiling native executables
218189251Ssam$(eval $(call DeclareRecipesForPhase, LAUNCHER, \
219189251Ssam    TARGET_SUFFIX := launchers, \
220189251Ssam    FILE_PREFIX := Launcher, \
221189251Ssam    MAKE_SUBDIR := launcher, \
222189251Ssam    CHECK_MODULES := $(ALL_MODULES), \
223189251Ssam    USE_WRAPPER := true))
224189251Ssam
225189251SsamALL_TARGETS += $(LAUNCHER_TARGETS)
226189251Ssam
227189251Ssam################################################################################
228189251Ssam# Build hotspot target
229189251Ssam
230189251Ssamifeq ($(BUILD_HOTSPOT),true)
231189251Ssamhotspot:
232189251Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f BuildHotspot.gmk)
233189251Ssamendif
234189251Ssam
235189251Ssamhotspot-ide-project:
236189251Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f ide/CreateVSProject.gmk)
237189251Ssam
238189251SsamALL_TARGETS += hotspot hotspot-ide-project
239189251Ssam
240189251Ssam################################################################################
241189251Ssam# Build demos and samples targets
242189251Ssam
243189251Ssamdemos-jdk:
244189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk)
245189251Ssam
246189251Ssamsamples-jdk:
247189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopySamples.gmk)
248189251Ssam
249189251SsamALL_TARGETS += demos-jdk samples-jdk
250189251Ssam
251189251Ssam################################################################################
252189251Ssam# Jigsaw specific data and analysis targets.
253189251Ssam
254189251Ssamgenerate-summary:
255189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) -f GenerateModuleSummary.gmk)
256214734Srpaulo
257189251SsamALL_TARGETS += generate-summary
258189251Ssam
259189251Ssam################################################################################
260214734Srpaulo# Strip binaries targets
261214734Srpaulo
262189251SsamSTRIP_MODULES := $(sort $(LIBS_MODULES) $(LAUNCHER_MODULES) $(COPY_MODULES) \
263189251Ssam    $(GENDATA_MODULES))
264189251SsamSTRIP_TARGETS := $(addsuffix -strip, $(STRIP_MODULES))
265189251Ssam
266189251Ssamdefine DeclareStripRecipe
267189251Ssam  $1-strip:
268189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f StripBinaries.gmk \
269189251Ssam	    MODULE=$1)
270189251Ssamendef
271189251Ssam
272189251Ssam$(foreach m, $(STRIP_MODULES), $(eval $(call DeclareStripRecipe,$m)))
273189251Ssam
274189251SsamALL_TARGETS += $(STRIP_TARGETS)
275189251Ssam
276189251Ssam################################################################################
277189251Ssam# Jmod targets
278189251Ssam
279189251SsamJMOD_MODULES := $(ALL_MODULES)
280189251SsamJMOD_TARGETS := $(addsuffix -jmod, $(JMOD_MODULES))
281189251Ssam
282189251Ssamdefine DeclareJmodRecipe
283189251Ssam  $1-jmod:
284189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateJmods.gmk \
285189251Ssam	    MODULE=$1)
286189251Ssamendef
287189251Ssam
288189251Ssam$(foreach m, $(JMOD_MODULES), $(eval $(call DeclareJmodRecipe,$m)))
289189251Ssam
290189251SsamALL_TARGETS += $(JMOD_TARGETS)
291189251Ssam
292189251Ssam################################################################################
293189251Ssam# Images targets
294189251Ssam
295189251Ssam# Stores the tips for each repository. This file is be used when constructing the jdk image and can be
296189251Ssam# used to track the exact sources used to build that image.
297189251Ssamsource-tips: $(SUPPORT_OUTPUTDIR)/source_tips
298189251Ssam$(SUPPORT_OUTPUTDIR)/source_tips: FRC
299189251Ssam	$(call MakeDir, $(@D))
300189251Ssam	@$(RM) $@
301189251Ssam	@$(call GetSourceTips)
302189251Ssam
303189251SsamBOOTCYCLE_TARGET := product-images
304189251Ssambootcycle-images:
305189251Ssam	@$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image
306189251Ssam	+$(MAKE) -f $(SRC_ROOT)/make/Init.gmk PARALLEL_TARGETS=$(BOOTCYCLE_TARGET) \
307189251Ssam	    JOBS= SPEC=$(dir $(SPEC))bootcycle-spec.gmk main
308189251Ssam
309189251Ssamzip-security:
310189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSecurity.gmk)
311214734Srpaulo
312214734Srpaulozip-source:
313214734Srpaulo	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSource.gmk)
314214734Srpaulo
315189251Ssamjrtfs-jar:
316214734Srpaulo	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f JrtfsJar.gmk)
317189251Ssam
318189251Ssamjimages:
319189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk jimages)
320189251Ssam
321189251Ssamprofiles:
322214734Srpaulo	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk profiles)
323189251Ssam
324189251Ssammac-bundles-jdk:
325189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f MacBundles.gmk)
326189251Ssam
327214734SrpauloALL_TARGETS += source-tips bootcycle-images zip-security zip-source \
328214734Srpaulo    jrtfs-jar jimages profiles mac-bundles-jdk
329189251Ssam
330189251Ssam################################################################################
331214734Srpaulo# Docs targets
332189251Ssam
333189251Ssamdocs-javadoc:
334189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs)
335189251Ssam
336189251Ssamdocs-jvmtidoc:
337189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk jvmtidocs)
338189251Ssam
339189251Ssamzip-docs:
340214734Srpaulo	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk zip-docs)
341214734Srpaulo
342189251SsamALL_TARGETS += docs-javadoc docs-jvmtidoc zip-docs
343189251Ssam
344189251Ssam################################################################################
345189251Ssam# Cross compilation support
346189251Ssam
347189251Ssamifeq ($(CREATING_BUILDJDK), true)
348189251Ssam  # This target is only called by the recursive call below.
349189251Ssam  create-buildjdk-interim-image-helper: interim-image jdk.jlink-launchers \
350189251Ssam      java.base-copy jdk.jdeps-launchers
351189251Ssamendif
352189251Ssam
353189251Ssamcreate-buildjdk-copy:
354189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CreateBuildJdkCopy.gmk)
355189251Ssam
356189251Ssamcreate-buildjdk-interim-image:
357189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Main.gmk \
358189251Ssam	    $@-helper \
359189251Ssam	    SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
360189251Ssam	    HOTSPOT_SPEC=$(dir $(SPEC))buildjdk-spec.gmk \
361189251Ssam	    CREATING_BUILDJDK=true)
362189251Ssam
363189251SsamALL_TARGETS += create-buildjdk-copy create-buildjdk-interim-image
364189251Ssam
365189251Ssam################################################################################
366189251Ssam# The interim-image is a small jlinked image that is used to generate artifacts 
367189251Ssam# at build time for use when linking the real images.
368189251Ssam
369189251Ssaminterim-image:
370189251Ssam	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f InterimImage.gmk)
371189251Ssam
372189251Ssamgenerate-classlist:
373189251Ssam	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f GenerateClasslist.gmk)
374189251Ssam
375189251SsamALL_TARGETS += interim-image generate-classlist
376189251Ssam
377189251Ssam################################################################################
378189251Ssam# Build tests
379189251Ssam#
380189251Ssam
381189251Ssamprepare-test-image:
382189251Ssam	$(MKDIR) -p $(TEST_IMAGE_DIR)
383189251Ssam	$(ECHO) > $(TEST_IMAGE_DIR)/Readme.txt 'JDK test image'
384189251Ssam
385189251Ssambuild-test-hotspot-jtreg-native:
386214734Srpaulo	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
387214734Srpaulo	    build-test-hotspot-jtreg-native)
388189251Ssam
389189251Ssamtest-image-hotspot-jtreg-native:
390189251Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
391189251Ssam	    test-image-hotspot-jtreg-native)
392189251Ssam
393189251Ssambuild-test-jdk-jtreg-native:
394189251Ssam	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
395189251Ssam	    build-test-jdk-jtreg-native)
396189251Ssam
397189251Ssamtest-image-jdk-jtreg-native:
398189251Ssam	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
399189251Ssam	    test-image-jdk-jtreg-native)
400189251Ssam
401189251Ssamifeq ($(BUILD_GTEST), true)
402189251Ssam  test-image-hotspot-gtest:
403189251Ssam	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f GtestImage.gmk)
404189251Ssamendif
405189251Ssam
406189251Ssambuild-test-lib:
407189251Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f BuildTestLib.gmk)
408189251Ssam
409189251Ssamifeq ($(BUILD_FAILURE_HANDLER), true)
410189251Ssam  # Builds the failure handler jtreg extension
411214734Srpaulo  build-test-failure-handler:
412189251Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
413189251Ssam	    -f BuildFailureHandler.gmk build)
414189251Ssam
415189251Ssam  # Runs the tests for the failure handler jtreg extension
416189251Ssam  test-failure-handler:
417189251Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
418214734Srpaulo	    -f BuildFailureHandler.gmk test)
419214734Srpaulo
420214734Srpaulo  # Copies the failure handler jtreg extension into the test image
421189251Ssam  test-image-failure-handler:
422189251Ssam	+($(CD) $(TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) \
423189251Ssam	     -f BuildFailureHandler.gmk images)
424189251Ssamendif
425189251Ssam
426189251SsamALL_TARGETS += prepare-test-image build-test-hotspot-jtreg-native \
427189251Ssam    test-image-hotspot-jtreg-native build-test-jdk-jtreg-native \
428189251Ssam    test-image-jdk-jtreg-native build-test-lib build-test-failure-handler \
429189251Ssam    test-failure-handler test-image-failure-handler test-image-hotspot-gtest
430189251Ssam
431189251Ssam################################################################################
432189251Ssam# Run tests
433189251Ssam
434189251Ssam# Run tests specified by $(TEST), or the default test set.
435189251Ssamtest:
436189251Ssam	$(call RunTests, $(TEST))
437189251Ssam
438189251Ssamtest-hotspot-jtreg:
439189251Ssam	$(call RunTests, "hotspot_all")
440189251Ssam
441189251Ssamtest-hotspot-jtreg-native:
442189251Ssam	$(call RunTests, "hotspot_native_sanity")
443189251Ssam
444189251Ssamtest-hotspot-internal:
445189251Ssam	$(call RunTests, "hotspot_internal")
446189251Ssam
447189251Ssamtest-jdk-jtreg-native:
448189251Ssam	$(call RunTests, "jdk_native_sanity")
449189251Ssam
450189251Ssamtest-make:
451189251Ssam	($(CD) $(SRC_ROOT)/test/make && $(MAKE) $(MAKE_ARGS) -f TestMake.gmk $(TEST_TARGET))
452189251Ssam
453189251SsamALL_TARGETS += test test-hotspot-jtreg test-hotspot-jtreg-native \
454189251Ssam    test-hotspot-internal test-jdk-jtreg-native test-make
455189251Ssam
456189251Ssam################################################################################
457189251Ssam# Install targets
458214734Srpaulo
459214734Srpauloinstall:
460214734Srpaulo	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Install.gmk)
461214734Srpaulo
462189251SsamALL_TARGETS += install
463189251Ssam
464189251Ssam################################################################################
465189251Ssam#
466189251Ssam# Dependency declarations between targets.
467214734Srpaulo#
468214734Srpaulo# These are declared in two groups. First all dependencies between targets that
469214734Srpaulo# have recipes above as these dependencies may be disabled. Then the aggregator
470189251Ssam# targets that do not have recipes of their own, which will never have their
471214734Srpaulo# dependencies disabled.
472189251Ssam#
473189251Ssam################################################################################
474189251Ssam# Targets with recipes above
475189251Ssam
476189251Ssam# If running an *-only target, parallel execution and dependencies between
477214734Srpaulo# recipe targets are disabled. This makes it possible to run a select set of
478189251Ssam# recipe targets in order. It's the responsibility of the user to make sure
479189251Ssam# all prerequisites are fulfilled.
480189251Ssamifneq ($(findstring -only, $(MAKECMDGOALS)), )
481189251Ssam  .NOTPARALLEL:
482189251Ssamelse
483189251Ssam  $(LANGTOOLS_GENSRC_TARGETS): buildtools-langtools
484189251Ssam
485214734Srpaulo  interim-langtools: $(LANGTOOLS_GENSRC_TARGETS)
486189251Ssam
487189251Ssam  buildtools-jdk: interim-langtools interim-cldrconverter
488189251Ssam
489189251Ssam  $(CORBA_GENSRC_TARGETS): interim-langtools
490189251Ssam
491189251Ssam  $(HOTSPOT_GENSRC_TARGETS): interim-langtools
492214734Srpaulo
493214734Srpaulo  $(JDK_GENSRC_TARGETS): interim-langtools buildtools-jdk
494189251Ssam
495189251Ssam  $(GENSRC_MODULEINFO_TARGETS): buildtools-jdk
496214734Srpaulo
497189251Ssam  $(GENDATA_TARGETS): interim-langtools buildtools-jdk
498189251Ssam
499189251Ssam  interim-rmic: interim-langtools
500214734Srpaulo
501214734Srpaulo  $(RMIC_TARGETS): interim-langtools interim-rmic
502214734Srpaulo
503189251Ssam  $(JAVA_TARGETS): interim-langtools
504189251Ssam
505214734Srpaulo  hotspot-ide-project: hotspot exploded-image
506189251Ssam
507189251Ssam  import-hotspot: hotspot
508189251Ssam
509189251Ssam  generate-exported-symbols: java.base-libs jdk.jdwp.agent-libs
510189251Ssam
511189251Ssam  $(LIBS_TARGETS): import-hotspot
512189251Ssam
513189251Ssam  $(LAUNCHER_TARGETS): java.base-libs
514189251Ssam
515189251Ssam  ifeq ($(STATIC_BUILD), true)
516189251Ssam    $(LAUNCHER_TARGETS): generate-exported-symbols
517189251Ssam  endif
518189251Ssam
519189251Ssam  # The demos are currently linking to libjvm and libjava, just like all other
520189251Ssam  # jdk libs, even though they don't need to. To avoid warnings, make sure they
521189251Ssam  # aren't built until after libjava and libjvm are available to link to.
522189251Ssam  demos-jdk: $(JAVA_TARGETS)
523189251Ssam
524214734Srpaulo  # Declare dependency from <module>-java to <module>-gensrc
525189251Ssam  $(foreach m, $(GENSRC_MODULES), $(eval $m-java: $m-gensrc))
526189251Ssam
527189251Ssam  # Declare dependencies between java modules
528189251Ssam  $(foreach m, $(JAVA_MODULES), \
529189251Ssam      $(eval $m-java: $(addsuffix -java, $(filter $(JAVA_MODULES), \
530189251Ssam      $(call FindDepsForModule,$m)))))
531189251Ssam
532189251Ssam  # Declare dependencies between <module>-rmic to <module>-java
533189251Ssam  $(foreach m, $(RMIC_MODULES), $(eval $m-rmic: $m-java))
534189251Ssam
535189251Ssam  # Declare dependencies from <module>-lib to <module>-java
536189251Ssam  # Skip modules that do not have java source.
537214734Srpaulo  # When creating a BUILDJDK, the java compilation has already been done by the
538214734Srpaulo  # normal build and copied in.
539214734Srpaulo  ifneq ($(CREATING_BUILDJDK), true)
540189251Ssam    $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java))
541189251Ssam  endif
542189251Ssam
543189251Ssam  # Declare dependencies from all other <module>-lib to java.base-lib
544214734Srpaulo  $(foreach t, $(filter-out java.base-libs, $(LIBS_TARGETS)), \
545214734Srpaulo      $(eval $t: java.base-libs))
546189251Ssam
547189251Ssam  # jdk.accessibility depends on java.desktop
548189251Ssam  jdk.accessibility-libs: java.desktop-libs
549214734Srpaulo
550214734Srpaulo  # This dependency needs to be explicitly declared. jdk.jdi-gensrc generates a
551214734Srpaulo  # header file used by jdk.jdwp.agent-libs. The jdk.jdwp.agent-gensrc is a
552189251Ssam  # virtual target.
553214734Srpaulo  jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc
554189251Ssam
555189251Ssam  # The swing beans need to have java base properly generated to avoid errors
556189251Ssam  # in javadoc.
557189251Ssam  java.desktop-gensrc-jdk: java.base-gensrc
558214734Srpaulo
559189251Ssam  # The annotation processing for jdk.vm.ci needs java.base classes from the
560214734Srpaulo  # current JDK.
561214734Srpaulo  jdk.vm.ci-gensrc-hotspot: java.base-java
562189251Ssam
563214734Srpaulo  # Explicitly add dependencies for special targets
564214734Srpaulo  java.base-java: unpack-sec
565214734Srpaulo
566214734Srpaulo  # The copy target copies files generated by gensrc
567214734Srpaulo  java.base-copy-hotspot: java.base-gensrc-hotspot
568189251Ssam
569189251Ssam  jdk.jdeps-gendata: java rmic
570189251Ssam
571189251Ssam  # Declare dependencies from <module>-strip to libs, launchers, gendata and copy
572189251Ssam  $(foreach m, $(LIBS_MODULES), $(eval $m-strip: $m-libs))
573189251Ssam  $(foreach m, $(LAUNCHER_MODULES), $(eval $m-strip: $m-launchers))
574189251Ssam  $(foreach m, $(GENDATA_MODULES), $(eval $m-strip: $m-gendata))
575189251Ssam  $(foreach m, $(COPY_MODULES), $(eval $m-strip: $m-copy))
576189251Ssam
577189251Ssam  # Declare dependencies between jmod targets. Only java.base jmod needs access
578189251Ssam  # to the other jmods to be built.
579189251Ssam  # When creating a BUILDJDK, we don't need to add hashes to java.base, thus
580189251Ssam  # we don't need to depend on all other jmods
581189251Ssam  ifneq ($(CREATING_BUILDJDK), true)
582189251Ssam    java.base-jmod: $(filter-out java.base-jmod, $(JMOD_TARGETS))
583189251Ssam  endif
584189251Ssam
585189251Ssam  # Declare dependencies from <module>-jmod to all other module targets
586189251Ssam  $(foreach m, $(STRIP_MODULES), $(eval $m-jmod: $m-strip))
587189251Ssam  # When creating a BUILDJDK, the java compilation has already been done by the
588189251Ssam  # normal build and copied in.
589189251Ssam  ifneq ($(CREATING_BUILDJDK), true)
590214734Srpaulo    $(foreach m, $(JAVA_MODULES), $(eval $m-jmod: $m-java))
591189251Ssam  endif
592189251Ssam  $(foreach m, $(GENDATA_MODULES), $(eval $m-jmod: $m-gendata))
593189251Ssam  $(foreach m, $(RMIC_MODULES), $(eval $m-jmod: $m-rmic))
594189251Ssam  $(foreach m, $(LIBS_MODULES), $(eval $m-jmod: $m-libs))
595189251Ssam  $(foreach m, $(LAUNCHER_MODULES), $(eval $m-jmod: $m-launchers))
596189251Ssam  $(foreach m, $(COPY_MODULES), $(eval $m-jmod: $m-copy))
597189251Ssam
598189251Ssam  # Jmods cannot be created until we have the jlink tool ready to run, which requires
599189251Ssam  # all java modules to be compiled and jdk.jlink-launchers.
600189251Ssam  $(JMOD_TARGETS): java.base-libs jdk.jlink-launchers
601189251Ssam  # When creating a BUILDJDK, the java compilation has already been done by the
602189251Ssam  # normal build and copied in.
603189251Ssam  ifneq ($(CREATING_BUILDJDK), true)
604189251Ssam    $(JMOD_TARGETS): java
605189251Ssam  endif
606189251Ssam
607214734Srpaulo  ifeq ($(CREATE_BUILDJDK), true)
608214734Srpaulo    # Avoid calling create-buildjdk from within a create-buildjdk call
609189251Ssam    ifneq ($(CREATING_BUILDJDK), true)
610189251Ssam      $(JMOD_TARGETS): create-buildjdk
611189251Ssam    endif
612189251Ssam  endif
613214734Srpaulo
614214734Srpaulo  zip-security: java.base-java java.security.jgss-java java.security.jgss-libs \
615214734Srpaulo      $(filter jdk.crypto%, $(JAVA_TARGETS))
616189251Ssam
617189251Ssam  zip-source: gensrc rmic
618189251Ssam
619189251Ssam  jrtfs-jar: interim-langtools
620214734Srpaulo
621214734Srpaulo  ifeq ($(CREATE_BUILDJDK), true)
622189251Ssam    # If creating a buildjdk, the interim image needs to be based on that.
623189251Ssam    generate-classlist: create-buildjdk
624189251Ssam  else ifeq ($(EXTERNAL_BUILDJDK), false)
625189251Ssam    # If an external buildjdk has been provided, we skip generating an
626189251Ssam    # interim-image and just use the external buildjdk for generating
627189251Ssam    # classlist.
628189251Ssam    generate-classlist: interim-image
629189251Ssam  endif
630189251Ssam  generate-classlist: buildtools-jdk
631189251Ssam
632189251Ssam  jimages: jmods zip-source source-tips demos samples jrtfs-jar generate-classlist
633189251Ssam
634189251Ssam  profiles: jmods zip-source source-tips jrtfs-jar
635189251Ssam
636189251Ssam  mac-bundles-jdk: jimages
637189251Ssam
638189251Ssam  bootcycle-images: jimages
639189251Ssam
640189251Ssam  docs-javadoc: $(GENSRC_TARGETS) rmic
641189251Ssam
642189251Ssam  docs-jvmtidoc: hotspot
643189251Ssam
644189251Ssam  zip-docs: docs-javadoc docs-jvmtidoc
645189251Ssam
646189251Ssam  test: jimages test-image
647189251Ssam
648189251Ssam  create-buildjdk-copy: jdk.jlink-java java.base-gendata \
649189251Ssam      $(addsuffix -java, $(INTERIM_IMAGE_MODULES))
650189251Ssam
651189251Ssam  create-buildjdk-interim-image: create-buildjdk-copy
652189251Ssam
653189251Ssam  interim-image: $(addsuffix -jmod, $(INTERIM_IMAGE_MODULES))
654189251Ssam
655189251Ssam  test-make: clean-test-make
656189251Ssam
657189251Ssam  build-test-lib: java
658189251Ssam
659189251Ssam  build-test-failure-handler: interim-langtools
660189251Ssam
661189251Ssam  test-failure-handler: build-test-failure-handler
662189251Ssam
663189251Ssam  test-image-failure-handler: build-test-failure-handler
664189251Ssam
665189251Ssam  build-test-hotspot-jtreg-native: buildtools-jdk
666189251Ssam
667189251Ssam  build-test-jdk-jtreg-native: buildtools-jdk
668189251Ssam
669189251Ssam  test-image-hotspot-jtreg-native: build-test-hotspot-jtreg-native
670189251Ssam
671189251Ssam  test-image-jdk-jtreg-native: build-test-jdk-jtreg-native
672189251Ssam
673189251Ssam  test-image-hotspot-gtest: hotspot
674189251Ssam
675189251Ssam  test-hotspot-internal: exploded-image
676189251Ssam
677189251Ssam  test-hotspot-jtreg: jimages test-image
678189251Ssam
679189251Ssam  install: product-images
680189251Ssam
681189251Ssam  generate-summary: jmods
682189251Ssam
683189251Ssamendif
684189251Ssam
685189251Ssam################################################################################
686189251Ssam# Virtual targets without recipes
687189251Ssam
688189251Ssambuildtools: buildtools-langtools interim-langtools interim-rmic \
689189251Ssam    buildtools-jdk
690189251Ssam
691189251Ssamgensrc: $(GENSRC_TARGETS)
692189251Ssam
693189251Ssamgendata: $(GENDATA_TARGETS)
694189251Ssam
695189251Ssamcopy: $(ALL_COPY_TARGETS)
696189251Ssam
697189251Ssamjava: $(JAVA_TARGETS)
698189251Ssam
699189251Ssamrmic: $(RMIC_TARGETS)
700189251Ssam
701189251Ssamlibs: $(LIBS_TARGETS)
702189251Ssam
703189251Ssamlaunchers: $(LAUNCHER_TARGETS)
704189251Ssam
705189251Ssamjmods: $(JMOD_TARGETS)
706189251Ssam
707189251Ssamstrip-binaries: $(STRIP_TARGETS)
708189251Ssam
709189251Ssam# Explicitly declare dependency for virtual target jdk.jdwp.agent-gensrc which
710189251Ssam# is actually handled by jdk.jdi-gensrc
711189251Ssamjdk.jdwp.agent-gensrc: jdk.jdi-gensrc
712189251Ssam
713189251Ssam# Declare dependencies from <module> to all the individual targets specific
714189251Ssam# to that module <module>-*, that are needed for the exploded image.
715189251Ssam$(foreach m, $(GENSRC_MODULES), $(eval $m: $m-gensrc))
716189251Ssam$(foreach m, $(JAVA_MODULES), $(eval $m: $m-java))
717189251Ssam$(foreach m, $(GENDATA_MODULES), $(eval $m: $m-gendata))
718189251Ssam$(foreach m, $(RMIC_MODULES), $(eval $m: $m-rmic))
719189251Ssam$(foreach m, $(LIBS_MODULES), $(eval $m: $m-libs))
720189251Ssam$(foreach m, $(LAUNCHER_MODULES), $(eval $m: $m-launchers))
721189251Ssam$(foreach m, $(ALL_COPY_MODULES), $(eval $m: $m-copy))
722189251Ssamdemos: demos-jdk
723189251Ssam
724189251Ssamsamples: samples-jdk
725189251Ssam
726189251Ssam# The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk.
727189251Ssamexploded-image: $(ALL_MODULES)
728189251Ssam
729189251Ssamcreate-buildjdk: create-buildjdk-copy create-buildjdk-interim-image
730189251Ssam
731189251Ssammac-bundles: mac-bundles-jdk
732189251Ssam
733# The $(BUILD_OUTPUT)/images directory contain the resulting deliverables,
734# and in line with this, our targets for creating these are named *-image[s].
735
736# This target builds the product images, e.g. the JRE and JDK image
737# (and possibly other, more specific versions)
738product-images: jimages demos samples zip-security exploded-image
739
740# The module summary cannot be run when:
741# * Cross compiling and building a partial BUILDJDK for the build host
742# * An external buildjdk has been supplied since it may not match the
743#   module selection of the target jdk
744ifneq ($(CREATE_BUILDJDK), true)
745  ifeq ($(EXTERNAL_BUILDJDK), false)
746    product-images: generate-summary
747  endif
748endif
749
750ifeq ($(OPENJDK_TARGET_OS), macosx)
751  product-images: mac-bundles
752endif
753
754# This target builds the documentation image
755docs-image: docs-javadoc docs-jvmtidoc
756
757# This target builds the test image
758test-image: prepare-test-image test-image-hotspot-jtreg-native \
759    test-image-jdk-jtreg-native test-image-failure-handler test-image-hotspot-gtest
760
761# all-images is the top-most target, it builds all our deliverables ("images").
762all-images: product-images test-image docs-image
763
764ALL_TARGETS += buildtools gensrc gendata copy java rmic libs launchers jmods \
765    jdk.jdwp.agent-gensrc $(ALL_MODULES) demos samples exploded-image \
766    create-buildjdk mac-bundles product-images docs-image test-image all-images
767
768################################################################################
769
770# Traditional targets typically run by users.
771# These can be considered aliases for the targets now named by a more
772# "modern" naming scheme.
773default: $(DEFAULT_MAKE_TARGET)
774jdk: exploded-image
775images: product-images
776docs: docs-image
777all: all-images
778
779ALL_TARGETS += default jdk images docs all
780
781################################################################################
782################################################################################
783#
784# Clean targets
785#
786################################################################################
787# Clean targets are automatically run serially by the Makefile calling this
788# file.
789
790CLEAN_DIRS += hotspot jdk bootcycle-build test buildtools support \
791    images make-support test-make bundles buildjdk
792CLEAN_DIR_TARGETS := $(addprefix clean-, $(CLEAN_DIRS))
793CLEAN_SUPPORT_DIRS += demos
794CLEAN_SUPPORT_DIR_TARGETS := $(addprefix clean-, $(CLEAN_SUPPORT_DIRS))
795CLEAN_TESTS += hotspot-jtreg-native jdk-jtreg-native lib
796CLEAN_TEST_TARGETS += $(addprefix clean-test-, $(CLEAN_TESTS))
797CLEAN_PHASES := gensrc java native include docs
798CLEAN_PHASE_TARGETS := $(addprefix clean-, $(CLEAN_PHASES))
799CLEAN_MODULE_TARGETS := $(addprefix clean-, $(ALL_MODULES))
800# Construct targets of the form clean-$module-$phase
801CLEAN_MODULE_PHASE_TARGETS := $(addprefix clean-, $(foreach m, $(ALL_MODULES), \
802    $(addprefix $m-, $(CLEAN_PHASES))))
803
804# Remove everything, except the output from configure.
805clean: $(CLEAN_DIR_TARGETS)
806	($(CD) $(OUTPUT_ROOT) && $(RM) -r build*.log*)
807	$(ECHO) Cleaned all build artifacts.
808
809$(CLEAN_DIR_TARGETS):
810	$(call CleanDir,$(patsubst clean-%, %, $@))
811
812$(CLEAN_SUPPORT_DIR_TARGETS):
813	$(call CleanSupportDir,$(patsubst clean-%, %, $@))
814
815$(CLEAN_TEST_TARGETS):
816	$(call CleanTest,$(patsubst clean-test-%, %, $@))
817
818$(CLEAN_PHASE_TARGETS):
819	$(call Clean-$(patsubst clean-%,%, $@))
820
821$(CLEAN_MODULE_TARGETS):
822	$(call CleanModule,$(patsubst clean-%, %, $@))
823
824$(CLEAN_MODULE_PHASE_TARGETS):
825	$(call Clean-$(word 3, $(subst -,$(SPACE),$@)), \
826	    $(word 2, $(subst -,$(SPACE),$@)))
827
828# When removing the support dir, we must also remove jdk. Building classes has
829# the side effect of generating native headers. The headers end up in support
830# while classes and touch files end up in jdk.
831clean-support: clean-jdk
832
833# Remove everything, including configure configuration. If the output
834# directory was created by configure and now becomes empty, remove it as well.
835dist-clean: clean
836	($(CD) $(OUTPUT_ROOT) && \
837	    $(RM) -r *spec.gmk $(CONFIGURESUPPORT_OUTPUTDIR) Makefile compare.sh ide)
838	$(if $(filter $(CONF_NAME),$(notdir $(OUTPUT_ROOT))), \
839	  if test "x`$(LS) $(OUTPUT_ROOT)`" != x; then \
840	    $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ; \
841	  else \
842	    ($(CD) $(SRC_ROOT) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" \
843	        && $(RM) -r $(OUTPUT_ROOT)) \
844	  fi \
845	)
846	$(ECHO) Cleaned everything, you will have to re-run configure.
847
848ALL_TARGETS += clean dist-clean $(CLEAN_DIR_TARGETS) $(CLEAN_SUPPORT_DIR_TARGETS) \
849    $(CLEAN_TEST_TARGETS) $(CLEAN_PHASE_TARGETS) $(CLEAN_MODULE_TARGETS) \
850    $(CLEAN_MODULE_PHASE_TARGETS)
851
852################################################################################
853# Declare *-only targets for each normal target
854$(foreach t, $(ALL_TARGETS), $(eval $(t)-only: $(t)))
855
856ALL_TARGETS += $(addsuffix -only, $(filter-out dist-clean clean%, $(ALL_TARGETS)))
857
858################################################################################
859
860# Include JPRT targets
861include $(SRC_ROOT)/make/Jprt.gmk
862
863################################################################################
864
865# The following targets are intentionally not added to ALL_TARGETS since they
866# are internal only, to support Init.gmk.
867
868print-targets:
869	  @$(ECHO) $(sort $(ALL_TARGETS))
870
871print-modules:
872	  @$(ECHO) $(sort $(ALL_MODULES))
873
874create-main-targets-include:
875	  $(call LogInfo, Generating main target list)
876	  @$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \
877	      $(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk
878
879################################################################################
880
881
882# workaround issue when building open targets when closed jib-profiles.js is used
883installer: product-images test-image
884
885.PHONY: $(ALL_TARGETS)
886
887FRC: # Force target
888