Modules.gmk revision 2402:c37cde0ba52d
185815Sobrien#
285815Sobrien# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
385815Sobrien# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4218822Sdim#
5218822Sdim# This code is free software; you can redistribute it and/or modify it
685815Sobrien# under the terms of the GNU General Public License version 2 only, as
7218822Sdim# published by the Free Software Foundation.  Oracle designates this
8218822Sdim# particular file as subject to the "Classpath" exception as provided
985815Sobrien# by Oracle in the LICENSE file that accompanied this code.
10218822Sdim#
1185815Sobrien# This code is distributed in the hope that it will be useful, but WITHOUT
12218822Sdim# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13218822Sdim# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14218822Sdim# version 2 for more details (a copy is included in the LICENSE file that
15218822Sdim# accompanied this code).
1685815Sobrien#
17218822Sdim# You should have received a copy of the GNU General Public License version
18218822Sdim# 2 along with this work; if not, write to the Free Software Foundation,
19218822Sdim# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20218822Sdim#
2185815Sobrien# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22218822Sdim# or visit www.oracle.com if you need additional information or have any
23218822Sdim# questions.
24218822Sdim#
2585815Sobrien
2685815Sobrienifndef _MODULES_GMK
2785815Sobrien_MODULES_GMK := 1
2885815Sobrien
2985815Sobrien################################################################################
3085815Sobrien#
3185815Sobrien# BOOT_MODULES are modules defined by the boot loader
3285815Sobrien# PLATFORM_MODULES are modules defined by the platform loader
3385815Sobrien# JRE_TOOL_MODULES are tools included in JRE and defined by the application loader
3485815Sobrien#
35130561Sobrien# All other modules not declared below are defined by the application loader
3685815Sobrien# and are not included in JRE.
3785815Sobrien
3885815SobrienBOOT_MODULES :=
3985815SobrienPLATFORM_MODULES :=
4085815SobrienJRE_TOOL_MODULES :=
4185815SobrienUPGRADEABLE_MODULES :=
4285815SobrienAGGREGATOR_MODULES :=
4385815Sobrien
44130561Sobrien# Hook to include the corresponding custom file, if present.
4585815Sobrien$(eval $(call IncludeCustomExtension, , common/Modules.gmk))
46218822Sdim
4785815SobrienBOOT_MODULES += \
48218822Sdim    java.base \
4985815Sobrien    java.datatransfer \
50130561Sobrien    java.desktop \
5189857Sobrien    java.instrument \
52218822Sdim    java.logging \
5385815Sobrien    java.management \
54218822Sdim    java.naming \
5589857Sobrien    java.prefs \
56218822Sdim    java.rmi \
57130561Sobrien    java.security.sasl \
5885815Sobrien    java.xml \
59218822Sdim    jdk.httpserver \
6085815Sobrien    jdk.management \
6185815Sobrien    jdk.net \
6285815Sobrien    jdk.sctp \
6385815Sobrien    jdk.unsupported \
64130561Sobrien    jdk.vm.ci \
65130561Sobrien    #
66130561Sobrien
67130561Sobrien# to be deprivileged
68130561SobrienBOOT_MODULES += \
69130561Sobrien    jdk.naming.rmi \
7085815Sobrien    #
7185815Sobrien
7285815SobrienUPGRADEABLE_MODULES += \
7385815Sobrien    java.activation \
7485815Sobrien    java.annotations.common \
7585815Sobrien    java.corba \
7685815Sobrien    java.transaction \
7785815Sobrien    java.xml.bind \
7885815Sobrien    java.xml.ws \
7985815Sobrien    #
8085815Sobrien
8185815Sobrien# Modules explicitly declared as not being upgradeable even though they require
8285815Sobrien# an upgradeable module.
8385815SobrienNON_UPGRADEABLE_MODULES +=
8485815Sobrien
8585815SobrienAGGREGATOR_MODULES += \
8685815Sobrien    java.se \
8785815Sobrien    java.se.ee \
8885815Sobrien    #
89130561Sobrien
90130561SobrienPLATFORM_MODULES += \
91130561Sobrien    $(UPGRADEABLE_MODULES) \
92130561Sobrien    $(AGGREGATOR_MODULES)
93130561Sobrien    #
94130561Sobrien
9585815SobrienPLATFORM_MODULES += \
9685815Sobrien    java.compiler \
9785815Sobrien    jdk.incubator.httpclient \
9885815Sobrien    java.scripting \
9985815Sobrien    java.security.jgss \
10085815Sobrien    java.smartcardio \
10185815Sobrien    java.sql \
10285815Sobrien    java.sql.rowset \
10385815Sobrien    java.xml.crypto \
104218822Sdim    jdk.accessibility \
10585815Sobrien    jdk.charsets \
10685815Sobrien    jdk.crypto.ec \
10785815Sobrien    jdk.crypto.token \
10885815Sobrien    jdk.desktop \
10985815Sobrien    jdk.dynalink \
11085815Sobrien    jdk.jsobject \
11185815Sobrien    jdk.localedata \
11285815Sobrien    jdk.naming.dns \
11385815Sobrien    jdk.scripting.nashorn \
11485815Sobrien    jdk.security.auth \
11585815Sobrien    jdk.security.jgss \
11685815Sobrien    jdk.xml.dom \
11785815Sobrien    jdk.zipfs \
118130561Sobrien    #
119130561Sobrien
120130561SobrienJRE_TOOL_MODULES += \
121130561Sobrien    jdk.jdwp.agent \
122130561Sobrien    jdk.pack \
12385815Sobrien    jdk.scripting.nashorn.shell \
12485815Sobrien    #
12585815Sobrien
12685815Sobrienifeq ($(OPENJDK_TARGET_OS), windows)
12785815Sobrien  PLATFORM_MODULES += jdk.crypto.mscapi
12885815Sobrienendif
12985815Sobrienifeq ($(OPENJDK_TARGET_OS), solaris)
13085815Sobrien  PLATFORM_MODULES += jdk.crypto.ucrypto
13185815Sobrienendif
13285815Sobrien
13385815Sobrien# These modules are included in the interim image which is used to run profiling
13485815Sobrien# before building the real images.
13585815SobrienINTERIM_IMAGE_MODULES := java.base java.logging
136130561Sobrien
13785815Sobrien################################################################################
13885815Sobrien# Some platforms don't have the serviceability agent
13985815Sobrien
140130561Sobrienifeq ($(INCLUDE_SA), false)
141130561Sobrien  MODULES_FILTER += jdk.hotspot.agent
142130561Sobrienendif
143130561Sobrien
144130561Sobrien################################################################################
145130561Sobrien# Filter out Graal specific modules if Graal build is disabled
14685815Sobrien
14785815Sobrienifeq ($(INCLUDE_GRAAL), false)
14885815Sobrien  MODULES_FILTER += jdk.vm.compiler
14985815Sobrienendif
15085815Sobrien
15185815Sobrien################################################################################
15285815Sobrien# Filter out aot specific modules if aot is disabled
15385815Sobrien
15485815Sobrienifeq ($(ENABLE_AOT), false)
15585815Sobrien  MODULES_FILTER += jdk.aot
15685815Sobrienendif
15785815Sobrien
15885815Sobrien################################################################################
15985815Sobrien# Module list macros
16085815Sobrien
16185815Sobrien# Use append so that the custom extension may add to these variables
16285815Sobrien
16385815SobrienGENERATED_SRC_DIRS += \
16485815Sobrien    $(SUPPORT_OUTPUTDIR)/gensrc \
16585815Sobrien    #
16685815Sobrien
16785815SobrienTOP_SRC_DIRS += \
16885815Sobrien    $(CORBA_TOPDIR)/src \
16985815Sobrien    $(HOTSPOT_TOPDIR)/src \
17085815Sobrien    $(JDK_TOPDIR)/src \
17185815Sobrien    $(LANGTOOLS_TOPDIR)/src \
17285815Sobrien    $(JAXP_TOPDIR)/src \
17385815Sobrien    $(JAXWS_TOPDIR)/src \
17485815Sobrien    $(NASHORN_TOPDIR)/src \
17589857Sobrien    #
17685815Sobrien
177130561SobrienSRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes
178130561Sobrienifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
179130561Sobrien  SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes
180218822Sdimendif
181130561SobrienSRC_SUBDIRS += share/classes
182130561Sobrien
183130561Sobrien# Find all module-info.java files for the current build target platform and
18485815Sobrien# configuration.
18585815Sobrien# TODO: The $(firstword call is part of a workaround for using different
186218822Sdim# imported module-info.java in Jake due to a change in format. Remove once
18785815Sobrien# new format is standard in JDK 9 and javafx delivers just that.
18885815Sobrien# Param 1 - Module to find for, set to * for finding all
18985815SobrienFindAllModuleInfos = \
19085815Sobrien    $(wildcard \
19185815Sobrien        $(foreach sub, $(SRC_SUBDIRS), \
19285815Sobrien          $(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \
19385815Sobrien        $(patsubst %,%/$(strip $1)/module-info.java, $(firstword $(IMPORT_MODULES_SRC))))
19485815Sobrien
19585815Sobrien# Find module-info.java files in the specific source dir
19685815Sobrien# Param 1 - Src dir to find module-info.java files in
19785815SobrienFindModuleInfosForSrcDir = \
19885815Sobrien    $(wildcard \
19985815Sobrien        $(foreach sub, $(SRC_SUBDIRS), \
20085815Sobrien          $(patsubst %,%/*/$(sub)/module-info.java, $(strip $1)) \
20185815Sobrien        ) \
20285815Sobrien        $(patsubst %,%/*/module-info.java, $(strip $1)) \
20385815Sobrien    )
20485815Sobrien
20585815Sobrien# Extract the module names from the paths of module-info.java files. The
20685815Sobrien# position of the module directory differs depending on if this is an imported
20785815Sobrien# src dir or not.
208130561SobrienGetModuleNameFromModuleInfo = \
209130561Sobrien    $(strip $(foreach mi, $1, \
210130561Sobrien      $(if $(filter $(addsuffix %, $(IMPORT_MODULES_SRC)), $(mi)), \
211218822Sdim        $(notdir $(patsubst %/,%, $(dir $(mi)))), \
212130561Sobrien        $(notdir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(mi)))))))))))
21385815Sobrien
21489857Sobrien# Find all modules by looking for module-info.java files and looking at parent
21585815Sobrien# directories.
21685815SobrienFindAllModules = \
21789857Sobrien    $(sort $(filter-out $(MODULES_FILTER), \
21885815Sobrien    $(call GetModuleNameFromModuleInfo, $(MODULE_INFOS))))
21989857Sobrien
22089857Sobrien# Find all modules in a specific src dir
22189857Sobrien# Param 1 - Src dir to find modules in
22289857SobrienFindModulesForSrcDir = \
22385815Sobrien    $(sort $(filter-out $(MODULES_FILTER), \
22489857Sobrien        $(call GetModuleNameFromModuleInfo, $(call FindModuleInfosForSrcDir, $1)) \
22589857Sobrien    ))
22689857Sobrien
22789857SobrienFindImportedModules = \
22889857Sobrien    $(filter-out $(MODULES_FILTER), \
22989857Sobrien    $(if $(IMPORT_MODULES_CLASSES), $(notdir $(wildcard $(IMPORT_MODULES_CLASSES)/*))))
23089857Sobrien
23189857Sobrien# Find all source dirs for a particular module
23285815Sobrien# $1 - Module to find source dirs for
23385815SobrienFindModuleSrcDirs = \
23485815Sobrien    $(strip $(wildcard \
235218822Sdim        $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
23685815Sobrien        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
23785815Sobrien
23885815Sobrien# Construct the complete module source path
23985815SobrienGetModuleSrcPath = \
24085815Sobrien    $(call PathList, \
24189857Sobrien        $(addsuffix /*, $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
24285815Sobrien        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS))))
24385815Sobrien
24489857Sobrien################################################################################
24585815Sobrien# Extract module dependencies from module-info.java files.
24685815Sobrien
24785815SobrienMODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk
24885815Sobrien
24985815SobrienMODULE_INFOS := $(call FindAllModuleInfos, *)
25085815Sobrien
25185815Sobrien$(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
25285815Sobrien    $(call DependOnVariable, MODULE_INFOS, $(MAKESUPPORT_OUTPUTDIR)/MODULE_INFOS.vardeps)
25385815Sobrien	$(MKDIR) -p $(@D)
25485815Sobrien	$(RM) $@
25585815Sobrien	$(foreach m, $(MODULE_INFOS), \
25689857Sobrien	    ( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \
25789857Sobrien	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
25889857Sobrien	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
25989857Sobrien	          /requires/ { sub(/;/, ""); \
26089857Sobrien	                       sub(/requires/, ""); \
26189857Sobrien	                       sub(/transitive/, ""); \
26289857Sobrien	                       sub(/\/\/.*/, ""); \
26389857Sobrien	                       sub(/\/\*.*\*\//, ""); \
26489857Sobrien	                       gsub(/^ +\*.*/, ""); \
26589857Sobrien	                       gsub(/ /, ""); \
26689857Sobrien	                       printf(" %s", $$0) } \
26785815Sobrien	          END        { printf("\n") }' $m \
26885815Sobrien	    ) >> $@ $(NEWLINE))
26985815Sobrien
27085815Sobrien-include $(MODULE_DEPS_MAKEFILE)
27185815Sobrien
27285815Sobrien# Param 1: Module to find deps for
27385815SobrienFindDepsForModule = \
27485815Sobrien  $(DEPS_$(strip $1))
27589857Sobrien
27689857Sobrien# Finds transitive dependencies in 3 levels.
27785815Sobrien# Param 1: Module to find transitive deps for
27885815SobrienFindTransitiveDepsForModule = \
27985815Sobrien    $(sort $(call FindDepsForModule, $1) \
28085815Sobrien        $(foreach m, $(call FindDepsForModule, $1), \
28185815Sobrien            $(call FindDepsForModule, $m) \
28285815Sobrien            $(foreach n, $(call FindDepsForModule, $m), \
28385815Sobrien                 $(call FindDepsForModule, $n))))
28485815Sobrien
28585815Sobrien# Upgradeable modules are those that are either defined as upgradeable or that
28685815Sobrien# require an upradeable module.
28785815SobrienFindAllUpgradeableModules = \
28885815Sobrien    $(filter-out $(MODULES_FILTER) $(NON_UPGRADEABLE_MODULES), \
28989857Sobrien        $(sort $(UPGRADEABLE_MODULES) $(foreach m, \
29085815Sobrien            $(filter-out $(UPGRADEABLE_MODULES), $(call FindAllModules)), \
291218822Sdim          $(if $(filter $(UPGRADEABLE_MODULES), \
29285815Sobrien              $(call FindTransitiveDepsForModule, $m)), \
29385815Sobrien            $m \
29485815Sobrien          ) \
29585815Sobrien        )) \
29685815Sobrien    )
297218822Sdim
29885815Sobrien################################################################################
29985815Sobrien
30085815SobrienLEGAL_SUBDIRS += $(OPENJDK_TARGET_OS)/legal
30185815Sobrienifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
30285815Sobrien  LEGAL_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/legal
30385815Sobrienendif
30485815SobrienLEGAL_SUBDIRS += share/legal
30585815Sobrien
30685815Sobrien# Find all legal dirs for a particular module
30785815Sobrien# $1 - Module to find legal dirs for
30885815SobrienFindModuleLegalDirs = \
30985815Sobrien    $(strip $(wildcard \
31085815Sobrien        $(addsuffix /$(strip $1), $(IMPORT_MODULES_LEGAL)) \
31185815Sobrien        $(foreach sub, $(LEGAL_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
31285815Sobrien
31385815Sobrien################################################################################
31485815Sobrien
31585815Sobrien# Param 1 - Name of module
31685815Sobriendefine ReadSingleImportMetaData
317130561Sobrien    ifneq ($$(wildcard $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties), )
31885815Sobrien      classloader :=
319218822Sdim      include_in_jre :=
32089857Sobrien      include_in_jdk :=
32185815Sobrien      include $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties
32285815Sobrien      ifeq ($$(include_in_jre), true)
32389857Sobrien        JRE_MODULES += $1
32489857Sobrien      endif
32589857Sobrien      ifeq ($$(include_in_jdk), true)
32685815Sobrien        JDK_MODULES += $1
32789857Sobrien      endif
32889857Sobrien      ifeq ($$(classloader), boot)
32989857Sobrien        BOOT_MODULES += $1
33089857Sobrien      else ifeq ($$(classloader), ext)
33189857Sobrien        PLATFORM_MODULES += $1
33289857Sobrien      endif
33389857Sobrien    else
33485815Sobrien      # Default to include in all
33585815Sobrien      JRE_MODULES += $1
33685815Sobrien      JDK_MODULES += $1
33785815Sobrien    endif
33885815Sobrienendef
33985815Sobrien
34089857Sobrien# Reading the imported modules metadata has a cost, so to make it available,
34185815Sobrien# a makefile needs to eval-call this macro first. After calling this, the
34285815Sobrien# following variables are populated with data from the imported modules:
34385815Sobrien# * JRE_MODULES
34485815Sobrien# * JDK_MODULES
34585815Sobrien# * BOOT_MODULES
34685815Sobrien# * PLATFORM_MODULES
347218822Sdim# * JRE_TOOL_MODULES
348218822Sdimdefine ReadImportMetaData
349104834Sobrien    IMPORTED_MODULES := $$(call FindImportedModules)
350218822Sdim    $$(foreach m, $$(IMPORTED_MODULES), \
351104834Sobrien      $$(eval $$(call ReadSingleImportMetaData, $$m)))
352104834Sobrienendef
353104834Sobrien
354104834Sobrien################################################################################
355104834Sobrien
35685815Sobrienendif # _MODULES_GMK
357130561Sobrien