| # |
| # Copyright (c) 1995, 2012, 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. |
| # |
| |
| # |
| # Common variables used by all the Java makefiles. This file should |
| # not contain rules. |
| # |
| |
| # The build times report is turned off by setting REPORT_BUILD_TIMES to nothing. |
| # This is necessary for the target clobber/clean which will erase the |
| # directories where the buildtimes are stored. |
| REPORT_BUILD_TIMES=1 |
| # Store the build times in this directory. |
| BUILDTIMESDIR=$(ABS_OUTPUTDIR)/tmp/buildtimes |
| |
| # Record starting time for build of a sub repository. |
| define RecordStartTime |
| $(MKDIR) -p $(BUILDTIMESDIR) |
| $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 |
| $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable |
| endef |
| |
| # Indicate that we started to build a sub repository and record starting time. |
| define MakeStart |
| $(call RecordStartTime,$1) |
| $(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n\n" \ |
| "########################################################################" \ |
| "########################################################################" \ |
| "Entering $1 for target(s) $2" \ |
| "########################################################################" |
| endef |
| |
| # Record ending time and calculate the difference and store it in a |
| # easy to read format. Handles builds that cross midnight. Expects |
| # that a build will never take 24 hours or more. |
| define RecordEndTime |
| $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 |
| $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable |
| $(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ |
| $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ |
| M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ |
| > $(BUILDTIMESDIR)/build_time_diff_$1 |
| endef |
| |
| # Indicate that we are done. |
| # Record ending time and print out the total time it took to build. |
| define MakeFinish |
| $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,$1),) |
| $(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s #####\n%s\n\n" \ |
| "########################################################################" \ |
| "Leaving $1 for target(s) $2" \ |
| "########################################################################" \ |
| $(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ |
| "########################################################################" |
| endef |
| |
| # Find all build_time_* files and print their contents in a list sorted |
| # on the name of the sub repository. |
| define ReportBuildTimes |
| $(PRINTF) -- "-- Build times ----------\nTarget %s\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ |
| $1 \ |
| "`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ |
| "`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ |
| "`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ |
| "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" |
| endef |
| |
| ifdef OPENJDK |
| ifneq ($(OPENJDK),true) |
| x:=$(error "OPENJDK (if defined) can only be set to true") |
| endif |
| endif |
| |
| # Define absolute paths to TOPDIRs |
| ABS_LANGTOOLS_TOPDIR:=$(call OptFullPath,"$(LANGTOOLS_TOPDIR)") |
| ABS_CORBA_TOPDIR:=$(call OptFullPath,"$(CORBA_TOPDIR)") |
| ABS_JAXP_TOPDIR:=$(call OptFullPath,"$(JAXP_TOPDIR)") |
| ABS_JAXWS_TOPDIR:=$(call OptFullPath,"$(JAXWS_TOPDIR)") |
| ABS_JDK_TOPDIR:=$(call OptFullPath,"$(JDK_TOPDIR)") |
| ABS_HOTSPOT_TOPDIR:=$(call OptFullPath,"$(HOTSPOT_TOPDIR)") |
| ABS_NASHORN_TOPDIR:=$(call OptFullPath,"$(NASHORN_TOPDIR)") |
| ABS_INSTALL_TOPDIR:=$(call OptFullPath,"$(INSTALL_TOPDIR)") |
| ABS_SPONSORS_TOPDIR:=$(call OptFullPath,"$(SPONSORS_TOPDIR)") |
| ABS_DEPLOY_TOPDIR:=$(call OptFullPath,"$(DEPLOY_TOPDIR)") |
| |
| # Macro to return true or false if a file exists and is readable |
| define MkExists |
| $(shell if [ -r $1 ]; then $(ECHO) true; else $(ECHO) false; fi) |
| endef |
| |
| HOTSPOT_SRC_AVAILABLE := $(call MkExists,$(HOTSPOT_TOPDIR)/make/Makefile) |
| ifndef BUILD_HOTSPOT |
| ifdef ALT_HOTSPOT_IMPORT_PATH |
| BUILD_HOTSPOT := false |
| else |
| BUILD_HOTSPOT := $(HOTSPOT_SRC_AVAILABLE) |
| endif |
| endif |
| |
| LANGTOOLS_SRC_AVAILABLE := $(call MkExists,$(LANGTOOLS_TOPDIR)/make/Makefile) |
| ifndef BUILD_LANGTOOLS |
| ifdef ALT_LANGTOOLS_DIST |
| BUILD_LANGTOOLS := false |
| else |
| BUILD_LANGTOOLS := $(LANGTOOLS_SRC_AVAILABLE) |
| endif |
| endif |
| |
| CORBA_SRC_AVAILABLE := $(call MkExists,$(CORBA_TOPDIR)/make/Makefile) |
| ifndef BUILD_CORBA |
| ifdef ALT_CORBA_DIST |
| BUILD_CORBA := false |
| else |
| BUILD_CORBA := $(CORBA_SRC_AVAILABLE) |
| endif |
| endif |
| |
| JAXP_SRC_AVAILABLE := $(call MkExists,$(JAXP_TOPDIR)/make/Makefile) |
| ifndef BUILD_JAXP |
| ifdef ALT_JAXP_DIST |
| BUILD_JAXP := false |
| else |
| BUILD_JAXP := $(JAXP_SRC_AVAILABLE) |
| endif |
| endif |
| |
| JAXWS_SRC_AVAILABLE := $(call MkExists,$(JAXWS_TOPDIR)/make/Makefile) |
| ifndef BUILD_JAXWS |
| ifdef ALT_JAXWS_DIST |
| BUILD_JAXWS := false |
| else |
| BUILD_JAXWS := $(JAXWS_SRC_AVAILABLE) |
| endif |
| endif |
| |
| JDK_SRC_AVAILABLE := $(call MkExists,$(JDK_TOPDIR)/make/Makefile) |
| ifndef BUILD_JDK |
| BUILD_JDK := $(JDK_SRC_AVAILABLE) |
| endif |
| ifeq ($(JDK_SRC_AVAILABLE),true) |
| JDK_CLOSED_SRC_AVAILABLE := $(call MkExists,$(JDK_TOPDIR)/src/closed) |
| ifeq ($(JDK_CLOSED_SRC_AVAILABLE),false) |
| OPENJDK = true |
| endif |
| endif |
| |
| NASHORN_SRC_AVAILABLE := $(call MkExists,$(NASHORN_TOPDIR)/make/Makefile) |
| ifndef BUILD_NASHORN |
| ifdef ALT_NASHORN_DIST |
| BUILD_NASHORN := false |
| else |
| BUILD_NASHORN := $(NASHORN_SRC_AVAILABLE) |
| endif |
| endif |
| |
| DEPLOY_SRC_AVAILABLE := $(call MkExists,$(DEPLOY_TOPDIR)/make/Makefile) |
| ifndef BUILD_DEPLOY |
| BUILD_DEPLOY := $(DEPLOY_SRC_AVAILABLE) |
| endif |
| |
| INSTALL_SRC_AVAILABLE := $(call MkExists,$(INSTALL_TOPDIR)/make/Makefile) |
| ifndef BUILD_INSTALL |
| ifdef DEV_ONLY |
| BUILD_INSTALL := false |
| else |
| BUILD_INSTALL := $(INSTALL_SRC_AVAILABLE) |
| endif |
| endif |
| |
| SPONSORS_SRC_AVAILABLE := $(call MkExists,$(SPONSORS_TOPDIR)/make/Makefile) |
| ifndef BUILD_SPONSORS |
| ifdef DEV_ONLY |
| BUILD_SPONSORS := false |
| else |
| BUILD_SPONSORS := $(SPONSORS_SRC_AVAILABLE) |
| endif |
| endif |
| |
| |
| # Do we build the source bundles? |
| BUNDLE_RULES = $(JDK_TOPDIR)/make/closed/bundles.gmk |
| ifeq ($(SKIP_BUNDLES_BUILD), true) |
| BUNDLE_RULES_AVAILABLE := false |
| else |
| BUNDLE_RULES_AVAILABLE := $(call MkExists,$(BUNDLE_RULES)) |
| endif |
| |
| # Current things we do NOT build for OPENJDK |
| ifdef OPENJDK |
| BUILD_DEPLOY = false |
| BUILD_INSTALL = false |
| BUILD_SPONSORS = false |
| BUNDLE_RULES_AVAILABLE := false |
| # These could be over-ridden on the command line or in environment |
| ifndef SKIP_FASTDEBUG_BUILD |
| SKIP_FASTDEBUG_BUILD = true |
| endif |
| ifndef SKIP_DEBUG_BUILD |
| SKIP_DEBUG_BUILD = true |
| endif |
| ifndef SKIP_COMPARE_IMAGES |
| SKIP_COMPARE_IMAGES = true |
| endif |
| else |
| |
| # Various non-OPENJDK reasons to NOT build the deploy repository |
| ifeq ($(ARCH), ia64) |
| BUILD_DEPLOY=false |
| endif |
| ifeq ($(ARCH), sparcv9) |
| BUILD_DEPLOY=false |
| endif |
| ifeq ($(ARCH), amd64) |
| ifeq ($(PLATFORM), solaris) |
| BUILD_DEPLOY=false |
| endif |
| endif |
| |
| endif |
| ifndef SKIP_PRODUCT_BUILD |
| SKIP_PRODUCT_BUILD = false |
| endif |
| |
| # Many reasons why we would want to skip the comparison to previous jdk |
| ifndef SKIP_COMPARE_IMAGES |
| ifeq ($(BUILD_JDK), false) |
| SKIP_COMPARE_IMAGES = true |
| endif |
| ifeq ($(BUILD_DEPLOY), false) |
| SKIP_COMPARE_IMAGES = true |
| endif |
| ifeq ($(BUILD_INSTALL), false) |
| SKIP_COMPARE_IMAGES = true |
| endif |
| ifdef DEV_ONLY |
| SKIP_COMPARE_IMAGES = true |
| endif |
| endif |
| |
| # Select defaults if these are not set to true or false |
| ifndef SKIP_DEBUG_BUILD |
| SKIP_DEBUG_BUILD=true |
| endif |
| ifndef SKIP_FASTDEBUG_BUILD |
| SKIP_FASTDEBUG_BUILD=true |
| endif |
| |
| # Select javadoc setting GENERATE_DOCS |
| ifndef NO_DOCS |
| # Default value (we want javadoc run) |
| GENERATE_DOCS=true |
| # No DOCS build when JDK_UPDATE_VERSION set on non-OPENJDK builds |
| ifndef OPENJDK |
| ifdef JDK_UPDATE_VERSION |
| GENERATE_DOCS=false |
| endif |
| endif |
| # If langtools, corba, jaxp, and jaxws are not being built, |
| # a full jdk javadoc is not possible |
| ifneq ($(BUILD_LANGTOOLS), true) |
| GENERATE_DOCS=false |
| endif |
| ifneq ($(BUILD_CORBA), true) |
| GENERATE_DOCS=false |
| endif |
| ifneq ($(BUILD_JAXP), true) |
| GENERATE_DOCS=false |
| endif |
| ifneq ($(BUILD_JAXWS), true) |
| GENERATE_DOCS=false |
| endif |
| ifeq ($(GENERATE_DOCS),false) |
| NO_DOCS=true |
| endif |
| else |
| GENERATE_DOCS=false |
| endif |
| |
| # Output directory for hotspot build |
| HOTSPOT_DIR = $(ABS_OUTPUTDIR)/hotspot |
| |
| # If we are building components |
| ifndef ALT_LANGTOOLS_DIST |
| LANGTOOLS_OUTPUTDIR = $(ABS_OUTPUTDIR)/langtools |
| ABS_LANGTOOLS_DIST = $(LANGTOOLS_OUTPUTDIR)/dist |
| endif |
| ifndef ALT_CORBA_DIST |
| CORBA_OUTPUTDIR = $(ABS_OUTPUTDIR)/corba |
| ABS_CORBA_DIST = $(CORBA_OUTPUTDIR)/dist |
| endif |
| ifndef ALT_JAXP_DIST |
| JAXP_OUTPUTDIR = $(ABS_OUTPUTDIR)/jaxp |
| ABS_JAXP_DIST = $(JAXP_OUTPUTDIR)/dist |
| endif |
| ifndef ALT_JAXWS_DIST |
| JAXWS_OUTPUTDIR = $(ABS_OUTPUTDIR)/jaxws |
| ABS_JAXWS_DIST = $(JAXWS_OUTPUTDIR)/dist |
| endif |
| ifndef ALT_NASHORN_DIST |
| NASHORN_OUTPUTDIR = $(ABS_OUTPUTDIR)/nashorn |
| ABS_NASHORN_DIST = $(NASHORN_OUTPUTDIR)/dist |
| endif |
| |
| # Common make arguments (supplied to all component builds) |
| COMMON_BUILD_ARGUMENTS = \ |
| JDK_TOPDIR=$(ABS_JDK_TOPDIR) \ |
| JDK_MAKE_SHARED_DIR=$(ABS_JDK_TOPDIR)/make/common/shared \ |
| EXTERNALSANITYCONTROL=true \ |
| SOURCE_LANGUAGE_VERSION=$(SOURCE_LANGUAGE_VERSION) \ |
| TARGET_CLASS_VERSION=$(TARGET_CLASS_VERSION) \ |
| MILESTONE=$(MILESTONE) \ |
| BUILD_NUMBER=$(BUILD_NUMBER) \ |
| JDK_BUILD_NUMBER=$(JDK_BUILD_NUMBER) \ |
| FULL_VERSION=$(FULL_VERSION) \ |
| PREVIOUS_JDK_VERSION=$(PREVIOUS_JDK_VERSION) \ |
| JDK_VERSION=$(JDK_VERSION) \ |
| JDK_MKTG_VERSION=$(JDK_MKTG_VERSION) \ |
| JDK_MAJOR_VERSION=$(JDK_MAJOR_VERSION) \ |
| JDK_MINOR_VERSION=$(JDK_MINOR_VERSION) \ |
| JDK_MICRO_VERSION=$(JDK_MICRO_VERSION) \ |
| PREVIOUS_MAJOR_VERSION=$(PREVIOUS_MAJOR_VERSION) \ |
| PREVIOUS_MINOR_VERSION=$(PREVIOUS_MINOR_VERSION) \ |
| PREVIOUS_MICRO_VERSION=$(PREVIOUS_MICRO_VERSION) |
| |
| ifdef OPENJDK |
| COMMON_BUILD_ARGUMENTS += OPENJDK=$(OPENJDK) |
| endif |
| |
| ifdef ARCH_DATA_MODEL |
| COMMON_BUILD_ARGUMENTS += ARCH_DATA_MODEL=$(ARCH_DATA_MODEL) |
| endif |
| |
| ifeq ($(DEBUG_NAME), debug) |
| COMMON_BUILD_ARGUMENTS += VARIANT=DBG DEBUG_CLASSFILES=true |
| endif |
| |
| ifeq ($(DEBUG_NAME), fastdebug) |
| COMMON_BUILD_ARGUMENTS += VARIANT=DBG FASTDEBUG=true DEBUG_CLASSFILES=true |
| endif |
| |
| ifdef COOKED_JDK_UPDATE_VERSION |
| COMMON_BUILD_ARGUMENTS += COOKED_JDK_UPDATE_VERSION=$(COOKED_JDK_UPDATE_VERSION) |
| endif |
| |
| ifdef COOKED_BUILD_NUMBER |
| COMMON_BUILD_ARGUMENTS += COOKED_BUILD_NUMBER=$(COOKED_BUILD_NUMBER) |
| endif |
| |
| ifdef ANT_HOME |
| COMMON_BUILD_ARGUMENTS += ANT_HOME="$(ANT_HOME)" |
| endif |
| |
| # When all repos support FULL_DEBUG_SYMBOLS and ZIP_DEBUGINFO_FILES, |
| # then these can be set here: |
| #ifdef FULL_DEBUG_SYMBOLS |
| # COMMON_BUILD_ARGUMENTS += FULL_DEBUG_SYMBOLS=$(FULL_DEBUG_SYMBOLS) |
| #endif |
| # |
| #ifdef ZIP_DEBUGINFO_FILES |
| # COMMON_BUILD_ARGUMENTS += ZIP_DEBUGINFO_FILES="$(ZIP_DEBUGINFO_FILES)" |
| #endif |