Modules.gmk revision 2492:4eb77fb98952
1217309Snwhitehorn#
2224014Snwhitehorn# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
3217309Snwhitehorn# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4220749Snwhitehorn#
5217309Snwhitehorn# This code is free software; you can redistribute it and/or modify it
6220749Snwhitehorn# under the terms of the GNU General Public License version 2 only, as
7217309Snwhitehorn# published by the Free Software Foundation.  Oracle designates this
8217309Snwhitehorn# particular file as subject to the "Classpath" exception as provided
9217309Snwhitehorn# by Oracle in the LICENSE file that accompanied this code.
10217309Snwhitehorn#
11217309Snwhitehorn# This code is distributed in the hope that it will be useful, but WITHOUT
12217309Snwhitehorn# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13217309Snwhitehorn# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14217309Snwhitehorn# version 2 for more details (a copy is included in the LICENSE file that
15217309Snwhitehorn# accompanied this code).
16217309Snwhitehorn#
17217309Snwhitehorn# You should have received a copy of the GNU General Public License version
18217309Snwhitehorn# 2 along with this work; if not, write to the Free Software Foundation,
19217309Snwhitehorn# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20217309Snwhitehorn#
21217309Snwhitehorn# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22217309Snwhitehorn# or visit www.oracle.com if you need additional information or have any
23217309Snwhitehorn# questions.
24217309Snwhitehorn#
25217309Snwhitehorn
26217309Snwhitehornifndef _MODULES_GMK
27217309Snwhitehorn_MODULES_GMK := 1
28217309Snwhitehorn
29220749Snwhitehorn################################################################################
30217309Snwhitehorn#
31217309Snwhitehorn# BOOT_MODULES are modules defined by the boot loader
32217309Snwhitehorn# PLATFORM_MODULES are modules defined by the platform loader
33217309Snwhitehorn# JRE_TOOL_MODULES are tools included in JRE and defined by the application loader
34217309Snwhitehorn#
35217309Snwhitehorn# All other modules not declared below are defined by the application loader
36217309Snwhitehorn# and are not included in JRE.
37217309Snwhitehorn
38217309SnwhitehornBOOT_MODULES :=
39217309SnwhitehornPLATFORM_MODULES :=
40217309SnwhitehornJRE_TOOL_MODULES :=
41217309SnwhitehornUPGRADEABLE_MODULES :=
42217309SnwhitehornAGGREGATOR_MODULES :=
43217309Snwhitehorn
44217309Snwhitehorn# Hook to include the corresponding custom file, if present.
45217309Snwhitehorn$(eval $(call IncludeCustomExtension, , common/Modules.gmk))
46217309Snwhitehorn
47223289SjhBOOT_MODULES += \
48223289Sjh    java.base \
49223289Sjh    java.datatransfer \
50223289Sjh    java.desktop \
51220749Snwhitehorn    java.instrument \
52217309Snwhitehorn    java.logging \
53217309Snwhitehorn    java.management \
54217309Snwhitehorn    java.management.rmi \
55217309Snwhitehorn    java.naming \
56217309Snwhitehorn    java.prefs \
57217309Snwhitehorn    java.rmi \
58217309Snwhitehorn    java.security.sasl \
59217309Snwhitehorn    java.xml \
60217309Snwhitehorn    jdk.httpserver \
61217309Snwhitehorn    jdk.management \
62217309Snwhitehorn    jdk.management.agent \
63217309Snwhitehorn    jdk.net \
64217309Snwhitehorn    jdk.sctp \
65217309Snwhitehorn    jdk.unsupported \
66217309Snwhitehorn    jdk.vm.ci \
67217309Snwhitehorn    #
68217309Snwhitehorn
69220749Snwhitehorn# to be deprivileged
70220749SnwhitehornBOOT_MODULES += \
71220749Snwhitehorn    jdk.naming.rmi \
72220749Snwhitehorn    #
73220749Snwhitehorn
74220749SnwhitehornUPGRADEABLE_MODULES += \
75220749Snwhitehorn    java.activation \
76220749Snwhitehorn    java.corba \
77220749Snwhitehorn    java.transaction \
78220749Snwhitehorn    java.xml.bind \
79220749Snwhitehorn    java.xml.ws \
80220749Snwhitehorn    java.xml.ws.annotation \
81220749Snwhitehorn    #
82217309Snwhitehorn
83217309Snwhitehorn# Modules explicitly declared as not being upgradeable even though they require
84217309Snwhitehorn# an upgradeable module.
85217309SnwhitehornNON_UPGRADEABLE_MODULES +=
86217309Snwhitehorn
87217309SnwhitehornAGGREGATOR_MODULES += \
88217309Snwhitehorn    java.se \
89217309Snwhitehorn    java.se.ee \
90217309Snwhitehorn    #
91217309Snwhitehorn
92217309SnwhitehornPLATFORM_MODULES += \
93217309Snwhitehorn    $(UPGRADEABLE_MODULES) \
94217309Snwhitehorn    $(AGGREGATOR_MODULES)
95217309Snwhitehorn    #
96217309Snwhitehorn
97217309SnwhitehornPLATFORM_MODULES += \
98217309Snwhitehorn    java.compiler \
99217309Snwhitehorn    jdk.incubator.httpclient \
100217309Snwhitehorn    java.scripting \
101217309Snwhitehorn    java.security.jgss \
102217309Snwhitehorn    java.smartcardio \
103217309Snwhitehorn    java.sql \
104217309Snwhitehorn    java.sql.rowset \
105217309Snwhitehorn    java.xml.crypto \
106217309Snwhitehorn    jdk.accessibility \
107217309Snwhitehorn    jdk.charsets \
108217309Snwhitehorn    jdk.crypto.ec \
109217309Snwhitehorn    jdk.crypto.cryptoki \
110217309Snwhitehorn    jdk.dynalink \
111217309Snwhitehorn    jdk.jsobject \
112217309Snwhitehorn    jdk.localedata \
113217309Snwhitehorn    jdk.naming.dns \
114217309Snwhitehorn    jdk.scripting.nashorn \
115217309Snwhitehorn    jdk.security.auth \
116217309Snwhitehorn    jdk.security.jgss \
117217309Snwhitehorn    jdk.vm.compiler \
118217309Snwhitehorn    jdk.xml.dom \
119217309Snwhitehorn    jdk.zipfs \
120217309Snwhitehorn    #
121217309Snwhitehorn
122217309SnwhitehornJRE_TOOL_MODULES += \
123217309Snwhitehorn    jdk.jdwp.agent \
124217309Snwhitehorn    jdk.pack \
125217309Snwhitehorn    jdk.scripting.nashorn.shell \
126217309Snwhitehorn    #
127217309Snwhitehorn
128217309Snwhitehornifeq ($(OPENJDK_TARGET_OS), windows)
129217309Snwhitehorn  PLATFORM_MODULES += jdk.crypto.mscapi
130217309Snwhitehornendif
131217309Snwhitehornifeq ($(OPENJDK_TARGET_OS), solaris)
132217309Snwhitehorn  PLATFORM_MODULES += jdk.crypto.ucrypto
133217309Snwhitehornendif
134217309Snwhitehorn
135217309Snwhitehorn# These modules are included in the interim image which is used to run profiling
136217309Snwhitehorn# before building the real images.
137217309SnwhitehornINTERIM_IMAGE_MODULES := java.base java.logging
138217309Snwhitehorn
139217309Snwhitehorn################################################################################
140217309Snwhitehorn# Some platforms don't have the serviceability agent
141217309Snwhitehorn
142217309Snwhitehornifeq ($(INCLUDE_SA), false)
143217309Snwhitehorn  MODULES_FILTER += jdk.hotspot.agent
144217309Snwhitehornendif
145217309Snwhitehorn
146224014Snwhitehorn################################################################################
147217309Snwhitehorn# Filter out Graal specific modules if Graal build is disabled
148217309Snwhitehorn
149217309Snwhitehornifeq ($(INCLUDE_GRAAL), false)
150217309Snwhitehorn  MODULES_FILTER += jdk.vm.compiler
151217309Snwhitehornendif
152217309Snwhitehorn
153217309Snwhitehorn################################################################################
154217309Snwhitehorn# Filter out aot specific modules if aot is disabled
155217309Snwhitehorn
156217309Snwhitehornifeq ($(ENABLE_AOT), false)
157217309Snwhitehorn  MODULES_FILTER += jdk.aot
158217309Snwhitehornendif
159217309Snwhitehorn
160217309Snwhitehorn################################################################################
161217309Snwhitehorn# Module list macros
162217309Snwhitehorn
163217309Snwhitehorn# Use append so that the custom extension may add to these variables
164217309Snwhitehorn
165217309SnwhitehornGENERATED_SRC_DIRS += \
166220749Snwhitehorn    $(SUPPORT_OUTPUTDIR)/gensrc \
167217309Snwhitehorn    #
168217309Snwhitehorn
169217309SnwhitehornTOP_SRC_DIRS += \
170217309Snwhitehorn    $(CORBA_TOPDIR)/src \
171217309Snwhitehorn    $(HOTSPOT_TOPDIR)/src \
172217309Snwhitehorn    $(JDK_TOPDIR)/src \
173217309Snwhitehorn    $(LANGTOOLS_TOPDIR)/src \
174217309Snwhitehorn    $(JAXP_TOPDIR)/src \
175217309Snwhitehorn    $(JAXWS_TOPDIR)/src \
176217309Snwhitehorn    $(NASHORN_TOPDIR)/src \
177217309Snwhitehorn    #
178220749Snwhitehorn
179217309SnwhitehornSRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes
180217309Snwhitehornifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
181217309Snwhitehorn  SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes
182217309Snwhitehornendif
183217309SnwhitehornSRC_SUBDIRS += share/classes
184217309Snwhitehorn
185217309Snwhitehorn# Find all module-info.java files for the current build target platform and
186217309Snwhitehorn# configuration.
187217309Snwhitehorn# Param 1 - Module to find for, set to * for finding all
188217309SnwhitehornFindAllModuleInfos = \
189217309Snwhitehorn    $(wildcard \
190217309Snwhitehorn        $(foreach sub, $(SRC_SUBDIRS), \
191217309Snwhitehorn          $(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \
192217309Snwhitehorn        $(patsubst %,%/$(strip $1)/module-info.java, $(IMPORT_MODULES_SRC)))
193217309Snwhitehorn
194217309Snwhitehorn# Find module-info.java files in the specific source dir
195217309Snwhitehorn# Param 1 - Src dir to find module-info.java files in
196217309SnwhitehornFindModuleInfosForSrcDir = \
197217309Snwhitehorn    $(wildcard \
198217309Snwhitehorn        $(foreach sub, $(SRC_SUBDIRS), \
199217309Snwhitehorn          $(patsubst %,%/*/$(sub)/module-info.java, $(strip $1)) \
200217309Snwhitehorn        ) \
201217309Snwhitehorn        $(patsubst %,%/*/module-info.java, $(strip $1)) \
202217309Snwhitehorn    )
203217309Snwhitehorn
204217309Snwhitehorn# Extract the module names from the paths of module-info.java files. The
205217309Snwhitehorn# position of the module directory differs depending on if this is an imported
206217309Snwhitehorn# src dir or not.
207217309SnwhitehornGetModuleNameFromModuleInfo = \
208217309Snwhitehorn    $(strip $(foreach mi, $1, \
209217309Snwhitehorn      $(if $(filter $(addsuffix %, $(IMPORT_MODULES_SRC)), $(mi)), \
210217309Snwhitehorn        $(notdir $(patsubst %/,%, $(dir $(mi)))), \
211217309Snwhitehorn        $(notdir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(mi)))))))))))
212217309Snwhitehorn
213217309Snwhitehorn# Find all modules by looking for module-info.java files and looking at parent
214217309Snwhitehorn# directories.
215217309SnwhitehornFindAllModules = \
216217309Snwhitehorn    $(sort $(filter-out $(MODULES_FILTER), \
217217309Snwhitehorn    $(call GetModuleNameFromModuleInfo, $(MODULE_INFOS))))
218217309Snwhitehorn
219217309Snwhitehorn# Find all modules in a specific src dir
220217309Snwhitehorn# Param 1 - Src dir to find modules in
221217309SnwhitehornFindModulesForSrcDir = \
222217309Snwhitehorn    $(sort $(filter-out $(MODULES_FILTER), \
223217309Snwhitehorn        $(call GetModuleNameFromModuleInfo, $(call FindModuleInfosForSrcDir, $1)) \
224217309Snwhitehorn    ))
225217309Snwhitehorn
226217309SnwhitehornFindImportedModules = \
227217309Snwhitehorn    $(filter-out $(MODULES_FILTER), \
228217309Snwhitehorn    $(if $(IMPORT_MODULES_CLASSES), $(notdir $(wildcard $(IMPORT_MODULES_CLASSES)/*))))
229217309Snwhitehorn
230217309Snwhitehorn# Find all source dirs for a particular module
231217309Snwhitehorn# $1 - Module to find source dirs for
232217309SnwhitehornFindModuleSrcDirs = \
233217309Snwhitehorn    $(strip $(wildcard \
234217309Snwhitehorn        $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
235217309Snwhitehorn        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
236217309Snwhitehorn
237217309Snwhitehorn# Construct the complete module source path
238217309SnwhitehornGetModuleSrcPath = \
239217309Snwhitehorn    $(call PathList, \
240217309Snwhitehorn        $(addsuffix /*, $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
241217309Snwhitehorn        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS))))
242217309Snwhitehorn
243217309Snwhitehorn################################################################################
244217309Snwhitehorn# Extract module dependencies from module-info.java files.
245217309Snwhitehorn
246217309SnwhitehornMODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk
247217309Snwhitehorn
248217309SnwhitehornMODULE_INFOS := $(call FindAllModuleInfos, *)
249217309Snwhitehorn
250217309Snwhitehorn$(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
251217309Snwhitehorn    $(call DependOnVariable, MODULE_INFOS, $(MAKESUPPORT_OUTPUTDIR)/MODULE_INFOS.vardeps)
252217309Snwhitehorn	$(MKDIR) -p $(@D)
253217309Snwhitehorn	$(RM) $@
254217309Snwhitehorn	$(foreach m, $(MODULE_INFOS), \
255217309Snwhitehorn	    ( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \
256217309Snwhitehorn	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
257217309Snwhitehorn	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
258217309Snwhitehorn	          /requires/ { sub(/;/, ""); \
259217309Snwhitehorn	                       sub(/requires/, ""); \
260217309Snwhitehorn	                       sub(/transitive/, ""); \
261217309Snwhitehorn	                       sub(/\/\/.*/, ""); \
262217309Snwhitehorn	                       sub(/\/\*.*\*\//, ""); \
263217309Snwhitehorn	                       gsub(/^ +\*.*/, ""); \
264217309Snwhitehorn	                       gsub(/ /, ""); \
265217309Snwhitehorn	                       printf(" %s", $$0) } \
266217309Snwhitehorn	          END        { printf("\n") }' $m \
267217309Snwhitehorn	    ) >> $@ $(NEWLINE))
268217309Snwhitehorn
269217309Snwhitehorn-include $(MODULE_DEPS_MAKEFILE)
270217309Snwhitehorn
271217309Snwhitehorn# Param 1: Module to find deps for
272217309SnwhitehornFindDepsForModule = \
273217309Snwhitehorn  $(DEPS_$(strip $1))
274217309Snwhitehorn
275217309Snwhitehorn# Finds transitive dependencies in 3 levels.
276217309Snwhitehorn# Param 1: Module to find transitive deps for
277217309SnwhitehornFindTransitiveDepsForModule = \
278217309Snwhitehorn    $(sort $(call FindDepsForModule, $1) \
279217309Snwhitehorn        $(foreach m, $(call FindDepsForModule, $1), \
280217309Snwhitehorn            $(call FindDepsForModule, $m) \
281217309Snwhitehorn            $(foreach n, $(call FindDepsForModule, $m), \
282217309Snwhitehorn                 $(call FindDepsForModule, $n))))
283217309Snwhitehorn
284217309Snwhitehorn# Upgradeable modules are those that are either defined as upgradeable or that
285217309Snwhitehorn# require an upradeable module.
286217309SnwhitehornFindAllUpgradeableModules = \
287217309Snwhitehorn    $(filter-out $(MODULES_FILTER) $(NON_UPGRADEABLE_MODULES), \
288217309Snwhitehorn        $(sort $(UPGRADEABLE_MODULES) $(foreach m, \
289217309Snwhitehorn            $(filter-out $(UPGRADEABLE_MODULES), $(call FindAllModules)), \
290217309Snwhitehorn          $(if $(filter $(UPGRADEABLE_MODULES), \
291217309Snwhitehorn              $(call FindTransitiveDepsForModule, $m)), \
292217309Snwhitehorn            $m \
293217309Snwhitehorn          ) \
294217309Snwhitehorn        )) \
295217309Snwhitehorn    )
296217309Snwhitehorn
297217309Snwhitehorn################################################################################
298217309Snwhitehorn
299217309SnwhitehornLEGAL_SUBDIRS += $(OPENJDK_TARGET_OS)/legal
300217309Snwhitehornifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
301217309Snwhitehorn  LEGAL_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/legal
302217309Snwhitehornendif
303217309SnwhitehornLEGAL_SUBDIRS += share/legal
304217309Snwhitehorn
305217309Snwhitehorn# Find all legal dirs for a particular module
306217309Snwhitehorn# $1 - Module to find legal dirs for
307217309SnwhitehornFindModuleLegalDirs = \
308217309Snwhitehorn    $(strip $(wildcard \
309217309Snwhitehorn        $(addsuffix /$(strip $1), $(IMPORT_MODULES_LEGAL)) \
310217309Snwhitehorn        $(foreach sub, $(LEGAL_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
311217309Snwhitehorn
312217309Snwhitehorn################################################################################
313217309Snwhitehorn
314217309Snwhitehorn# Param 1 - Name of module
315217309Snwhitehorndefine ReadSingleImportMetaData
316217309Snwhitehorn    ifneq ($$(wildcard $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties), )
317217309Snwhitehorn      classloader :=
318217309Snwhitehorn      include_in_jre :=
319217309Snwhitehorn      include_in_jdk :=
320217309Snwhitehorn      include $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties
321217309Snwhitehorn      ifeq ($$(include_in_jre), true)
322217309Snwhitehorn        JRE_MODULES += $1
323217309Snwhitehorn      endif
324217309Snwhitehorn      ifeq ($$(include_in_jdk), true)
325217309Snwhitehorn        JDK_MODULES += $1
326217309Snwhitehorn      endif
327217309Snwhitehorn      ifeq ($$(classloader), boot)
328217309Snwhitehorn        BOOT_MODULES += $1
329217309Snwhitehorn      else ifeq ($$(classloader), ext)
330217309Snwhitehorn        PLATFORM_MODULES += $1
331217309Snwhitehorn      endif
332217309Snwhitehorn    else
333217309Snwhitehorn      # Default to include in all
334217309Snwhitehorn      JRE_MODULES += $1
335217309Snwhitehorn      JDK_MODULES += $1
336217309Snwhitehorn    endif
337217309Snwhitehornendef
338217309Snwhitehorn
339217309Snwhitehorn# Reading the imported modules metadata has a cost, so to make it available,
340217309Snwhitehorn# a makefile needs to eval-call this macro first. After calling this, the
341217309Snwhitehorn# following variables are populated with data from the imported modules:
342217309Snwhitehorn# * JRE_MODULES
343217309Snwhitehorn# * JDK_MODULES
344217309Snwhitehorn# * BOOT_MODULES
345217309Snwhitehorn# * PLATFORM_MODULES
346217309Snwhitehorn# * JRE_TOOL_MODULES
347217309Snwhitehorndefine ReadImportMetaData
348217309Snwhitehorn    IMPORTED_MODULES := $$(call FindImportedModules)
349217309Snwhitehorn    $$(foreach m, $$(IMPORTED_MODULES), \
350217309Snwhitehorn      $$(eval $$(call ReadSingleImportMetaData, $$m)))
351217309Snwhitehornendef
352217309Snwhitehorn
353217309Snwhitehorn################################################################################
354217309Snwhitehorn
355217309Snwhitehornendif # _MODULES_GMK
356217309Snwhitehorn