Modules.gmk revision 2578:0bf994fa4ee5
1286434Sbapt#
2286434Sbapt# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
3286434Sbapt# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4286434Sbapt#
5286434Sbapt# This code is free software; you can redistribute it and/or modify it
6286434Sbapt# under the terms of the GNU General Public License version 2 only, as
7286434Sbapt# published by the Free Software Foundation.  Oracle designates this
8286434Sbapt# particular file as subject to the "Classpath" exception as provided
9286434Sbapt# by Oracle in the LICENSE file that accompanied this code.
10286434Sbapt#
11286434Sbapt# This code is distributed in the hope that it will be useful, but WITHOUT
12286434Sbapt# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13286434Sbapt# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14286434Sbapt# version 2 for more details (a copy is included in the LICENSE file that
15286434Sbapt# accompanied this code).
16286434Sbapt#
17286434Sbapt# You should have received a copy of the GNU General Public License version
18286434Sbapt# 2 along with this work; if not, write to the Free Software Foundation,
19286434Sbapt# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20286434Sbapt#
21286434Sbapt# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22286434Sbapt# or visit www.oracle.com if you need additional information or have any
23286434Sbapt# questions.
24286434Sbapt#
25286434Sbapt
26286434Sbaptifndef _MODULES_GMK
27286434Sbapt_MODULES_GMK := 1
28286434Sbapt
29286434Sbapt################################################################################
30286434Sbapt#
31286434Sbapt# BOOT_MODULES are modules defined by the boot loader
32286434Sbapt# PLATFORM_MODULES are modules defined by the platform loader
33286434Sbapt# JRE_TOOL_MODULES are tools included in JRE and defined by the application loader
34286434Sbapt#
35286434Sbapt# All other modules not declared below are defined by the application loader
36286434Sbapt# and are not included in JRE.
37286434Sbapt
38286434SbaptBOOT_MODULES :=
39286434SbaptPLATFORM_MODULES :=
40286434SbaptJRE_TOOL_MODULES :=
41286434SbaptUPGRADEABLE_MODULES :=
42286434SbaptAGGREGATOR_MODULES :=
43286434SbaptDOCS_MODULES :=
44286434Sbapt
45286434Sbapt# Hook to include the corresponding custom file, if present.
46286434Sbapt$(eval $(call IncludeCustomExtension, , common/Modules.gmk))
47286434Sbapt
48286434SbaptBOOT_MODULES += \
49286434Sbapt    java.base \
50286434Sbapt    java.datatransfer \
51286434Sbapt    java.desktop \
52286434Sbapt    java.instrument \
53286434Sbapt    java.logging \
54286434Sbapt    java.management \
55286434Sbapt    java.management.rmi \
56286434Sbapt    java.naming \
57286434Sbapt    java.prefs \
58286434Sbapt    java.rmi \
59286434Sbapt    java.security.sasl \
60286434Sbapt    java.xml \
61286434Sbapt    jdk.httpserver \
62286434Sbapt    jdk.internal.vm.ci \
63286434Sbapt    jdk.management \
64286434Sbapt    jdk.management.agent \
65286434Sbapt    jdk.net \
66286434Sbapt    jdk.sctp \
67286434Sbapt    jdk.unsupported \
68286434Sbapt    #
69286434Sbapt
70286434Sbapt# to be deprivileged
71286434SbaptBOOT_MODULES += \
72286434Sbapt    jdk.naming.rmi \
73286434Sbapt    #
74286434Sbapt
75286434SbaptUPGRADEABLE_MODULES += \
76286434Sbapt    java.activation \
77286434Sbapt    java.corba \
78286434Sbapt    java.transaction \
79286434Sbapt    java.xml.bind \
80286434Sbapt    java.xml.ws \
81286434Sbapt    java.xml.ws.annotation \
82286434Sbapt    #
83286434Sbapt
84286434Sbapt# Modules explicitly declared as not being upgradeable even though they require
85286434Sbapt# an upgradeable module.
86286434SbaptNON_UPGRADEABLE_MODULES +=
87286434Sbapt
88286434SbaptAGGREGATOR_MODULES += \
89286434Sbapt    java.se \
90286434Sbapt    java.se.ee \
91286434Sbapt    #
92286434Sbapt
93286434SbaptPLATFORM_MODULES += \
94286434Sbapt    $(UPGRADEABLE_MODULES) \
95286434Sbapt    $(AGGREGATOR_MODULES)
96286434Sbapt    #
97286434Sbapt
98286434SbaptPLATFORM_MODULES += \
99286434Sbapt    java.compiler \
100286434Sbapt    java.scripting \
101286434Sbapt    java.security.jgss \
102286434Sbapt    java.smartcardio \
103286434Sbapt    java.sql \
104286434Sbapt    java.sql.rowset \
105286434Sbapt    java.xml.crypto \
106286434Sbapt    jdk.accessibility \
107286434Sbapt    jdk.charsets \
108286434Sbapt    jdk.crypto.cryptoki \
109286434Sbapt    jdk.crypto.ec \
110286434Sbapt    jdk.dynalink \
111286434Sbapt    jdk.incubator.httpclient \
112286434Sbapt    jdk.internal.vm.compiler \
113286434Sbapt    jdk.jsobject \
114286434Sbapt    jdk.localedata \
115286434Sbapt    jdk.naming.dns \
116286434Sbapt    jdk.scripting.nashorn \
117286434Sbapt    jdk.security.auth \
118286434Sbapt    jdk.security.jgss \
119286434Sbapt    jdk.xml.dom \
120286434Sbapt    jdk.zipfs \
121286434Sbapt    #
122286434Sbapt
123286434Sbaptifeq ($(OPENJDK_TARGET_OS), windows)
124286434Sbapt  PLATFORM_MODULES += jdk.crypto.mscapi
125286434Sbaptendif
126286434Sbapt
127286434Sbaptifeq ($(OPENJDK_TARGET_OS), solaris)
128286434Sbapt  PLATFORM_MODULES += jdk.crypto.ucrypto
129286434Sbaptendif
130286434Sbapt
131286434SbaptJRE_TOOL_MODULES += \
132286434Sbapt    jdk.jdwp.agent \
133286434Sbapt    jdk.pack \
134286434Sbapt    jdk.scripting.nashorn.shell \
135286434Sbapt    #
136286434Sbapt
137286434Sbapt################################################################################
138286434Sbapt
139286434Sbapt# DOCS_MODULES defines the root modules for javadoc generation.
140286434Sbapt# All of their `require transitive` modules directly and indirectly will be included.
141286434SbaptDOCS_MODULES += \
142286434Sbapt    java.se.ee \
143286434Sbapt    java.smartcardio \
144286434Sbapt    jdk.accessibility \
145286434Sbapt    jdk.attach \
146286434Sbapt    jdk.charsets \
147286434Sbapt    jdk.compiler \
148286434Sbapt    jdk.crypto.cryptoki \
149286434Sbapt    jdk.crypto.ec \
150286434Sbapt    jdk.dynalink \
151286434Sbapt    jdk.editpad \
152286434Sbapt    jdk.httpserver \
153286434Sbapt    jdk.incubator.httpclient \
154286434Sbapt    jdk.jartool \
155286434Sbapt    jdk.javadoc \
156286434Sbapt    jdk.jconsole \
157286434Sbapt    jdk.jdeps \
158286434Sbapt    jdk.jdi \
159286434Sbapt    jdk.jlink \
160286434Sbapt    jdk.jshell \
161286434Sbapt    jdk.localedata \
162286434Sbapt    jdk.management \
163286434Sbapt    jdk.naming.dns \
164286434Sbapt    jdk.naming.rmi \
165286434Sbapt    jdk.net \
166286434Sbapt    jdk.scripting.nashorn \
167286434Sbapt    jdk.sctp \
168286434Sbapt    jdk.security.auth \
169286434Sbapt    jdk.security.jgss \
170286434Sbapt    jdk.xml.dom \
171286434Sbapt    jdk.zipfs \
172286434Sbapt    #
173286434Sbapt
174286434Sbapt# These modules are included in the interim image which is used to run profiling
175286434Sbapt# before building the real images.
176286434SbaptINTERIM_IMAGE_MODULES := java.base java.logging
177286434Sbapt
178286434Sbapt################################################################################
179286434Sbapt# Some platforms don't have the serviceability agent
180286434Sbapt
181286434Sbaptifeq ($(INCLUDE_SA), false)
182286434Sbapt  MODULES_FILTER += jdk.hotspot.agent
183286434Sbaptendif
184286434Sbapt
185286434Sbapt################################################################################
186286434Sbapt# Filter out Graal specific modules if Graal build is disabled
187286434Sbapt
188286434Sbaptifeq ($(INCLUDE_GRAAL), false)
189286434Sbapt  MODULES_FILTER += jdk.internal.vm.compiler
190286434Sbaptendif
191286434Sbapt
192286434Sbapt################################################################################
193286434Sbapt# Filter out aot specific modules if aot is disabled
194286434Sbapt
195286434Sbaptifeq ($(ENABLE_AOT), false)
196286434Sbapt  MODULES_FILTER += jdk.aot
197286434Sbaptendif
198286434Sbapt
199286434Sbapt################################################################################
200286434Sbapt# Module list macros
201286434Sbapt
202286434Sbapt# Use append so that the custom extension may add to these variables
203286434Sbapt
204286434SbaptGENERATED_SRC_DIRS += \
205286434Sbapt    $(SUPPORT_OUTPUTDIR)/gensrc \
206286434Sbapt    #
207286434Sbapt
208286434SbaptTOP_SRC_DIRS += \
209286434Sbapt    $(CORBA_TOPDIR)/src \
210286434Sbapt    $(HOTSPOT_TOPDIR)/src \
211286434Sbapt    $(JDK_TOPDIR)/src \
212286434Sbapt    $(LANGTOOLS_TOPDIR)/src \
213286434Sbapt    $(JAXP_TOPDIR)/src \
214286434Sbapt    $(JAXWS_TOPDIR)/src \
215286434Sbapt    $(NASHORN_TOPDIR)/src \
216286434Sbapt    #
217286434Sbapt
218286434SbaptSRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes
219286434Sbaptifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
220286434Sbapt  SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes
221286434Sbaptendif
222286434SbaptSRC_SUBDIRS += share/classes
223286434Sbapt
224286434Sbapt# Find all module-info.java files for the current build target platform and
225286434Sbapt# configuration.
226286434Sbapt# Param 1 - Module to find for, set to * for finding all
227286434SbaptFindAllModuleInfos = \
228286434Sbapt    $(wildcard \
229286434Sbapt        $(foreach sub, $(SRC_SUBDIRS), \
230286434Sbapt          $(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \
231286434Sbapt        $(patsubst %,%/$(strip $1)/module-info.java, $(IMPORT_MODULES_SRC)))
232286434Sbapt
233286434Sbapt# Find module-info.java files in the specific source dir
234286434Sbapt# Param 1 - Src dir to find module-info.java files in
235286434SbaptFindModuleInfosForSrcDir = \
236286434Sbapt    $(wildcard \
237286434Sbapt        $(foreach sub, $(SRC_SUBDIRS), \
238286434Sbapt          $(patsubst %,%/*/$(sub)/module-info.java, $(strip $1)) \
239286434Sbapt        ) \
240286434Sbapt        $(patsubst %,%/*/module-info.java, $(strip $1)) \
241286434Sbapt    )
242286434Sbapt
243286434Sbapt# Extract the module names from the paths of module-info.java files. The
244286434Sbapt# position of the module directory differs depending on if this is an imported
245286434Sbapt# src dir or not.
246286434SbaptGetModuleNameFromModuleInfo = \
247286434Sbapt    $(strip $(foreach mi, $1, \
248286434Sbapt      $(if $(filter $(addsuffix %, $(IMPORT_MODULES_SRC)), $(mi)), \
249286434Sbapt        $(notdir $(patsubst %/,%, $(dir $(mi)))), \
250286434Sbapt        $(notdir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(mi)))))))))))
251286434Sbapt
252286434Sbapt# Find all modules by looking for module-info.java files and looking at parent
253286434Sbapt# directories.
254286434SbaptFindAllModules = \
255286434Sbapt    $(sort $(filter-out $(MODULES_FILTER), \
256286434Sbapt    $(call GetModuleNameFromModuleInfo, $(MODULE_INFOS))))
257286434Sbapt
258286434Sbapt# Find all modules in a specific src dir
259286434Sbapt# Param 1 - Src dir to find modules in
260286434SbaptFindModulesForSrcDir = \
261286434Sbapt    $(sort $(filter-out $(MODULES_FILTER), \
262286434Sbapt        $(call GetModuleNameFromModuleInfo, $(call FindModuleInfosForSrcDir, $1)) \
263286434Sbapt    ))
264286434Sbapt
265286434SbaptFindImportedModules = \
266286434Sbapt    $(filter-out $(MODULES_FILTER), \
267286434Sbapt    $(if $(IMPORT_MODULES_CLASSES), $(notdir $(wildcard $(IMPORT_MODULES_CLASSES)/*))))
268286434Sbapt
269286434Sbapt# Find all source dirs for a particular module
270286434Sbapt# $1 - Module to find source dirs for
271286434SbaptFindModuleSrcDirs = \
272286434Sbapt    $(strip $(wildcard \
273286434Sbapt        $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
274286434Sbapt        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
275286434Sbapt
276286434Sbapt# Construct the complete module source path
277286434SbaptGetModuleSrcPath = \
278286434Sbapt    $(call PathList, \
279286434Sbapt        $(addsuffix /*, $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
280286434Sbapt        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS))))
281286434Sbapt
282286434Sbapt################################################################################
283286434Sbapt# Extract module dependencies from module-info.java files.
284286434Sbapt
285286434SbaptMODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk
286286434Sbapt
287286434SbaptMODULE_INFOS := $(call FindAllModuleInfos, *)
288286434Sbapt
289286434Sbapt$(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
290286434Sbapt    $(call DependOnVariable, MODULE_INFOS, $(MAKESUPPORT_OUTPUTDIR)/MODULE_INFOS.vardeps)
291286434Sbapt	$(MKDIR) -p $(@D)
292286434Sbapt	$(RM) $@
293286434Sbapt	$(foreach m, $(MODULE_INFOS), \
294286434Sbapt	    ( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \
295286434Sbapt	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
296286434Sbapt	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
297286434Sbapt	          /^ *requires/ { sub(/;/, ""); \
298286434Sbapt	                          sub(/requires/, ""); \
299286434Sbapt	                          sub(/transitive/, ""); \
300286434Sbapt	                          sub(/\/\/.*/, ""); \
301286434Sbapt	                          sub(/\/\*.*\*\//, ""); \
302286434Sbapt	                          gsub(/^ +\*.*/, ""); \
303286434Sbapt	                          gsub(/ /, ""); \
304286434Sbapt	                          printf(" %s", $$0) } \
305286434Sbapt	          END           { printf("\n") }' $m \
306286434Sbapt	    ) >> $@ $(NEWLINE))
307286434Sbapt
308286434Sbapt-include $(MODULE_DEPS_MAKEFILE)
309286434Sbapt
310286434Sbapt# Param 1: Module to find deps for
311286434SbaptFindDepsForModule = \
312286434Sbapt  $(DEPS_$(strip $1))
313286434Sbapt
314286434Sbapt# Finds transitive dependencies in 3 levels.
315286434Sbapt# Param 1: Module to find transitive deps for
316286434SbaptFindTransitiveDepsForModule = \
317286434Sbapt    $(sort $(call FindDepsForModule, $1) \
318286434Sbapt        $(foreach m, $(call FindDepsForModule, $1), \
319286434Sbapt            $(call FindDepsForModule, $m) \
320286434Sbapt            $(foreach n, $(call FindDepsForModule, $m), \
321286434Sbapt                 $(call FindDepsForModule, $n))))
322286434Sbapt
323286434Sbapt# Finds transitive dependencies in 3 levels for a set of modules.
324286434Sbapt# Param 1: List of modules to find transitive deps for
325286434SbaptFindTransitiveDepsForModules = \
326286434Sbapt    $(sort $(foreach m, $1, $(call FindTransitiveDepsForModule, $m)))
327286434Sbapt
328286434Sbapt# Upgradeable modules are those that are either defined as upgradeable or that
329286434Sbapt# require an upradeable module.
330286434SbaptFindAllUpgradeableModules = \
331286434Sbapt    $(filter-out $(MODULES_FILTER) $(NON_UPGRADEABLE_MODULES), \
332286434Sbapt        $(sort $(UPGRADEABLE_MODULES) $(foreach m, \
333286434Sbapt            $(filter-out $(UPGRADEABLE_MODULES), $(call FindAllModules)), \
334286434Sbapt          $(if $(filter $(UPGRADEABLE_MODULES), \
335286434Sbapt              $(call FindTransitiveDepsForModule, $m)), \
336286434Sbapt            $m \
337286434Sbapt          ) \
338286434Sbapt        )) \
339286434Sbapt    )
340286434Sbapt
341286434Sbapt################################################################################
342286434Sbapt
343286434SbaptLEGAL_SUBDIRS += $(OPENJDK_TARGET_OS)/legal
344286434Sbaptifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
345286434Sbapt  LEGAL_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/legal
346286434Sbaptendif
347286434SbaptLEGAL_SUBDIRS += share/legal
348286434Sbapt
349286434Sbapt# Find all legal dirs for a particular module
350286434Sbapt# $1 - Module to find legal dirs for
351286434SbaptFindModuleLegalDirs = \
352286434Sbapt    $(strip $(wildcard \
353286434Sbapt        $(addsuffix /$(strip $1), $(IMPORT_MODULES_LEGAL)) \
354286434Sbapt        $(foreach sub, $(LEGAL_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))
355286434Sbapt
356286434Sbapt################################################################################
357286434Sbapt
358286434Sbapt# Param 1 - Name of module
359286434Sbaptdefine ReadSingleImportMetaData
360286434Sbapt    ifneq ($$(wildcard $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties), )
361286434Sbapt      classloader :=
362286434Sbapt      include_in_jre :=
363286434Sbapt      include_in_jdk :=
364286434Sbapt      include $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties
365286434Sbapt      ifeq ($$(include_in_jre), true)
366286434Sbapt        JRE_MODULES += $1
367286434Sbapt      endif
368286434Sbapt      ifeq ($$(include_in_jdk), true)
369286434Sbapt        JDK_MODULES += $1
370286434Sbapt      endif
371286434Sbapt      ifeq ($$(classloader), boot)
372286434Sbapt        BOOT_MODULES += $1
373286434Sbapt      else ifeq ($$(classloader), ext)
374286434Sbapt        PLATFORM_MODULES += $1
375286434Sbapt      endif
376286434Sbapt      DOCS_MODULES += $1
377286434Sbapt    else
378286434Sbapt      # Default to include in all
379286434Sbapt      JRE_MODULES += $1
380286434Sbapt      JDK_MODULES += $1
381286434Sbapt    endif
382286434Sbaptendef
383286434Sbapt
384286434Sbapt# Reading the imported modules metadata has a cost, so to make it available,
385286434Sbapt# a makefile needs to eval-call this macro first. After calling this, the
386286434Sbapt# following variables are populated with data from the imported modules:
387286434Sbapt# * JRE_MODULES
388286434Sbapt# * JDK_MODULES
389286434Sbapt# * BOOT_MODULES
390286434Sbapt# * PLATFORM_MODULES
391286434Sbapt# * JRE_TOOL_MODULES
392286434Sbaptdefine ReadImportMetaData
393286434Sbapt    IMPORTED_MODULES := $$(call FindImportedModules)
394286434Sbapt    $$(foreach m, $$(IMPORTED_MODULES), \
395286434Sbapt      $$(eval $$(call ReadSingleImportMetaData, $$m)))
396286434Sbaptendef
397286434Sbapt
398286434Sbapt################################################################################
399286434Sbapt
400286434Sbaptendif # _MODULES_GMK
401286434Sbapt