1 # 2 # Copyright (c) 2009, 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 # 27 # modules Target to build jigsaw modules images. 28 # 29 # This target will build the modules images taking the jdk modules 30 # under the $outputdir/modules directory. For incremental build, 31 # make sure that $outputdir/modules is up-to-date (i.e. build 32 # make/modules/Makefile before invoking the "modules" target). 33 # 34 # The following modules images are created: 35 # 36 # jre-base-image: Minimal Java runtime environment 37 # jre-module-image: Full Java runtime environment with all JRE modules 38 # installed 39 # jdk-module-image: jre-module-image with all JDK modules installed 40 # i.e. full Java development kit 41 # 42 # TODO: we may not need jdk-base-image to build. It is for 43 # convenience for the base image testing that at least 44 # needs javac in it. 45 # 46 # jdk-base-image: jre-base-image with the language tool modules 47 # installed. 48 # 49 # 50 MODULE_IMAGES_DIR = $(ABS_OUTPUTDIR) 51 JDK_MODULE_IMAGE_DIR = $(MODULE_IMAGES_DIR)/jdk-module-image 52 JRE_MODULE_IMAGE_DIR = $(MODULE_IMAGES_DIR)/jre-module-image 53 JDK_BASE_IMAGE_DIR = $(MODULE_IMAGES_DIR)/jdk-base-image 54 JRE_BASE_IMAGE_DIR = $(MODULE_IMAGES_DIR)/jre-base-image 55 56 # 57 # TODO: 58 # 1. Any other sanity check to perform? 59 # 2. Trim out any extra files not for the jre shipment. 60 # (Note the jdk WILL want the jre image before this trimming) 61 # 3. Post process the image (strips and mcs on Elf files we are shipping) 62 # (Note the jdk WILL want the jre image before this processing) 63 # 4. Sign security jars and export policy files 64 # 5. Java DB, demos/samples module not installed yet 65 # 6. man pages - should go in the module of the tool? 66 # 67 # Open issues that need further investigation: 68 # 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns 69 # module. META-INF/services file is not installed. 70 # 2. Signed jars 71 # For JDK build, signed jars are copied to the build. 72 # All jars in the module image are unsigned. 73 # 3. sparcv9 image is installed on top of a sparc image 74 75 # 76 # Targets. 77 # 78 MODULE_TARGET_SUFFIX= 79 ifeq ($(PLATFORM), solaris) 80 ifeq ($(ARCH_DATA_MODEL), 64) 81 MODULE_TARGET_SUFFIX=-sol64 82 endif 83 endif 84 85 86 modules modules-clobber:: 87 @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." 88 89 # 90 # jdk-xxx-image depends on jre-xxx-image 91 # 92 # Build jdk-xxx-image target before jre-xxx-image target 93 # so that jre-xxx-image will be made only once 94 # 95 modules:: sanity-images post-sanity-images \ 96 $(EXPORT_BINARY_PLUGS) \ 97 gen-pkgs \ 98 jdk-base-image$(MODULE_TARGET_SUFFIX) \ 99 jre-base-image$(MODULE_TARGET_SUFFIX) \ 100 jdk-module-image$(MODULE_TARGET_SUFFIX) \ 101 jre-module-image$(MODULE_TARGET_SUFFIX) \ 102 post-image-build 103 104 ###### RULES for License and doc files 105 106 # JDK files 107 $(JDK_BASE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% 108 $(process-doc-file) 109 110 # Removes LICENSE_VERSION or not 111 ifdef LICENSE_VERSION 112 $(JDK_BASE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) 113 $(process-doc-file) 114 $(JDK_BASE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) 115 $(process-doc-file) 116 else 117 $(JDK_BASE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% 118 $(process-doc-file) 119 120 $(JDK_BASE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% 121 $(process-doc-file) 122 endif 123 124 # JRE files 125 $(JRE_BASE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% 126 $(process-doc-file) 127 128 # Add $(TEXT_SUFFIX) suffix 129 ifdef TEXT_SUFFIX 130 $(JRE_BASE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% 131 $(process-doc-file) 132 endif 133 134 # Removes LICENSE_VERSION or not 135 ifdef LICENSE_VERSION 136 $(JRE_BASE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) 137 $(process-doc-file) 138 139 $(JRE_BASE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) 140 $(process-doc-file) 141 else 142 $(JRE_BASE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% 143 $(process-doc-file) 144 145 $(JRE_BASE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% 146 $(process-doc-file) 147 endif 148 149 # JDK files 150 $(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% 151 $(process-doc-file) 152 153 # Removes LICENSE_VERSION or not 154 ifdef LICENSE_VERSION 155 $(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) 156 $(process-doc-file) 157 $(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) 158 $(process-doc-file) 159 else 160 $(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% 161 $(process-doc-file) 162 163 $(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% 164 $(process-doc-file) 165 endif 166 167 # JRE files 168 $(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% 169 $(process-doc-file) 170 171 # Add $(TEXT_SUFFIX) suffix 172 ifdef TEXT_SUFFIX 173 $(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% 174 $(process-doc-file) 175 endif 176 177 # Removes LICENSE_VERSION or not 178 ifdef LICENSE_VERSION 179 $(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) 180 $(process-doc-file) 181 182 $(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) 183 $(process-doc-file) 184 else 185 $(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% 186 $(process-doc-file) 187 188 $(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% 189 $(process-doc-file) 190 endif 191 192 # 193 # Create a module library for the specified image location 194 define create-module-library 195 image=$(strip $1); \ 196 mlib=$(MODULE_IMAGES_DIR)/$$image/lib/modules; \ 197 $(ECHO) "Creating module library $$mlib" ; \ 198 $(HOST_JMOD_CMD) create -N -L $$mlib 199 endef 200 201 # Copy module content to the module image 202 # $1 - image location 203 # $2 - module name 204 # 205 define copy-module-content 206 image=$(strip $1); m=$(strip $2); \ 207 javahome=$(MODULE_IMAGES_DIR)/$$image; \ 208 for d in bin lib ; do \ 209 if [ -d $$m/$$d ] ; then \ 210 $(CP) -rf $(ABS_MODULEPATH_DIR)/$$m/$$d $$javahome; \ 211 fi ; \ 212 done 213 endef 214 215 # 216 # Copy JRE image to the dest 217 # $1 - jre image location 218 # $2 - dest location 219 # 220 # Shall investigate if we can eliminate the dependency on this special 221 # copy of the lib/dll files. 222 # Probably better to copy these files to part of the jdk.base.tools module 223 # Also, need to copy jawt.lib. 224 # 225 # Should *_SUFFIX variable either have "." or not dot? 226 # 227 define copy-jre-image 228 from=$(strip $1); dest=$(strip $2); \ 229 ($(CD) $(MODULE_IMAGES_DIR)/$$from && $(FIND) . -depth -print \ 230 | $(CPIO) -pdum $(MODULE_IMAGES_DIR)/$$dest) ; \ 231 if [ -d "$(ABS_MODULEPATH_DIR)/jdk.boot/include" ] ; then \ 232 $(CP) -rf $(ABS_MODULEPATH_DIR)/jdk.boot/include $(MODULE_IMAGES_DIR)/$$dest; \ 233 fi 234 endef 235 236 # 237 # Install jigsaw module 238 # $1 - image location 239 # $2 - module name 240 define install-jigsaw-module 241 image=$(strip $1); m=$(strip $2); \ 242 mlib=$(MODULE_IMAGES_DIR)/$$image/lib/modules; \ 243 mid=`$(HOST_JMOD_CMD) ls -L $$mlib $$m | $(GREP) -v '#'` ; \ 244 if [ "x$$mid" = "x" ] ; then \ 245 $(ECHO) "Installing module $$m in $$image" ; \ 246 $(CD) $(ABS_MODULEPATH_DIR) && \ 247 if [ -d $$m/resources ] ; then \ 248 $(HOST_JMOD_CMD) install $$m/classes -r $$m/resources -L $$mlib $$m || exit 1; \ 249 else \ 250 $(HOST_JMOD_CMD) install $$m/classes -L $$mlib $$m || exit 1; \ 251 fi ; \ 252 $(call copy-module-content,$1,$2) ; \ 253 else \ 254 $(ECHO) "Module $$m already installed in $$image" ; \ 255 fi 256 endef 257 258 259 # Rules for building packages 260 include $(BUILDDIR)/common/BuildNativePackages.gmk 261 262 PKG_TYPES = jmod-pkgs 263 DEBIAN := $(shell \ 264 if [ -f /etc/debian_version ] ; then \ 265 $(ECHO) true; \ 266 else \ 267 $(ECHO) false; \ 268 fi) 269 270 271 # set BUILD_PACKAGES=false to skip building jmod and native packages 272 # 273 ifeq ($(BUILD_PACKAGES), false) 274 PKG_TYPES = 275 DEBIAN = false 276 endif 277 278 ifeq ($(DEBIAN), true) 279 PKG_TYPES += deb-pkgs 280 endif 281 282 gen-pkgs: $(PKG_TYPES) 283 284 285 %-setup: 286 $(RM) -r $(MODULE_IMAGES_DIR)/$* 287 $(MKDIR) $(MODULE_IMAGES_DIR)/$* 288 289 jdk-base-image: jre-base-image \ 290 jdk-base-image-setup \ 291 jdk-base-image-docfiles 292 $(call copy-jre-image,jre-base-image,$@) 293 @for jm in `$(NAWK) '{print $$1}' $(JDK_BASE_MODULES)` ; do \ 294 $(call install-jigsaw-module,$@,$$jm) ; \ 295 done 296 297 jre-base-image: jre-base-image-setup \ 298 jre-base-image-docfiles 299 $(call create-module-library,$@) 300 @for jm in `$(NAWK) '{print $$1}' $(JRE_BASE_MODULES)` ; do \ 301 $(call install-jigsaw-module,$@,$$jm) ; \ 302 done 303 304 # 64-bit solaris jre image contains only the 64-bit add-on files. 305 # FIXME: should there be two sets of modules (one for sparc and one for sparcv9)? 306 jdk-base-image-sol64: jre-base-image-sol64 \ 307 jdk-base-image-setup \ 308 $(LICENSE_DOCLIST_JRE:%=$(JDK_BASE_IMAGE_DIR)/%64) 309 @# Temporary workaround - install sparcv9 modules 310 $(call copy-jre-image,jre-base-image,jdk-base-image) 311 @for jm in `$(NAWK) '{print $$1}' $(JDK_BASE_MODULES)` ; do \ 312 $(call install-jigsaw-module,jdk-base-image,$$jm) ; \ 313 done 314 315 jre-base-image-sol64: jre-base-image-setup \ 316 $(LICENSE_DOCLIST_JRE:%=$(JRE_BASE_IMAGE_DIR)/%64) 317 @# Temporary workaround - install sparcv9 modules 318 $(call create-module-library,jre-base-image) 319 @for jm in `$(NAWK) '{print $$1}' $(JRE_BASE_MODULES)` ; do \ 320 $(call install-jigsaw-module,jre-base-image,$$jm) ; \ 321 done 322 323 jdk-base-image-docfiles: $(LICENSE_DOCLIST_JDK:%=$(JDK_BASE_IMAGE_DIR)/%) \ 324 $(OTHER_DOCLIST_JDK:%=$(JDK_BASE_IMAGE_DIR)/%) 325 326 jre-base-image-docfiles: $(LICENSE_DOCLIST_JRE:%=$(JRE_BASE_IMAGE_DIR)/%) \ 327 $(OTHER_DOCLIST_JRE:%=$(JRE_BASE_IMAGE_DIR)/%) \ 328 $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_BASE_IMAGE_DIR)/%$(TEXT_SUFFIX)) 329 330 jdk-module-image: jre-module-image \ 331 jdk-module-image-setup \ 332 jdk-module-image-docfiles 333 $(call copy-jre-image,jre-module-image,$@) 334 @for jm in `$(NAWK) '{print $$1}' $(JDK_MODULES)` ; do \ 335 $(call install-jigsaw-module,$@,$$jm); \ 336 done 337 338 jre-module-image: jre-module-image-setup \ 339 jre-module-image-docfiles 340 $(call create-module-library,$@) 341 @for jm in `$(NAWK) '{print $$1}' $(JRE_MODULES)` ; do \ 342 $(call install-jigsaw-module,$@,$$jm); \ 343 done 344 345 # 64-bit solaris jre image contains only the 64-bit add-on files. 346 # FIXME: should there be two sets of modules (one for sparc and one for sparcv9)? 347 jdk-module-image-sol64: jre-module-image-sol64 \ 348 jdk-module-image-setup \ 349 jdk-module-image-docfiles \ 350 $(LICENSE_DOCLIST_JRE:%=$(JDK_MODULE_IMAGE_DIR)/%64) 351 @# Temporary workaround - install sparcv9 modules 352 $(call copy-jre-image,jre-module-image,jdk-module-image) 353 @for jm in `$(NAWK) '{print $$1}' $(JDK_MODULES)` ; do \ 354 $(call install-jigsaw-module,jdk-module-image,$$jm); \ 355 done 356 357 jre-module-image-sol64: jre-module-image-setup \ 358 jre-module-image-docfiles \ 359 $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%64) 360 @# Temporary workaround - install sparcv9 modules 361 $(call create-module-library,jre-module-image) 362 @for jm in `$(NAWK) '{print $$1}' $(JRE_MODULES)` ; do \ 363 $(call install-jigsaw-module,jre-module-image,$$jm); \ 364 done 365 366 jdk-module-image-docfiles: $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) \ 367 $(OTHER_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) 368 369 jre-module-image-docfiles: $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) \ 370 $(OTHER_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) \ 371 $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX)) 372 373 post-image-build: 374 @# Make sure all directories are read/execute for everyone 375 @# chmod complains arg list too long; so do it one by one 376 $(CHMOD) a+rx `$(FIND) $(JDK_BASE_IMAGE_DIR) -type d` 377 $(CHMOD) a+rx `$(FIND) $(JRE_BASE_IMAGE_DIR) -type d` 378 $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d` 379 $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d` 380 381 ###################################################### 382 # clobber 383 ###################################################### 384 modules-clobber:: 385 $(RM) -r $(MODULE_IMAGES_DIR) 386 387 modules modules-clobber:: 388 @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." 389 @$(java-vm-cleanup) 390 391 .PHONY: modules modules-clobber gen-pkgs \ 392 jre-base-image$(MODULE_TARGET_SUFFIX) \ 393 jdk-base-image$(MODULE_TARGET_SUFFIX) \ 394 jre-module-image$(MODULE_TARGET_SUFFIX) \ 395 jdk-module-image$(MODULE_TARGET_SUFFIX) 396 397 # Force rule 398 FRC: 399