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_MODULES_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_MODULES_DIR)/jdk.boot/include" ] ; then \
 232    $(CP) -rf $(ABS_MODULES_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_MODULES_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/BuildPackages.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