Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 1 | # |
| 2 | # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
| 3 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | # |
| 5 | # This code is free software; you can redistribute it and/or modify it |
| 6 | # under the terms of the GNU General Public License version 2 only, as |
| 7 | # published by the Free Software Foundation. Oracle designates this |
| 8 | # particular file as subject to the "Classpath" exception as provided |
| 9 | # by Oracle in the LICENSE file that accompanied this code. |
| 10 | # |
| 11 | # This code is distributed in the hope that it will be useful, but WITHOUT |
| 12 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 13 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 14 | # version 2 for more details (a copy is included in the LICENSE file that |
| 15 | # accompanied this code). |
| 16 | # |
| 17 | # You should have received a copy of the GNU General Public License version |
| 18 | # 2 along with this work; if not, write to the Free Software Foundation, |
| 19 | # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 20 | # |
| 21 | # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| 22 | # or visit www.oracle.com if you need additional information or have any |
| 23 | # questions. |
| 24 | # |
| 25 | |
| 26 | ifndef _MODULES_GMK |
| 27 | _MODULES_GMK := 1 |
| 28 | |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 29 | ################################################################################ |
| 30 | # |
| 31 | # BOOT_MODULES are modules defined by the boot loader |
| 32 | # PLATFORM_MODULES are modules defined by the platform loader |
| 33 | # JRE_TOOL_MODULES are tools included in JRE and defined by the application loader |
| 34 | # |
| 35 | # All other modules not declared below are defined by the application loader |
| 36 | # and are not included in JRE. |
| 37 | |
| 38 | BOOT_MODULES := |
| 39 | PLATFORM_MODULES := |
| 40 | JRE_TOOL_MODULES := |
| 41 | |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 42 | # Hook to include the corresponding custom file, if present. |
| 43 | $(eval $(call IncludeCustomExtension, , common/Modules.gmk)) |
| 44 | |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 45 | UPGRADEABLE_MDOULES := |
| 46 | AGGREGATOR_MDOULES := |
| 47 | |
| 48 | BOOT_MODULES += \ |
| 49 | java.base \ |
| 50 | java.datatransfer \ |
| 51 | java.desktop \ |
| 52 | java.httpclient \ |
| 53 | java.instrument \ |
| 54 | java.logging \ |
| 55 | java.management \ |
| 56 | java.naming \ |
| 57 | java.prefs \ |
| 58 | java.rmi \ |
| 59 | java.security.jgss \ |
| 60 | java.security.sasl \ |
| 61 | java.sql \ |
| 62 | java.xml \ |
| 63 | java.xml.crypto \ |
| 64 | jdk.httpserver \ |
| 65 | jdk.management \ |
| 66 | jdk.sctp \ |
| 67 | jdk.security.auth \ |
| 68 | jdk.security.jgss \ |
Chris Hegarty | cd42ea0 | 2016-04-09 19:49:32 +0100 | [diff] [blame] | 69 | jdk.unsupported \ |
Mandy Chung | 0c67cef | 2016-03-24 13:45:45 -0700 | [diff] [blame] | 70 | jdk.vm.ci \ |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 71 | # |
| 72 | |
| 73 | # to be deprivileged |
| 74 | BOOT_MODULES += \ |
| 75 | java.compiler \ |
| 76 | java.scripting \ |
| 77 | java.sql.rowset \ |
| 78 | java.smartcardio \ |
| 79 | jdk.charsets \ |
| 80 | jdk.naming.rmi \ |
| 81 | # |
| 82 | |
| 83 | UPGRADEABLE_MODULES += \ |
| 84 | java.activation \ |
| 85 | java.annotations.common \ |
| 86 | java.corba \ |
| 87 | java.transaction \ |
| 88 | java.xml.bind \ |
| 89 | java.xml.ws \ |
| 90 | # |
| 91 | |
| 92 | AGGREGATOR_MODULES += \ |
| 93 | java.compact1 \ |
| 94 | java.compact2 \ |
| 95 | java.compact3 \ |
| 96 | java.se \ |
| 97 | java.se.ee \ |
| 98 | # |
| 99 | |
| 100 | PLATFORM_MODULES += \ |
| 101 | $(UPGRADEABLE_MODULES) \ |
| 102 | $(AGGREGATOR_MODULES) |
| 103 | # |
| 104 | |
| 105 | PLATFORM_MODULES += \ |
| 106 | jdk.accessibility \ |
| 107 | jdk.crypto.ec \ |
| 108 | jdk.crypto.pkcs11 \ |
| 109 | jdk.dynalink \ |
| 110 | jdk.jsobject \ |
| 111 | jdk.xml.dom \ |
| 112 | jdk.localedata \ |
| 113 | jdk.naming.dns \ |
| 114 | jdk.scripting.nashorn \ |
| 115 | jdk.zipfs \ |
| 116 | # |
| 117 | |
| 118 | JRE_TOOL_MODULES += \ |
Erik Joelsson | ab7eeda | 2016-04-07 13:16:32 +0200 | [diff] [blame] | 119 | jdk.jdwp.agent \ |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 120 | jdk.pack200 \ |
| 121 | jdk.scripting.nashorn.shell \ |
| 122 | # |
| 123 | |
| 124 | ifeq ($(OPENJDK_TARGET_OS), windows) |
| 125 | PLATFORM_MODULES += jdk.crypto.mscapi |
| 126 | endif |
| 127 | ifeq ($(OPENJDK_TARGET_OS), solaris) |
| 128 | PLATFORM_MODULES += jdk.crypto.ucrypto |
| 129 | endif |
| 130 | |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 131 | ################################################################################ |
Erik Joelsson | 2322723 | 2015-11-24 12:18:24 +0100 | [diff] [blame] | 132 | # Some platforms don't have the serviceability agent |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 133 | |
Erik Joelsson | 2322723 | 2015-11-24 12:18:24 +0100 | [diff] [blame] | 134 | ifeq ($(INCLUDE_SA), false) |
| 135 | MODULES_FILTER += jdk.hotspot.agent |
| 136 | endif |
| 137 | |
| 138 | ################################################################################ |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 139 | # Module list macros |
| 140 | |
Erik Joelsson | ec39133 | 2016-04-13 18:11:29 +0200 | [diff] [blame] | 141 | # Use append so that the custom extension may add to these variables |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 142 | |
Erik Joelsson | ec39133 | 2016-04-13 18:11:29 +0200 | [diff] [blame] | 143 | GENERATED_SRC_DIRS += \ |
| 144 | $(SUPPORT_OUTPUTDIR)/gensrc \ |
| 145 | # |
| 146 | |
| 147 | TOP_SRC_DIRS += \ |
| 148 | $(CORBA_TOPDIR)/src \ |
Christian Thalinger | 4308ec2 | 2015-10-08 11:31:14 -1000 | [diff] [blame] | 149 | $(HOTSPOT_TOPDIR)/src \ |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 150 | $(JDK_TOPDIR)/src \ |
| 151 | $(LANGTOOLS_TOPDIR)/src \ |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 152 | $(JAXP_TOPDIR)/src \ |
| 153 | $(JAXWS_TOPDIR)/src \ |
| 154 | $(NASHORN_TOPDIR)/src \ |
| 155 | # |
| 156 | |
Erik Joelsson | ec39133 | 2016-04-13 18:11:29 +0200 | [diff] [blame] | 157 | SRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes |
| 158 | ifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE)) |
| 159 | SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes |
| 160 | endif |
| 161 | SRC_SUBDIRS += share/classes |
| 162 | |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 163 | # Find all module-info.java files for the current build target platform and |
| 164 | # configuration. |
| 165 | # Param 1 - Module to find for, set to * for finding all |
| 166 | FindAllModuleInfos = \ |
| 167 | $(wildcard \ |
Erik Joelsson | ec39133 | 2016-04-13 18:11:29 +0200 | [diff] [blame] | 168 | $(foreach sub, $(SRC_SUBDIRS), \ |
| 169 | $(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \ |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 170 | $(patsubst %,%/$(strip $1)/module-info.java, $(IMPORT_MODULES_SRC))) |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 171 | |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 172 | # Extract the module names from the paths of module-info.java files. The |
| 173 | # position of the module directory differs depending on if this is an imported |
| 174 | # src dir or not. |
| 175 | GetModuleNameFromModuleInfo = \ |
| 176 | $(strip $(foreach mi, $1, \ |
| 177 | $(if $(filter $(addsuffix %, $(IMPORT_MODULES_SRC)), $(mi)), \ |
| 178 | $(notdir $(patsubst %/,%, $(dir $(mi)))), \ |
| 179 | $(notdir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(mi))))))))))) |
| 180 | |
| 181 | # Find all modules by looking for module-info.java files and looking at parent |
| 182 | # directories. |
| 183 | FindAllModules = \ |
| 184 | $(sort $(filter-out $(MODULES_FILTER), \ |
| 185 | $(call GetModuleNameFromModuleInfo, $(MODULE_INFOS)))) |
| 186 | |
| 187 | FindImportedModules = \ |
| 188 | $(if $(IMPORT_MODULES_CLASSES), $(notdir $(wildcard $(IMPORT_MODULES_CLASSES)/*))) |
Erik Joelsson | beef993 | 2014-09-16 12:08:04 +0200 | [diff] [blame] | 189 | |
Erik Joelsson | ec39133 | 2016-04-13 18:11:29 +0200 | [diff] [blame] | 190 | # Find all source dirs for a particular module |
| 191 | # $1 - Module to find source dirs for |
| 192 | FindModuleSrcDirs = \ |
| 193 | $(strip $(wildcard \ |
| 194 | $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \ |
| 195 | $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS))))) |
| 196 | |
| 197 | # Construct the complete module source path |
| 198 | GetModuleSrcPath = \ |
| 199 | $(call PathList, \ |
| 200 | $(addsuffix /*, $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \ |
| 201 | $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS)))) |
| 202 | |
Erik Joelsson | beef993 | 2014-09-16 12:08:04 +0200 | [diff] [blame] | 203 | ################################################################################ |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 204 | # Extract module dependencies from module-info.java files. |
| 205 | |
Erik Joelsson | beef993 | 2014-09-16 12:08:04 +0200 | [diff] [blame] | 206 | MODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 207 | |
| 208 | MODULE_INFOS := $(call FindAllModuleInfos, *) |
| 209 | |
| 210 | $(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \ |
| 211 | $(call DependOnVariable, MODULE_INFOS, $(MAKESUPPORT_OUTPUTDIR)/MODULE_INFOS.vardeps) |
| 212 | $(MKDIR) -p $(@D) |
| 213 | $(RM) $@ |
| 214 | $(foreach m, $(MODULE_INFOS), \ |
| 215 | ( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \ |
| 216 | $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\ |
| 217 | BEGIN { if (MODULE != "java.base") printf(" java.base"); } \ |
| 218 | /requires/ { sub(/;/, ""); \ |
| 219 | sub(/requires/, ""); \ |
| 220 | sub(/public/, ""); \ |
| 221 | sub(/\/\/.*/, ""); \ |
| 222 | sub(/\/\*.*\*\//, ""); \ |
| 223 | gsub(/ /, ""); \ |
| 224 | printf(" %s", $$0) } \ |
| 225 | END { printf("\n") }' $m \ |
| 226 | ) >> $@ $(NEWLINE)) |
| 227 | |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 228 | -include $(MODULE_DEPS_MAKEFILE) |
| 229 | |
| 230 | # Param 1: Module to find deps for |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 231 | FindDepsForModule = \ |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 232 | $(DEPS_$(strip $1)) |
Alan Bateman | cc661dd | 2016-03-17 19:03:53 +0000 | [diff] [blame] | 233 | |
| 234 | # Finds transitive dependencies in 3 levels. |
| 235 | # Param 1: Module to find transitive deps for |
| 236 | FindTransitiveDepsForModule = \ |
| 237 | $(sort $(call FindDepsForModule, $1) \ |
| 238 | $(foreach m, $(call FindDepsForModule, $1), \ |
| 239 | $(call FindDepsForModule, $m) \ |
| 240 | $(foreach n, $(call FindDepsForModule, $m), \ |
| 241 | $(call FindDepsForModule, $n)))) |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 242 | |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 243 | ################################################################################ |
| 244 | |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 245 | # Param 1 - Name of module |
| 246 | define ReadSingleImportMetaData |
| 247 | ifneq ($$(wildcard $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties), ) |
| 248 | classloader := |
| 249 | include_in_jre := |
| 250 | include_in_jdk := |
| 251 | include $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties |
| 252 | ifeq ($$(include_in_jre), true) |
| 253 | JRE_MODULES += $1 |
| 254 | endif |
| 255 | ifeq ($$(include_in_jdk), true) |
| 256 | JDK_MODULES += $1 |
| 257 | endif |
| 258 | ifeq ($$(classloader), boot) |
| 259 | BOOT_MODULES += $1 |
| 260 | else ifeq ($$(classloader), ext) |
| 261 | PLATFORM_MODULES += $1 |
| 262 | endif |
| 263 | else |
| 264 | # Default to include in all |
| 265 | JRE_MODULES += $1 |
| 266 | JDK_MODULES += $1 |
| 267 | endif |
| 268 | endef |
| 269 | |
| 270 | # Reading the imported modules metadata has a cost, so to make it available, |
| 271 | # a makefile needs to eval-call this macro first. After calling this, the |
| 272 | # following variables are populated with data from the imported modules: |
| 273 | # * JRE_MODULES |
| 274 | # * JDK_MODULES |
| 275 | # * BOOT_MODULES |
| 276 | # * PLATFORM_MODULES |
| 277 | # * JRE_TOOL_MODULES |
| 278 | define ReadImportMetaData |
Erik Joelsson | 116ee6b | 2016-04-01 17:08:43 +0200 | [diff] [blame] | 279 | IMPORTED_MODULES := $$(call FindImportedModules) |
| 280 | $$(foreach m, $$(IMPORTED_MODULES), \ |
| 281 | $$(eval $$(call ReadSingleImportMetaData, $$m))) |
Mandy Chung | af242aa | 2016-03-23 09:20:41 -0700 | [diff] [blame] | 282 | endef |
| 283 | |
| 284 | ################################################################################ |
| 285 | |
Erik Joelsson | 74d5dde | 2014-08-21 12:22:42 +0200 | [diff] [blame] | 286 | endif # _MODULES_GMK |