1 #
   2 # Copyright (c) 2016, 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 default: all
  27 
  28 include $(SPEC)
  29 include MakeBase.gmk
  30 
  31 PRODUCT_TARGETS :=
  32 TEST_TARGETS :=
  33 DOCS_TARGETS :=
  34 
  35 # On Windows tar frequently complains that "file changed as we read it" for
  36 # some random source files. This seems to be cause by anti virus scanners and
  37 # is most likely safe to ignore. When it happens, tar returns '1'.
  38 ifeq ($(OPENJDK_BUILD_OS), windows)
  39   TAR_IGNORE_EXIT_VALUE := || test "$$$$?" = "1"
  40 endif
  41 
  42 # Hook to include the corresponding custom file, if present.
  43 $(eval $(call IncludeCustomExtension, , Bundles-pre.gmk))
  44 ################################################################################
  45 # BUNDLE : Name of bundle to create
  46 # FILES : Files in BASE_DIRS to add to bundle
  47 # SPECIAL_INCLUDES : List of directories inside BASE_DIRS to look for additional
  48 #     files in. These files will not get proper dependency handling. Use when
  49 #     files or directories may contain spaces.
  50 # BASE_DIRS : Base directories for the root dir in the bundle.
  51 # SUBDIR : Optional name of root dir in bundle.
  52 SetupBundleFile = $(NamedParamsMacroTemplate)
  53 define SetupBundleFileBody
  54 
  55   $$(foreach d, $$($1_BASE_DIRS), \
  56     $$(eval $1_$$d_RELATIVE_FILES := $$$$(patsubst $$d/%, %, \
  57         $$$$(filter $$d/%, $$$$($1_FILES)))) \
  58     $$(eval $1_$$d_LIST_FILE := \
  59         $(SUPPORT_OUTPUTDIR)/bundles/_$1_$$$$(subst /,_,$$$$(patsubst $(OUTPUTDIR)/%,%,$$d)_files)) \
  60   )
  61 
  62   ifneq ($$(filter %.tar.gz, $$($1_BUNDLE_NAME)), )
  63     $1_TYPE := tar.gz
  64   else ifneq ($$(filter %.zip, $$($1_BUNDLE_NAME)), )
  65     $1_TYPE := zip
  66   else
  67     $$(error Unknown bundle type $$($1_BUNDLE_NAME))
  68   endif
  69 
  70   $$(call SetIfEmpty, $1_UNZIP_DEBUGINFO, false)
  71 
  72   $(BUNDLES_OUTPUTDIR)/$$($1_BUNDLE_NAME): $$($1_FILES)
  73         $$(foreach d, $$($1_BASE_DIRS), \
  74           $$(eval $$(call ListPathsSafely, \
  75               $1_$$d_RELATIVE_FILES, $$($1_$$d_LIST_FILE))) \
  76         )
  77         $$(call MakeDir, $$(@D))
  78         ifneq ($$($1_SPECIAL_INCLUDES), )
  79           $$(foreach i, $$($1_SPECIAL_INCLUDES), \
  80             $$(foreach d, $$($1_BASE_DIRS), \
  81               ($(CD) $$d && $(FIND) $$i >> $$($1_$$d_LIST_FILE)) ; ))
  82         endif
  83         ifeq ($$($1_SUBDIR)-$$($1_TYPE)-$$($1_UNZIP_DEBUGINFO), .-zip-false)
  84           # If no subdir is specified, zip can be done directly from BASE_DIRS.
  85           $$(foreach d, $$($1_BASE_DIRS), \
  86             ( $(CD) $$d \
  87             && $(ZIPEXE) -qru $$@ . -i@$$($1_$$d_LIST_FILE) \
  88             || test "$$$$?" = "12" )$$(NEWLINE))
  89         else ifeq ($$($1_SUBDIR)-$$($1_TYPE)-$$($1_UNZIP_DEBUGINFO)-$$(words $$($1_BASE_DIRS)), \
  90             .-tar.gz-false-1)
  91           # If no subdir is specified and only one BASE_DIR, tar.gz can be done
  92           # directly from BASE_DIR.
  93           $(CD) $$($1_BASE_DIRS) \
  94               && ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) \
  95                   -$(TAR_INCLUDE_PARAM) $$($1_$$($1_BASE_DIRS)_LIST_FILE) \
  96                   $(TAR_IGNORE_EXIT_VALUE) ) \
  97               | $(GZIP) > $$@
  98         else ifeq ($$($1_TYPE)-$(TAR_SUPPORTS_TRANSFORM)-$$($1_UNZIP_DEBUGINFO)-$$(words $$($1_BASE_DIRS)), \
  99             tar.gz-true-false-1)
 100           # If only one BASE_DIR, but with a SUBDIR set, tar.gz can use the
 101           # transform option to create bundle directly from the BASE_DIR.
 102           $(CD) $$($1_BASE_DIRS) \
 103               && ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) \
 104                   -$(TAR_INCLUDE_PARAM) $$($1_$$($1_BASE_DIRS)_LIST_FILE) \
 105                   $$(if $$($1_SUBDIR), --transform 's|^|$$($1_SUBDIR)/|S') \
 106                   $(TAR_IGNORE_EXIT_VALUE) ) \
 107               | $(GZIP) > $$@
 108         else
 109           # In all other cases, need to copy all files into a temporary location
 110           # before creation bundle.
 111           $(RM) -r $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR)
 112           $(MKDIR) -p $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR)
 113           $$(foreach d, $$($1_BASE_DIRS), \
 114             ( $(CD) $$d \
 115             && $(TAR) cf - -$(TAR_INCLUDE_PARAM) $$($1_$$d_LIST_FILE) \
 116                 $(TAR_IGNORE_EXIT_VALUE) ) \
 117             | ( $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) && $(TAR) xf - )$$(NEWLINE) )
 118           # Unzip any zipped debuginfo files
 119           ifeq ($$($1_UNZIP_DEBUGINFO), true)
 120             for f in `$(FIND) $(SUPPORT_OUTPUTDIR)/bundles/$1/$$($1_SUBDIR) -name "*.diz"`; do \
 121               $(CD) $$$${f%/*} && $(UNZIP) -q $$$${f} && $(RM) $$$${f}; \
 122             done
 123           endif
 124           ifeq ($$($1_TYPE), tar.gz)
 125             $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && \
 126             ( $(TAR) cf - $(TAR_CREATE_EXTRA_PARAM) \
 127                 $$(if $$($1_SUBDIR), $$($1_SUBDIR), .) $(TAR_IGNORE_EXIT_VALUE) ) \
 128             | $(GZIP) > $$@
 129           else ifeq ($$($1_TYPE), zip)
 130             $(CD) $(SUPPORT_OUTPUTDIR)/bundles/$1 && $(ZIPEXE) -qr $$@ .
 131           endif
 132         endif
 133 
 134   $1 += $(BUNDLES_OUTPUTDIR)/$$($1_BUNDLE_NAME)
 135 
 136 endef
 137 
 138 ################################################################################
 139 
 140 # On Macosx, we bundle up the macosx specific images which already have the
 141 # correct base directories.
 142 ifeq ($(OPENJDK_TARGET_OS)-$(DEBUG_LEVEL), macosx-release)
 143   JDK_IMAGE_DIR := $(JDK_MACOSX_BUNDLE_DIR)
 144   JRE_IMAGE_DIR := $(JRE_MACOSX_BUNDLE_DIR)
 145   JDK_IMAGE_HOMEDIR := $(JDK_MACOSX_CONTENTS_DIR)/Home
 146   JRE_IMAGE_HOMEDIR := $(JRE_MACOSX_CONTENTS_DIR)/Home
 147   JDK_BUNDLE_SUBDIR :=
 148   JRE_BUNDLE_SUBDIR :=
 149 else
 150   JDK_IMAGE_HOMEDIR := $(JDK_IMAGE_DIR)
 151   JRE_IMAGE_HOMEDIR := $(JRE_IMAGE_DIR)
 152   JDK_BUNDLE_SUBDIR := jdk-$(VERSION_NUMBER)
 153   JRE_BUNDLE_SUBDIR := jre-$(VERSION_NUMBER)
 154   JRE_COMPACT1_BUNDLE_SUBDIR := jre-$(VERSION_NUMBER)-compact1
 155   JRE_COMPACT2_BUNDLE_SUBDIR := jre-$(VERSION_NUMBER)-compact2
 156   JRE_COMPACT3_BUNDLE_SUBDIR := jre-$(VERSION_NUMBER)-compact3
 157   ifneq ($(DEBUG_LEVEL), release)
 158     JDK_BUNDLE_SUBDIR := $(JDK_BUNDLE_SUBDIR)/$(DEBUG_LEVEL)
 159     JRE_BUNDLE_SUBDIR := $(JRE_BUNDLE_SUBDIR)/$(DEBUG_LEVEL)
 160   endif
 161 endif
 162 
 163 ################################################################################
 164 
 165 ifneq ($(filter product-bundles, $(MAKECMDGOALS)), )
 166   $(eval $(call FillCacheFind, $(IMAGES_OUTPUTDIR)))
 167 
 168   SYMBOLS_EXCLUDE_PATTERN := %.debuginfo %.diz %.pdb %.map
 169 
 170   ALL_JDK_FILES := $(call CacheFind, $(JDK_IMAGE_DIR))
 171 
 172   # Create special filter rules when dealing with unzipped .dSYM directories on
 173   # macosx
 174   ifeq ($(OPENJDK_TARGET_OS), macosx)
 175     ifeq ($(ZIP_DEBUGINFO_FILES), false)
 176       JDK_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
 177           $(call containing, .dSYM/, $(patsubst $(JDK_IMAGE_DIR)/%, %, $(ALL_JDK_FILES))))
 178     endif
 179   endif
 180 
 181   JDK_BUNDLE_FILES := \
 182       $(filter-out \
 183           $(JDK_SYMBOLS_EXCLUDE_PATTERN) \
 184           $(JDK_EXTRA_EXCLUDES) \
 185           $(SYMBOLS_EXCLUDE_PATTERN) \
 186           $(JDK_IMAGE_HOMEDIR)/demo/% \
 187           , \
 188           $(ALL_JDK_FILES) \
 189       )
 190   JDK_SYMBOLS_BUNDLE_FILES := \
 191       $(filter \
 192           $(JDK_SYMBOLS_EXCLUDE_PATTERN) \
 193           $(SYMBOLS_EXCLUDE_PATTERN) \
 194           , \
 195           $(filter-out \
 196               $(JDK_IMAGE_HOMEDIR)/demo/% \
 197               , \
 198               $(ALL_JDK_FILES) \
 199           ) \
 200       ) \
 201       $(call CacheFind, $(SYMBOLS_IMAGE_DIR))
 202 
 203   ALL_JRE_FILES := $(call CacheFind, $(JRE_IMAGE_DIR))
 204 
 205   # Create special filter rules when dealing with unzipped .dSYM directories on
 206   # macosx
 207   ifeq ($(OPENJDK_TARGET_OS), macosx)
 208     ifeq ($(ZIP_DEBUGINFO_FILES), false)
 209       JRE_SYMBOLS_EXCLUDE_PATTERN := $(addprefix %, \
 210           $(call containing, .dSYM/, $(patsubst $(JRE_IMAGE_DIR)/%, %, $(ALL_JRE_FILES))))
 211     endif
 212   endif
 213 
 214   JRE_BUNDLE_FILES := $(filter-out \
 215       $(JRE_SYMBOLS_EXCLUDE_PATTERN) \
 216       $(SYMBOLS_EXCLUDE_PATTERN), \
 217       $(ALL_JRE_FILES))
 218   JRE_SYMBOLS_BUNDLE_FILES := $(filter \
 219       $(JRE_SYMBOLS_EXCLUDE_PATTERN) \
 220       $(SYMBOLS_EXCLUDE_PATTERN), \
 221       $(ALL_JRE_FILES))
 222 
 223   $(eval $(call SetupBundleFile, BUILD_JDK_BUNDLE, \
 224       BUNDLE_NAME := $(JDK_BUNDLE_NAME), \
 225       FILES := $(JDK_BUNDLE_FILES), \
 226       SPECIAL_INCLUDES := $(JDK_SPECIAL_INCLUDES), \
 227       BASE_DIRS := $(JDK_IMAGE_DIR), \
 228       SUBDIR := $(JDK_BUNDLE_SUBDIR), \
 229   ))
 230 
 231   PRODUCT_TARGETS += $(BUILD_JDK_BUNDLE)
 232 
 233   $(eval $(call SetupBundleFile, BUILD_JRE_BUNDLE, \
 234       BUNDLE_NAME := $(JRE_BUNDLE_NAME), \
 235       FILES := $(JRE_BUNDLE_FILES), \
 236       BASE_DIRS := $(JRE_IMAGE_DIR), \
 237       SUBDIR := $(JRE_BUNDLE_SUBDIR), \
 238   ))
 239 
 240   PRODUCT_TARGETS += $(BUILD_JRE_BUNDLE)
 241 
 242   $(eval $(call SetupBundleFile, BUILD_JDK_SYMBOLS_BUNDLE, \
 243       BUNDLE_NAME := $(JDK_SYMBOLS_BUNDLE_NAME), \
 244       FILES := $(JDK_SYMBOLS_BUNDLE_FILES), \
 245       BASE_DIRS := $(JDK_IMAGE_DIR) $(wildcard $(SYMBOLS_IMAGE_DIR)), \
 246       SUBDIR := $(JDK_BUNDLE_SUBDIR), \
 247       UNZIP_DEBUGINFO := true, \
 248   ))
 249 
 250   PRODUCT_TARGETS += $(BUILD_JDK_SYMBOLS_BUNDLE)
 251 
 252   $(eval $(call SetupBundleFile, BUILD_JRE_SYMBOLS_BUNDLE, \
 253       BUNDLE_NAME := $(JRE_SYMBOLS_BUNDLE_NAME), \
 254       FILES := $(JRE_SYMBOLS_BUNDLE_FILES), \
 255       BASE_DIRS := $(JRE_IMAGE_DIR), \
 256       SUBDIR := $(JRE_BUNDLE_SUBDIR), \
 257       UNZIP_DEBUGINFO := true, \
 258   ))
 259 
 260   PRODUCT_TARGETS += $(BUILD_JRE_SYMBOLS_BUNDLE)
 261 
 262 endif
 263 
 264 ################################################################################
 265 
 266 ifneq ($(filter profiles-bundles, $(MAKECMDGOALS)), )
 267   ifeq ($(OPENJDK_TARGET_OS), macosx)
 268     $(error Creating compact profiles bundles on macosx is unsupported)
 269   endif
 270 
 271   define GenerateCompactProfilesBundles
 272     ALL_JRE_COMPACT$1_FILES := $$(call CacheFind, $$(JRE_COMPACT$1_IMAGE_DIR))
 273 
 274     JRE_COMPACT$1_BUNDLE_FILES := $$(filter-out \
 275         $$(SYMBOLS_EXCLUDE_PATTERN), \
 276         $$(ALL_JRE_COMPACT$1_FILES))
 277 
 278     $$(eval $$(call SetupBundleFile, BUILD_JRE_COMPACT$1_BUNDLE, \
 279         BUNDLE_NAME := $$(JRE_COMPACT$1_BUNDLE_NAME), \
 280         FILES := $$(JRE_COMPACT$1_BUNDLE_FILES), \
 281         BASE_DIRS := $$(JRE_COMPACT$1_IMAGE_DIR), \
 282         SUBDIR := $$(JRE_COMPACT$1_BUNDLE_SUBDIR), \
 283     ))
 284 
 285     PROFILES_TARGETS += $$(BUILD_JRE_COMPACT$1_BUNDLE)
 286   endef
 287 
 288   $(eval $(call GenerateCompactProfilesBundles,1))
 289   $(eval $(call GenerateCompactProfilesBundles,2))
 290   $(eval $(call GenerateCompactProfilesBundles,3))
 291 endif
 292 
 293 ################################################################################
 294 
 295 ifneq ($(filter test-bundles, $(MAKECMDGOALS)), )
 296   TEST_BUNDLE_FILES := $(call CacheFind, $(TEST_IMAGE_DIR))
 297 
 298   $(eval $(call SetupBundleFile, BUILD_TEST_BUNDLE, \
 299       BUNDLE_NAME := $(TEST_BUNDLE_NAME), \
 300       FILES := $(TEST_BUNDLE_FILES), \
 301       BASE_DIRS := $(TEST_IMAGE_DIR), \
 302   ))
 303 
 304   TEST_TARGETS += $(BUILD_TEST_BUNDLE)
 305 endif
 306 
 307 ################################################################################
 308 
 309 ifneq ($(filter docs-bundles, $(MAKECMDGOALS)), )
 310   DOCS_BUNDLE_FILES := $(call CacheFind, $(DOCS_IMAGE_DIR))
 311 
 312   $(eval $(call SetupBundleFile, BUILD_DOCS_BUNDLE, \
 313       BUNDLE_NAME := $(DOCS_BUNDLE_NAME), \
 314       FILES := $(DOCS_BUNDLE_FILES), \
 315       BASE_DIRS := $(DOCS_IMAGE_DIR), \
 316       SUBDIR := docs, \
 317   ))
 318 
 319   DOCS_TARGETS += $(BUILD_DOCS_BUNDLE)
 320 endif
 321 
 322 ################################################################################
 323 
 324 # Hook to include the corresponding custom file, if present.
 325 $(eval $(call IncludeCustomExtension, , Bundles.gmk))
 326 
 327 ################################################################################
 328 
 329 product-bundles: $(PRODUCT_TARGETS)
 330 profiles-bundles: $(PROFILES_TARGETS)
 331 test-bundles: $(TEST_TARGETS)
 332 docs-bundles: $(DOCS_TARGETS)
 333 
 334 .PHONY: all default product-bundles profiles-bundles test-bundles docs-bundles