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