6961079: Build JDK7 for 64 bit Windows using free Windows 7.1 SDK 64 bit compilers
Reviewed-by: ohair, jcoomes
## Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.## This code is free software; you can redistribute it and/or modify it# under the terms of the GNU General Public License version 2 only, as# published by the Free Software Foundation. Oracle designates this# particular file as subject to the "Classpath" exception as provided# by Oracle in the LICENSE file that accompanied this code.## This code is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License# version 2 for more details (a copy is included in the LICENSE file that# accompanied this code).## You should have received a copy of the GNU General Public License version# 2 along with this work; if not, write to the Free Software Foundation,# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.## Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA# or visit www.oracle.com if you need additional information or have any# questions.#JDK_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jdk-module-imageJRE_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jre-module-image## modules Target to build jdk and jre module image## There is one jar file per module containing classes only.# All module jars are currently placed under jre/lib directory.## Open issues that need further investigation:# 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns# module. META-INF/services file is not installed.# 2. Signed jars# For JDK build, signed jars are copied to the build.# All jars in the module image are unsigned.MODULE_IMAGEBINDIR = bin## Targets.#INITIAL_MODULE_IMAGE_JRE=initial-module-image-jreINITIAL_MODULE_IMAGE_JDK=initial-module-image-jdkifeq ($(PLATFORM), solaris) ifeq ($(ARCH_DATA_MODEL), 64) INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre-sol64 INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk-sol64 endifendifmodules modules-clobber \initial-module-image-jre initial-module-image-jdk \initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \trim-module-image-jre trim-module-image-jdk \process-module-image-jre process-module-image-jdk :: @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."# Order is important here, trim jre after jdk image is createdmodules:: gen-modules \ sanity-module-images post-sanity-module-images \ $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \ trim-module-image-jre trim-module-image-jdk \ process-module-image-jre process-module-image-jdk# Don't use thesemodule-image-jre:: initial-module-image-jre trim-module-image-jre process-module-image-jremodule-image-jdk:: initial-module-image-jdk trim-module-image-jdk process-module-image-jdk## Paths to these files we needJDK_MODULE_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%)JDK_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%64)JDK_MODULE_DOCFILES = $(OTHER_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%)JRE_MODULE_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%)JRE_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%64)JRE_MODULE_DOCFILES = $(OTHER_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%)JRE_MODULE_DOCFILES += $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX))###### RULES# JDK files$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% $(process-doc-file)# Removes LICENSE_VERSION or notifdef LICENSE_VERSION$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) $(process-doc-file)$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) $(process-doc-file)else$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% $(process-doc-file)endif# JRE files $(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% $(process-doc-file)# Add $(TEXT_SUFFIX) suffixifdef TEXT_SUFFIX$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% $(process-doc-file)endif# Removes LICENSE_VERSION or notifdef LICENSE_VERSION$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) $(process-doc-file)$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) $(process-doc-file)else$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% $(process-doc-file)endif####################################################### JRE Image######################################################MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list# Modules in the jre/lib/security directoryPOLICY_MODULES = US_export_policy local_policy# Modules in the modules/ext directoryEXT_MODULES = localedata security-sunec security-sunjce# Build PKCS#11 on all platforms except 64-bit Windows.PKCS11 = security-sunpkcs11ifeq ($(ARCH_DATA_MODEL), 64) ifeq ($(PLATFORM), windows) PKCS11 = endifendifEXT_MODULES += $(PKCS11)# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.ifeq ($(PLATFORM), windows) ifneq ($(ARCH_DATA_MODEL), 64) EXT_MODULES += security-sunmscapi endifendif# Modules for JDK onlyJDK_MODULES = toolsgen-modules: $(CD) modules; $(MAKE) allinitial-module-image-jre-setup: $(RM) -r $(JRE_MODULE_IMAGE_DIR) $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)# 64-bit solaris jre image contains only the 64-bit add-on files.initial-module-image-jre-sol64:: initial-module-image-jre-setup \ $(JRE_MODULE_LICENSES) $(JRE_MODULE_64_LICENSES) @# Use tar instead of cp to preserve the symbolic links for dir in bin lib ; do \ ( $(CD) $(OUTPUTDIR) && \ $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ done @# Remove some files from the jre area for t in $(NOTJRETOOLS) ; do \ $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ done $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl'` $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl'`# Construct an initial jre image (initial jdk jre) no trimming or strippinginitial-module-image-jre:: initial-module-image-jre-setup \ $(JRE_LICENSES) $(JRE_MODULE_DOCFILES) \ $(BUILDMETAINDEX_JARFILE) @# Copy in bin directory $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) @# CTE plugin security change require new empty directory lib/applet $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/applet @# Copy files but not .jar in lib directory $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(EGREP) -v ".jar$$" | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) @# @# copy modules to jre/lib @# for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \ $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \ done $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext for m in $(EXT_MODULES) ; do \ $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \ done for m in $(POLICY_MODULES) ; do \ $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \ done @# Remove jdk modules for m in $(JDK_MODULES) ; do \ $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \ done @# Make sure all directories are read/execute for everyone $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d` @# Remove some files from the jre area for t in $(NOTJRETOOLS) ; do \ $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ done @# Remove orb.idl and ir.idl from jre $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; @# Generate meta-index to make boot and extension class loaders lazier $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ -o meta-index *.jar @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib && $(java-vm-cleanup) $(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && \ $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ -o meta-index *.jar @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup)ifeq ($(PLATFORM), windows) @# Remove certain *.lib files $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ hpi.$(LIB_SUFFIX) awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) ifeq ($(ARCH_DATA_MODEL), 32) @# The Java Kernel JRE image ships with a special VM. It is not included @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. $(CD) $(JRE_MODULE_IMAGE_DIR)/bin && $(RM) -r kernel endifendif # Windowsifneq ($(PLATFORM), windows) $(call copy-man-pages,$(JRE_MODULE_IMAGE_DIR),$(JRE_MAN_PAGES))endif # !windows# Trim out any extra files not for the jre shipment but wanted in the jdk jre.# (Note the jdk WILL want the jre image before this trimming)# Removes server VM on Windows 32bit.# Remove certain shared libraries that should not be in the jre image# but should be in the jdk jre image.trim-module-image-jre::ifeq ($(PLATFORM), windows) ifeq ($(ARCH_DATA_MODEL), 32) $(RM) -r $(JRE_MODULE_IMAGE_DIR)/bin/server endif ifdef NOTJRE_SHARED_LIBS for l in $(NOTJRE_SHARED_LIBS) ; do \ $(RM) $(JRE_MODULE_IMAGE_DIR)/bin/$$l ; \ done ; endifelse # PLATFORM ifdef NOTJRE_SHARED_LIBS for l in $(NOTJRE_SHARED_LIBS) ; do \ $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ done ; endifendif # PLATFORM# Get list of all Elf files in the jreJRE_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jre-elf-files.list$(JRE_MODULE_ELF_LIST): @$(prep-target)ifneq ($(PLATFORM), windows) $(RM) $@ $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ $(FILE) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@endif# Post process the image (strips and mcs on Elf files we are shipping)# (Note the jdk WILL want the jre image before this processing)process-module-image-jre:: $(JRE_MODULE_ELF_LIST)ifneq ($(POST_STRIP_PROCESS), ) for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ $(CHMOD) u+w $${f}; \ $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ $(POST_STRIP_PROCESS) $${f}; \ $(CHMOD) go-w $${f}; \ doneendififneq ($(POST_MCS_PROCESS), ) for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ $(CHMOD) u+w $${f}; \ $(ECHO) $(POST_MCS_PROCESS) $${f}; \ $(POST_MCS_PROCESS) $${f}; \ $(CHMOD) go-w $${f}; \ doneendif $(RM) $(JRE_MODULE_ELF_LIST)####################################################### JDK Image####################################################### Note: cpio ($(CPIO)) sometimes leaves directories without rx access.initial-module-image-jdk-setup: $(RM) -r $(JDK_MODULE_IMAGE_DIR) $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/jre ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(FIND) . -depth -print \ | $(CPIO) -pdum $(JDK_MODULE_IMAGE_DIR)/jre ) $(RM) -rf $(JDK_MODULE_IMAGE_DIR)/jre/man $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d`initial-module-image-jdk64-bindemos: for dir in bin demo ; do \ ( $(CD) $(OUTPUTDIR) && \ $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ done# Solaris 64 bit image is specialinitial-module-image-jdk-sol64:: initial-module-image-jdk-setup \ initial-module-image-jdk64-bindemos \ $(JDK_MODULE_LICENSES) $(JDK_MODULARLIZED_64_LICENSES)# DB files to addifeq ($(OPENJDK),true)initial-module-image-jdk-db:else# Create the list of db *.zip files to bundle with jdkABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db)DB_ZIP_LIST = $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null)initial-module-image-jdk-db: $(DB_ZIP_LIST) $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/db for d in $(DB_ZIP_LIST); do \ ($(CD) $(JDK_MODULE_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ doneendif# Standard jdk imageinitial-module-image-jdk:: initial-module-image-jdk-setup \ initial-module-image-jdk-db \ $(JDK_MODULE_LICENSES) $(JDK_MODULE_DOCFILES) $(MKDIR) $(JDK_MODULE_IMAGE_DIR)/lib @# @# copy jdk modules to jdk/lib @# $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib for m in $(JDK_MODULES) ; do \ $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \ done ifeq ($(PLATFORM), windows) @# @# lib/ @# $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib @# @# bin/ @# @# copy all EXE files and only certain DLL files from BINDIR $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/bin $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin ifeq ($(COMPILER_VERSION), VS2010) $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin endif ifeq ($(ARCH_DATA_MODEL), 32) ifeq ($(COMPILER_VERSION), VS2003) $(CP) $(BINDIR)/msvc*71.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin endif endif else # PLATFORM @# @# bin/ @# ($(CD) $(BINDIR)/.. && $(TAR) cf - \ `$(FIND) bin \( -type f -o -type l \) -print `) | \ ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) endif # PLATFORM @# @# lib/ct.sym @# $(MKDIR) -p $(OUTPUTDIR)/symbols/META-INF/sym $(JAVAC_CMD) -XDprocess.packages -proc:only \ -processor com.sun.tools.javac.sym.CreateSymbols \ -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ -Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \ -C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) @$(java-vm-cleanup) $(CP) $(LIBDIR)/ct.sym $(JDK_MODULE_IMAGE_DIR)/lib/ct.sym @# @# CORBA supported orb.idl and ir.idl should be copied to lib @# $(CP) $(LIBDIR)/orb.idl $(JDK_MODULE_IMAGE_DIR)/lib/orb.idl $(CP) $(LIBDIR)/ir.idl $(JDK_MODULE_IMAGE_DIR)/lib/ir.idl ifeq ($(PLATFORM), linux) @# @# on Linux copy jexec from jre/lib to /lib @# $(CP) $(LIBDIR)/jexec $(JDK_MODULE_IMAGE_DIR)/lib/jexec endif # PLATFORM @# @# demo, include @# $(CP) -r -f $(DEMODIR) $(JDK_MODULE_IMAGE_DIR) $(CP) -r -f $(SAMPLEDIR) $(JDK_MODULE_IMAGE_DIR) $(CP) -r $(INCLUDEDIR) $(JDK_MODULE_IMAGE_DIR) @# @# Swing BeanInfo generation @# $(CD) javax/swing/beaninfo && $(MAKE) JDK_IMAGE_DIR=$(JDK_MODULE_IMAGE_DIR) swing-1.2-beansifneq ($(PLATFORM), windows) $(call copy-man-pages,$(JDK_MODULE_IMAGE_DIR),$(JDK_MAN_PAGES))endif # !windows# Trim out files we don't want to shiptrim-module-image-jdk:: @# Remove tools that should not be part of SDK. for t in $(NOTJDKTOOLS); do \ $(RM) $(JDK_MODULE_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX) \ $(JDK_MODULE_IMAGE_DIR)/bin/*/native_threads/$${t}$(EXE_SUFFIX); \ done# Get list of Elf files in the jdkJDK_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jdk-elf-files.list$(JDK_MODULE_ELF_LIST): @$(prep-target)ifneq ($(PLATFORM), windows) $(RM) $@ $(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ $(FILE) `$(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ file `$(FIND) $(JDK_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@endif# Post process the image (strips and mcs on files we are shipping)process-module-image-jdk:: $(JDK_MODULE_ELF_LIST)ifneq ($(POST_STRIP_PROCESS), ) for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ $(CHMOD) u+w $${f}; \ $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ $(POST_STRIP_PROCESS) $${f}; \ $(CHMOD) go-w $${f}; \ doneendififneq ($(POST_MCS_PROCESS), ) for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ $(CHMOD) u+w $${f}; \ $(ECHO) $(POST_MCS_PROCESS) $${f}; \ $(POST_MCS_PROCESS) $${f}; \ $(CHMOD) go-w $${f}; \ doneendif $(RM) $(JDK_MODULE_ELF_LIST)####################################################### clobber######################################################modules-clobber:: $(RM) -r $(JDK_MODULE_IMAGE_DIR) $(RM) -r $(JRE_MODULE_IMAGE_DIR)## TODO - nop for nowsanity-module-images post-sanity-module-images:modules modules-clobber:: @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." @$(java-vm-cleanup).PHONY: modules module-image-jre module-image-jdk \ initial-module-image-jre initial-module-image-jdk \ initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ initial-module-image-jdk-setup \ initial-module-image-jdk-db \ initial-module-image-jdk64-bindemos \ initial-module-image-jre-setup \ trim-module-image-jre trim-module-image-jdk \ process-module-image-jre process-module-image-jdk \ install-previous-jre install-previous-jdk \ modules-clobber# Force ruleFRC: