Main.gmk revision 1550:dcc007296d21
155714Skris#
255714Skris# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
355714Skris# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
455714Skris#
555714Skris# This code is free software; you can redistribute it and/or modify it
655714Skris# under the terms of the GNU General Public License version 2 only, as
755714Skris# published by the Free Software Foundation.  Oracle designates this
855714Skris# particular file as subject to the "Classpath" exception as provided
955714Skris# by Oracle in the LICENSE file that accompanied this code.
1055714Skris#
1155714Skris# This code is distributed in the hope that it will be useful, but WITHOUT
1255714Skris# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1355714Skris# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1455714Skris# version 2 for more details (a copy is included in the LICENSE file that
1555714Skris# accompanied this code).
1655714Skris#
1755714Skris# You should have received a copy of the GNU General Public License version
1855714Skris# 2 along with this work; if not, write to the Free Software Foundation,
1955714Skris# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2055714Skris#
2155714Skris# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2255714Skris# or visit www.oracle.com if you need additional information or have any
2355714Skris# questions.
2455714Skris#
2555714Skris
2655714Skris################################################################################
2755714Skris# This is the main makefile containing most actual top level targets. It needs
2855714Skris# to be called with a SPEC file defined.
2955714Skris################################################################################
3055714Skris
3155714Skris# Declare default target
3255714Skrisdefault:
3355714Skris
3455714Skrisifeq ($(wildcard $(SPEC)),)
3555714Skris  $(error Main.gmk needs SPEC set to a proper spec.gmk)
3655714Skrisendif
3755714Skris
3855714Skris# Now load the spec
3955714Skrisinclude $(SPEC)
4055714Skris
4155714Skrisinclude $(SRC_ROOT)/make/MainSupport.gmk
4255714Skris
4355714Skris# Load the vital tools for all the makefiles.
4455714Skrisinclude $(SRC_ROOT)/make/common/MakeBase.gmk
4555714Skrisinclude $(SRC_ROOT)/make/common/Modules.gmk
4655714Skris
4755714Skris# Declare ALL_TARGETS as an immediate variable. This variable is a list of all
4855714Skris# valid top level targets. It's used to declare them all as PHONY and to
4955714Skris# generate the -only targets.
5055714SkrisALL_TARGETS :=
5155714Skris
5255714Skris# Hook to include the corresponding custom file, if present.
5355714Skris$(eval $(call IncludeCustomExtension, , Main.gmk))
5455714Skris
5555714Skris# All modules for the current target platform.
5655714Skris# Manually add jdk.hotspot.agent for now.
5755714SkrisALL_MODULES := $(call FindAllModules) jdk.hotspot.agent
5855714Skris
5955714Skris################################################################################
6055714Skris################################################################################
6155714Skris#
6255714Skris# Recipes for all targets. Only recipes, dependencies are declared later.
6355714Skris#
6455714Skris################################################################################
6555714Skris
6655714Skris################################################################################
6755714Skris# Interim/build tools targets, compiling tools used during the build
6855714Skris
6959191Skrisbuildtools-langtools:
7055714Skris	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Tools.gmk)
7155714Skris
7255714Skrisinterim-langtools:
7355714Skris	+($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk)
7455714Skris
7555714Skrisinterim-corba:
7655714Skris	+($(CD) $(CORBA_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk)
7755714Skris
7855714Skrisinterim-rmic:
7955714Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterimRmic.gmk)
8055714Skris
8155714Skrisbuildtools-jdk:
8255714Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Tools.gmk java-tools)
8355714Skris
8455714SkrisALL_TARGETS += buildtools-langtools interim-langtools interim-corba \
8555714Skris    interim-rmic buildtools-jdk
8668651Skris
8755714Skris################################################################################
8855714Skris# Special targets for certain modules
8955714Skris
9055714Skrisimport-hotspot:
9155714Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Import.gmk)
9255714Skris
9355714Skrisunpack-sec:
9455714Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f UnpackSecurity.gmk)
9555714Skris
9655714SkrisALL_TARGETS += import-hotspot unpack-sec
9755714Skris
9855714Skris################################################################################
9955714Skris# Gensrc targets, generating source before java compilation can be done
10055714Skris$(eval $(call DeclareRecipesForPhase, GENSRC, \
10155714Skris    TARGET_SUFFIX := gensrc, \
10255714Skris    FILE_PREFIX := Gensrc, \
10355714Skris    MAKE_SUBDIR := gensrc, \
10455714Skris    CHECK_MODULES := $(ALL_MODULES), \
10555714Skris    MULTIPLE_MAKEFILES := true))
10655714Skris
10755714SkrisJDK_GENSRC_TARGETS := $(filter %-gensrc-jdk, $(GENSRC_TARGETS))
10855714SkrisLANGTOOLS_GENSRC_TARGETS := $(filter %-gensrc-langtools, $(GENSRC_TARGETS))
10955714SkrisCORBA_GENSRC_TARGETS := $(filter %-gensrc-corba, $(GENSRC_TARGETS))
11055714Skris
11155714SkrisALL_TARGETS += $(GENSRC_TARGETS)
11255714Skris
11355714Skris################################################################################
11455714Skris# Generate data targets
11555714Skris$(eval $(call DeclareRecipesForPhase, GENDATA, \
11659191Skris    TARGET_SUFFIX := gendata, \
11759191Skris    FILE_PREFIX := Gendata, \
11859191Skris    MAKE_SUBDIR := gendata, \
11959191Skris    CHECK_MODULES := $(ALL_MODULES), \
12059191Skris    USE_WRAPPER := true))
121142425Snectar
12259191SkrisALL_TARGETS += $(GENDATA_TARGETS)
12359191Skris
12459191Skris################################################################################
12559191Skris# Copy files targets
12659191Skris$(eval $(call DeclareRecipesForPhase, COPY, \
12759191Skris    TARGET_SUFFIX := copy, \
12859191Skris    FILE_PREFIX := Copy, \
12959191Skris    MAKE_SUBDIR := copy, \
13059191Skris    CHECK_MODULES := $(ALL_MODULES), \
13159191Skris    USE_WRAPPER := true))
13259191Skris
13359191SkrisALL_TARGETS += $(COPY_TARGETS)
13459191Skris
13559191Skris################################################################################
13659191Skris# Targets for compiling all java modules. Nashorn is treated separately.
13759191SkrisJAVA_MODULES := $(call FindJavaModules)
13859191SkrisJAVA_TARGETS := $(addsuffix -java, $(JAVA_MODULES))
13959191Skris
14059191Skrisdefine DeclareCompileJavaRecipe
14159191Skris  $1-java:
14259191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CompileJavaModules.gmk \
14359191Skris	    $1 JAVA_MODULES=$1 MODULE=$1)
14459191Skrisendef
14559191Skris
146142425Snectar$(foreach m, $(filter-out jdk.scripting.nashorn, $(JAVA_MODULES)), \
14759191Skris    $(eval $(call DeclareCompileJavaRecipe,$m)))
14859191Skris
149142425Snectar# Build nashorn. Needs to be compiled separately from the rest of the modules
15059191Skris# due to nasgen.
151142425Snectarjdk.scripting.nashorn-java:
152142425Snectar	+($(CD) $(NASHORN_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f BuildNashorn.gmk compile)
15359191Skris
154142425SnectarALL_TARGETS += $(JAVA_TARGETS)
155142425Snectar
156142425Snectar################################################################################
157142425Snectar# Targets for running rmic.
158142425Snectar$(eval $(call DeclareRecipesForPhase, RMIC, \
159142425Snectar    TARGET_SUFFIX := rmic, \
160142425Snectar    FILE_PREFIX := Rmic, \
161142425Snectar    MAKE_SUBDIR := rmic, \
162142425Snectar    CHECK_MODULES := $(ALL_MODULES)))
163142425Snectar
16459191SkrisALL_TARGETS += $(RMIC_TARGETS)
165142425Snectar
166142425Snectar################################################################################
16759191Skris# Targets for compiling native libraries
16859191Skris$(eval $(call DeclareRecipesForPhase, LIBS, \
16959191Skris    TARGET_SUFFIX := libs, \
17059191Skris    FILE_PREFIX := Lib, \
17159191Skris    MAKE_SUBDIR := lib, \
172142425Snectar    CHECK_MODULES := $(ALL_MODULES), \
17359191Skris    USE_WRAPPER := true))
17459191Skris
17559191SkrisALL_TARGETS += $(LIBS_TARGETS)
17659191Skris
17759191Skris################################################################################
17859191Skris# Targets for compiling native executables
17959191Skris$(eval $(call DeclareRecipesForPhase, LAUNCHER, \
18059191Skris    TARGET_SUFFIX := launchers, \
18159191Skris    FILE_PREFIX := Launcher, \
18259191Skris    MAKE_SUBDIR := launcher, \
18359191Skris    CHECK_MODULES := $(ALL_MODULES), \
18459191Skris    USE_WRAPPER := true))
18559191Skris
18659191SkrisALL_TARGETS += $(LAUNCHER_TARGETS)
18759191Skris
18859191Skris################################################################################
18959191Skris# Build hotspot target
19059191Skris
19159191Skrisifeq ($(BUILD_HOTSPOT),true)
19268651Skris  hotspot:
19359191Skris	($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk)
19459191Skrisendif
19559191Skris
19659191SkrisALL_TARGETS += hotspot
19759191Skris
19859191Skris################################################################################
19959191Skris# Build demos and samples targets
20059191Skris
20159191Skrisdemos-jdk:
20259191Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileDemos.gmk)
203109998Smarkm
20459191Skrissamples-jdk:
20559191Skris	+($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CopySamples.gmk)
20659191Skris
20759191SkrisALL_TARGETS += demos-jdk samples-jdk
20868651Skris
20959191Skris################################################################################
21059191Skris# Image targets
21159191Skris
21259191Skris# Stores the tips for each repository. This file is be used when constructing the jdk image and can be
21359191Skris# used to track the exact sources used to build that image.
21459191Skrissource-tips: $(SUPPORT_OUTPUTDIR)/source_tips
21559191Skris$(SUPPORT_OUTPUTDIR)/source_tips: FRC
21659191Skris	@$(MKDIR) -p $(@D)
21759191Skris	@$(RM) $@
21859191Skris	@$(call GetSourceTips)
21959191Skris
22059191SkrisBOOTCYCLE_TARGET := product-images
22159191Skrisbootcycle-images:
22259191Skris	@$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image
22359191Skris	+$(MAKE) $(MAKE_ARGS) -f $(SRC_ROOT)/make/Main.gmk \
22459191Skris	    SPEC=$(dir $(SPEC))bootcycle-spec.gmk $(BOOTCYCLE_TARGET)
22559191Skris
22659191Skriszip-security:
22759191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSecurity.gmk)
22859191Skris
22959191Skriszip-source:
23059191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f ZipSource.gmk)
23159191Skris
23259191Skrisstrip-binaries:
23359191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f StripBinaries.gmk)
23459191Skris
23559191Skrisjrtfs-jar:
23659191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f JrtfsJar.gmk)
23759191Skris
23859191Skrisjimages:
23959191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk jimages)
24059191Skris
24159191Skrisprofiles:
24259191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Images.gmk profiles)
24359191Skris
24459191Skrismac-bundles-jdk:
24559191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f MacBundles.gmk)
24659191Skris
24759191SkrisALL_TARGETS += source-tips bootcycle-images zip-security zip-source strip-binaries \
24859191Skris    jrtfs-jar jimages profiles mac-bundles-jdk
24959191Skris
25059191Skris################################################################################
25159191Skris# Docs targets
25259191Skris
25359191Skrisdocs-javadoc:
25459191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs)
255109998Smarkm
256109998Smarkmdocs-jvmtidoc:
25759191Skris	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk jvmtidocs)
25859191Skris
25959191SkrisALL_TARGETS += docs-javadoc docs-jvmtidoc
26059191Skris
26159191Skris################################################################################
26259191Skris# Build tests
26359191Skris#
26459191Skris
265109998Smarkmprepare-test-image:
26659191Skris	$(MKDIR) -p $(TEST_IMAGE_DIR)
26759191Skris	$(ECHO) > $(TEST_IMAGE_DIR)/Readme.txt 'JDK test image'
26859191Skris
26959191Skrisbuild-test-hotspot-jtreg-native:
27059191Skris	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
27159191Skris	    build-test-hotspot-jtreg-native)
27259191Skris
273109998Smarkmtest-image-hotspot-jtreg-native:
274109998Smarkm	+($(CD) $(HOTSPOT_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
27559191Skris	    test-image-hotspot-jtreg-native)
27659191Skris
27759191Skrisbuild-test-jdk-jtreg-native:
27859191Skris	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
27959191Skris	    build-test-jdk-jtreg-native)
280
281test-image-jdk-jtreg-native:
282	+($(CD) $(JDK_TOPDIR)/make/test && $(MAKE) $(MAKE_ARGS) -f JtregNative.gmk \
283	    test-image-jdk-jtreg-native)
284
285ALL_TARGETS += prepare-test-image build-test-hotspot-jtreg-native \
286    test-image-hotspot-jtreg-native build-test-jdk-jtreg-native \
287    test-image-jdk-jtreg-native
288
289################################################################################
290# Run tests
291
292# Run tests specified by $(TEST), or the default test set.
293test:
294	$(call RunTests, $(TEST))
295
296test-hotspot-jtreg-native:
297	$(call RunTests, "hotspot_native_sanity")
298
299test-jdk-jtreg-native:
300	$(call RunTests, "jdk_native_sanity")
301
302test-make:
303	($(CD) $(SRC_ROOT)/test/make && $(MAKE) $(MAKE_ARGS) -f TestMake.gmk $(TEST_TARGET))
304
305ALL_TARGETS += test test-hotspot-jtreg-native test-jdk-jtreg-native test-make
306
307################################################################################
308# Verification targets
309
310verify-modules:
311	@$(call TargetEnter)
312	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f CheckModules.gmk)
313	@$(call TargetExit)
314
315ALL_TARGETS += verify-modules
316
317################################################################################
318# Install targets
319
320install:
321	+($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) -f Install.gmk)
322
323ALL_TARGETS += install
324
325################################################################################
326#
327# Dependency declarations between targets.
328#
329# These are declared in two groups. First all dependencies between targets that
330# have recipes above as these dependencies may be disabled. Then the aggregator
331# targets that do not have recipes of their own, which will never have their
332# dependencies disabled.
333#
334################################################################################
335# Targets with recipes above
336
337# If running an *-only target, parallel execution and dependencies between
338# recipe targets are disabled. This makes it possible to run a select set of
339# recipe targets in order. It's the responsibility of the user to make sure
340# all prerequisites are fulfilled.
341ifneq ($(findstring -only, $(MAKECMDGOALS)), )
342  .NOTPARALLEL:
343else
344  $(LANGTOOLS_GENSRC_TARGETS): buildtools-langtools
345
346  interim-langtools: $(LANGTOOLS_GENSRC_TARGETS)
347
348  buildtools-jdk: interim-langtools
349
350  $(CORBA_GENSRC_TARGETS): interim-langtools
351
352  $(JDK_GENSRC_TARGETS): interim-langtools buildtools-jdk
353
354  interim-corba: $(CORBA_GENSRC_TARGETS)
355
356  $(GENDATA_TARGETS): interim-langtools buildtools-jdk
357
358  interim-rmic: interim-langtools
359
360  $(RMIC_TARGETS): interim-langtools interim-corba interim-rmic
361
362  $(JAVA_TARGETS): interim-langtools
363
364  import-hotspot: hotspot
365
366  $(LIBS_TARGETS): import-hotspot
367
368  $(LAUNCHER_TARGETS): java.base-libs
369
370  # The demos are currently linking to libjvm and libjava, just like all other
371  # jdk libs, even though they don't need to. To avoid warnings, make sure they
372  # aren't built until after libjava and libjvm are available to link to.
373  demos-jdk: $(JAVA_TARGETS)
374
375  # Declare dependency from <module>-java to <module>-gensrc
376  $(foreach m, $(GENSRC_MODULES), $(eval $m-java: $m-gensrc))
377
378  # Declare dependencies between java modules
379  $(foreach m, $(JAVA_MODULES), \
380      $(eval $m-java: $(addsuffix -java, $(filter $(JAVA_MODULES), \
381      $(call FindDepsForModule,$m)))))
382
383  # Declare dependencies between <module>-rmic to <module>-java
384  $(foreach m, $(RMIC_MODULES), $(eval $m-rmic: $m-java))
385
386  # Declare dependencies from <module>-lib to <module>-java
387  # Skip modules that do not have java source.
388  $(foreach m, $(filter $(JAVA_MODULES), $(LIBS_MODULES)), $(eval $m-libs: $m-java))
389
390  # Declare dependencies from all other <module>-lib to java.base-lib
391  $(foreach t, $(filter-out java.base-libs, $(LIBS_TARGETS)), \
392      $(eval $t: java.base-libs))
393  # Declare the special case dependency for jdk.deploy.osx where libosx
394  # links against libosxapp.
395  jdk.deploy.osx-libs: java.desktop-libs
396
397  # jdk.accessibility depends on java.desktop
398  jdk.accessibility-libs: java.desktop-libs
399
400  # This dependency needs to be explicitly declared. jdk.jdi-gensrc generates a
401  # header file used by jdk.jdwp.agent-libs. The jdk.jdwp.agent-gensrc is a
402  # virtual target.
403  jdk.jdwp.agent-libs: jdk.jdwp.agent-gensrc
404
405  # Until the module system is in place, jdk.jdi-gensrc needs to combine service
406  # loader configuration with jdk.hotspot.agent so is dependent on importing
407  # hotspot.
408  jdk.jdi-gensrc-jdk: import-hotspot
409
410  # The swing beans need to have java base properly generated to avoid errors
411  # in javadoc.
412  java.desktop-gensrc-jdk: java.base-gensrc
413
414  # Explicitly add dependencies for special targets
415  java.base-java: unpack-sec
416
417  jdk.jdeps-gendata: java rmic
418
419  zip-security: java.base-java java.security.jgss-java java.security.jgss-libs \
420      $(filter jdk.crypto%, $(JAVA_TARGETS))
421
422  zip-source: gensrc rmic
423
424  strip-binaries: libs launchers gendata copy
425
426  jrtfs-jar: buildtools-jdk
427
428  jimages: exploded-image zip-source strip-binaries source-tips demos samples \
429      jrtfs-jar
430
431  profiles: exploded-image strip-binaries source-tips
432
433  mac-bundles-jdk: jimages
434
435  bootcycle-images: jimages
436
437  docs-javadoc: gensrc rmic
438
439  docs-jvmtidoc: hotspot
440
441  test: jimages test-image
442
443  verify-modules: exploded-image
444
445  test-make: clean-test-make
446
447  build-test-hotspot-jtreg-native: buildtools-jdk
448
449  build-test-jdk-jtreg-native: buildtools-jdk
450
451  test-image-hotspot-jtreg-native: build-test-hotspot-jtreg-native
452
453  test-image-jdk-jtreg-native: build-test-jdk-jtreg-native
454
455endif
456
457################################################################################
458# Virtual targets without recipes
459
460buildtools: buildtools-langtools interim-langtools interim-corba interim-rmic \
461    buildtools-jdk
462
463gensrc: $(GENSRC_TARGETS)
464
465gendata: $(GENDATA_TARGETS)
466
467copy: $(COPY_TARGETS)
468
469java: $(JAVA_TARGETS)
470
471rmic: $(RMIC_TARGETS)
472
473libs: $(LIBS_TARGETS)
474
475launchers: $(LAUNCHER_TARGETS)
476
477# Explicitly declare dependency for virtual target jdk.jdwp.agent-gensrc which
478# is actually handled by jdk.jdi-gensrc
479jdk.jdwp.agent-gensrc: jdk.jdi-gensrc
480
481# Declare dependencies from <module> to all the individual targets specific
482# to that module <module>-*.
483$(foreach m, $(GENSRC_MODULES), $(eval $m: $m-gensrc))
484$(foreach m, $(JAVA_MODULES), $(eval $m: $m-java))
485$(foreach m, $(GENDATA_MODULES), $(eval $m: $m-gendata))
486$(foreach m, $(RMIC_MODULES), $(eval $m: $m-rmic))
487$(foreach m, $(LIBS_MODULES), $(eval $m: $m-libs))
488$(foreach m, $(LAUNCHER_MODULES), $(eval $m: $m-launchers))
489$(foreach m, $(COPY_MODULES), $(eval $m: $m-copy))
490
491ALL_MODULE_TARGETS := $(sort $(GENSRC_MODULES) $(JAVA_MODULES) \
492    $(GENDATA_MODULES) $(LIBS_MODULES) $(LAUNCHER_MODULES) $(COPY_MODULES))
493
494demos: demos-jdk
495
496samples: samples-jdk
497
498# The "exploded image" is a locally runnable JDK in $(BUILD_OUTPUT)/jdk.
499exploded-image: $(ALL_MODULE_TARGETS)
500
501mac-bundles: mac-bundles-jdk
502
503# The $(BUILD_OUTPUT)/images directory contain the resulting deliverables,
504# and in line with this, our targets for creating these are named *-image[s].
505
506# This target builds the product images, e.g. the JRE and JDK image
507# (and possibly other, more specific versions)
508product-images: jimages demos samples zip-security verify-modules
509
510ifeq ($(OPENJDK_TARGET_OS), macosx)
511  product-images: mac-bundles
512endif
513
514# This target builds the documentation image
515docs-image: docs-javadoc docs-jvmtidoc
516
517# This target builds the test image
518test-image: prepare-test-image test-image-hotspot-jtreg-native \
519    test-image-jdk-jtreg-native
520
521# all-images is the top-most target, it builds all our deliverables ("images").
522all-images: product-images test-image docs-image
523
524ALL_TARGETS += buildtools gensrc gendata copy java rmic libs launchers \
525    jdk.jdwp.agent-gensrc $(ALL_MODULE_TARGETS) demos samples exploded-image \
526    mac-bundles product-images docs-image test-image all-images
527
528################################################################################
529
530# Traditional targets typically run by users.
531# These can be considered aliases for the targets now named by a more
532# "modern" naming scheme.
533default: exploded-image
534jdk: exploded-image
535images: product-images
536docs: docs-image
537all: all-images
538
539ALL_TARGETS += default jdk images docs all
540
541################################################################################
542################################################################################
543#
544# Clean targets
545#
546################################################################################
547# Clean targets are automatically run serially by the Makefile calling this
548# file.
549
550CLEAN_DIRS += hotspot jdk bootcycle-build test buildtools support \
551    images make-support test-make bundles
552CLEAN_DIR_TARGETS := $(addprefix clean-, $(CLEAN_DIRS))
553CLEAN_TESTS += hotspot-jtreg-native jdk-jtreg-native
554CLEAN_TEST_TARGETS += $(addprefix clean-test-, $(CLEAN_TESTS))
555CLEAN_PHASES := gensrc java native include docs
556CLEAN_PHASE_TARGETS := $(addprefix clean-, $(CLEAN_PHASES))
557CLEAN_MODULE_TARGETS := $(addprefix clean-, $(ALL_MODULES))
558# Construct targets of the form clean-$module-$phase
559CLEAN_MODULE_PHASE_TARGETS := $(addprefix clean-, $(foreach m, $(ALL_MODULES), \
560    $(addprefix $m-, $(CLEAN_PHASES))))
561
562# Remove everything, except the output from configure.
563clean: $(CLEAN_DIR_TARGETS)
564	($(CD) $(OUTPUT_ROOT) && $(RM) -r build*.log*)
565	$(ECHO) Cleaned all build artifacts.
566
567$(CLEAN_DIR_TARGETS):
568	$(call CleanDir,$(patsubst clean-%, %, $@))
569
570$(CLEAN_TEST_TARGETS):
571	$(call CleanTest,$(patsubst clean-test-%, %, $@))
572
573$(CLEAN_PHASE_TARGETS):
574	$(call Clean-$(patsubst clean-%,%, $@))
575
576$(CLEAN_MODULE_TARGETS):
577	$(call CleanModule,$(patsubst clean-%, %, $@))
578
579$(CLEAN_MODULE_PHASE_TARGETS):
580	$(call Clean-$(word 3, $(subst -,$(SPACE),$@)), \
581	    $(word 2, $(subst -,$(SPACE),$@)))
582
583# When removing the support dir, we must also remove jdk. Building classes has
584# the side effect of generating native headers. The headers end up in support
585# while classes and touch files end up in jdk.
586clean-support: clean-jdk
587
588# Remove everything, including configure configuration. If the output
589# directory was created by configure and now becomes empty, remove it as well.
590dist-clean: clean
591	($(CD) $(OUTPUT_ROOT) && \
592	    $(RM) -r *spec.gmk $(CONFIGURESUPPORT_OUTPUTDIR) Makefile compare.sh ide)
593	$(if $(filter $(CONF_NAME),$(notdir $(OUTPUT_ROOT))), \
594	  if test "x`$(LS) $(OUTPUT_ROOT)`" != x; then \
595	    $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ; \
596	  else \
597	    ($(CD) $(SRC_ROOT) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" \
598	        && $(RM) -r $(OUTPUT_ROOT)) \
599	  fi \
600	)
601	$(ECHO) Cleaned everything, you will have to re-run configure.
602
603ALL_TARGETS += clean dist-clean $(CLEAN_DIR_TARGETS) $(CLEAN_TEST_TARGETS) \
604    $(CLEAN_PHASE_TARGETS) $(CLEAN_MODULE_TARGETS) $(CLEAN_MODULE_PHASE_TARGETS)
605
606################################################################################
607# Declare *-only targets for each normal target
608$(foreach t, $(ALL_TARGETS), $(eval $(t)-only: $(t)))
609
610ALL_TARGETS += $(addsuffix -only, $(filter-out dist-clean clean%, $(ALL_TARGETS)))
611
612################################################################################
613
614# Include JPRT targets
615include $(SRC_ROOT)/make/Jprt.gmk
616
617################################################################################
618
619# The following targets are intentionally not added to ALL_TARGETS since they
620# are internal only, to support Init.gmk.
621
622print-targets:
623	  @$(ECHO) $(sort $(ALL_TARGETS))
624
625print-modules:
626	  @$(ECHO) $(sort $(ALL_MODULES))
627
628create-main-targets-include:
629	  @$(ECHO) $(LOG_INFO) Generating main target list
630	  @$(ECHO) ALL_MAIN_TARGETS := $(sort $(ALL_TARGETS)) > \
631	      $(MAKESUPPORT_OUTPUTDIR)/main-targets.gmk
632
633################################################################################
634
635.PHONY: $(ALL_TARGETS)
636
637FRC: # Force target
638