8055095: Improve "do nothing" incremental build performance after modularized source code integration
Reviewed-by: tbell
This commit is contained in:
parent
6836c834fb
commit
74d5ddea1a
@ -28,6 +28,7 @@ default: all
|
||||
|
||||
include $(SPEC)
|
||||
include MakeBase.gmk
|
||||
include Modules.gmk
|
||||
include JavaCompilation.gmk
|
||||
include SetupJavaCompilers.gmk
|
||||
|
||||
|
@ -37,6 +37,7 @@ include $(SRC_ROOT)/make/MakeHelpers.gmk
|
||||
|
||||
# Load the vital tools for all the makefiles.
|
||||
include $(SRC_ROOT)/make/common/MakeBase.gmk
|
||||
include $(SRC_ROOT)/make/common/Modules.gmk
|
||||
|
||||
# Load common profile names definitions
|
||||
include $(JDK_TOPDIR)/make/ProfileNames.gmk
|
||||
|
@ -303,4 +303,32 @@ define CleanComponent
|
||||
@$(PRINTF) " done\n"
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
|
||||
MAKE_DIR_LIST := $(JDK_TOPDIR)/make
|
||||
|
||||
# Find all modules that has a makefile for a certain build phase
|
||||
# Param 1: Make subdir to look in
|
||||
# Param 2: File prefix to look for
|
||||
FindModulesWithMakefileFor = $(sort $(foreach d, $(MAKE_DIR_LIST), \
|
||||
$(patsubst $d/$(strip $1)/$(strip $2)-%.gmk,%, \
|
||||
$(wildcard $d/$(strip $1)/$(strip $2)-*.gmk))))
|
||||
|
||||
# Declare a recipe for calling such a makefile
|
||||
# Param 1: Module name
|
||||
# Param 2: Suffix for rule
|
||||
# Param 3: Make subdir
|
||||
# Param 4: Makefile prefix
|
||||
define DeclareRecipeForModuleMakefile
|
||||
$$(strip $1)-$$(strip $2):
|
||||
+($(CD) $$(dir $$(firstword $$(wildcard $$(addsuffix /$$(strip $3)/$$(strip $4)-$$(strip $1).gmk, \
|
||||
$(MAKE_DIR_LIST))))) \
|
||||
&& $(MAKE) $(MAKE_ARGS) \
|
||||
-f $$(strip $4)-$$(strip $1).gmk \
|
||||
$$(addprefix -I, $$(wildcard $(MAKE_DIR_LIST) \
|
||||
$$(addsuffix /$$(strip $3), $(MAKE_DIR_LIST)))))
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
|
||||
endif # _MAKEHELPERS_GMK
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
################################################################
|
||||
#
|
||||
# Check that GNU make and cygwin are recent enough.
|
||||
# Setup common utility functions.
|
||||
#
|
||||
################################################################
|
||||
@ -532,71 +531,6 @@ define SetupCopyFiles
|
||||
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
# Module list macros
|
||||
|
||||
ALL_TOP_SRC_DIRS := \
|
||||
$(JDK_TOPDIR)/src \
|
||||
$(LANGTOOLS_TOPDIR)/src \
|
||||
$(CORBA_TOPDIR)/src \
|
||||
$(JAXP_TOPDIR)/src \
|
||||
$(JAXWS_TOPDIR)/src \
|
||||
$(NASHORN_TOPDIR)/src \
|
||||
#
|
||||
|
||||
# There are snmp classes in the open but they are not included in OpenJDK
|
||||
JAVA_MODULES_FILTER := jdk.snmp
|
||||
|
||||
# Find all modules with java sources by looking in the source dirs
|
||||
define FindJavaModules
|
||||
$(filter-out $(JAVA_MODULES_FILTER), $(sort $(notdir \
|
||||
$(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir \
|
||||
$(wildcard $(patsubst %,%/*/share/classes/*, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %,%/*/$(OPENJDK_TARGET_OS_API_DIR)/classes/*, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %,%/*/$(OPENJDK_TARGET_OS)/classes/*, $(ALL_TOP_SRC_DIRS))))))))))))
|
||||
endef
|
||||
|
||||
MODULES_LIST_FILE := $(SRC_ROOT)/make/common/modules.list
|
||||
|
||||
# Param 1: Module to find deps for
|
||||
define FindDepsForModule
|
||||
$(if $(filter-out java.base, $1), java.base $(filter-out jdk.scripting.nashorn, $(filter-out java.base, $(wordlist 2, 100, $(shell $(GREP) '^$(strip $1):' $(MODULES_LIST_FILE))))))
|
||||
endef
|
||||
|
||||
# Find all modules with source for the target platform.
|
||||
define FindAllModules
|
||||
$(sort $(filter-out closed demo sample, $(notdir $(patsubst %/,%, $(dir \
|
||||
$(wildcard $(patsubst %, %/*/share, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %, %/*/$(OPENJDK_TARGET_OS), $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %, %/*/$(OPENJDK_TARGET_OS_API_DIR), $(ALL_TOP_SRC_DIRS))))))))
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
|
||||
MAKE_DIR_LIST := $(JDK_TOPDIR)/make
|
||||
|
||||
# Find all modules that has a makefile for a certain build phase
|
||||
# Param 1: Make subdir to look in
|
||||
# Param 2: File prefix to look for
|
||||
FindModulesWithMakefileFor = $(sort $(foreach d, $(MAKE_DIR_LIST), \
|
||||
$(patsubst $d/$(strip $1)/$(strip $2)-%.gmk,%, \
|
||||
$(wildcard $d/$(strip $1)/$(strip $2)-*.gmk))))
|
||||
|
||||
# Declare a recipe for calling such a makefile
|
||||
# Param 1: Module name
|
||||
# Param 2: Suffix for rule
|
||||
# Param 3: Make subdir
|
||||
# Param 4: Makefile prefix
|
||||
define DeclareRecipeForModuleMakefile
|
||||
$$(strip $1)-$$(strip $2):
|
||||
+($(CD) $$(dir $$(firstword $$(wildcard $$(addsuffix /$$(strip $3)/$$(strip $4)-$$(strip $1).gmk, \
|
||||
$(MAKE_DIR_LIST))))) \
|
||||
&& $(MAKE) $(MAKE_ARGS) \
|
||||
-f $$(strip $4)-$$(strip $1).gmk \
|
||||
$$(addprefix -I, $$(wildcard $(MAKE_DIR_LIST) \
|
||||
$$(addsuffix /$$(strip $3), $(MAKE_DIR_LIST)))))
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
|
79
make/common/Modules.gmk
Normal file
79
make/common/Modules.gmk
Normal file
@ -0,0 +1,79 @@
|
||||
#
|
||||
# Copyright (c) 2014, 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.
|
||||
#
|
||||
|
||||
ifndef _MODULES_GMK
|
||||
_MODULES_GMK := 1
|
||||
|
||||
################################################################################
|
||||
# Module list macros
|
||||
|
||||
ALL_TOP_SRC_DIRS := \
|
||||
$(JDK_TOPDIR)/src \
|
||||
$(LANGTOOLS_TOPDIR)/src \
|
||||
$(CORBA_TOPDIR)/src \
|
||||
$(JAXP_TOPDIR)/src \
|
||||
$(JAXWS_TOPDIR)/src \
|
||||
$(NASHORN_TOPDIR)/src \
|
||||
#
|
||||
|
||||
# There are snmp classes in the open but they are not included in OpenJDK
|
||||
JAVA_MODULES_FILTER := jdk.snmp
|
||||
|
||||
# Find all modules with java sources by looking in the source dirs
|
||||
define FindJavaModules
|
||||
$(filter-out $(JAVA_MODULES_FILTER), $(sort $(notdir \
|
||||
$(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir \
|
||||
$(wildcard $(patsubst %,%/*/share/classes/*, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %,%/*/$(OPENJDK_TARGET_OS_API_DIR)/classes/*, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %,%/*/$(OPENJDK_TARGET_OS)/classes/*, $(ALL_TOP_SRC_DIRS))))))))))))
|
||||
endef
|
||||
|
||||
MODULES_LIST_FILE := $(SRC_ROOT)/make/common/modules.list
|
||||
MODULE_DEPS_MAKEFILE := $(OUTPUT_ROOT)/module-deps.gmk
|
||||
|
||||
$(MODULE_DEPS_MAKEFILE): $(MODULES_LIST_FILE)
|
||||
$(CAT) $^ | $(SED) -e 's/^\([^:]*\):/DEPS_\1 :=/g' > $@
|
||||
|
||||
-include $(MODULE_DEPS_MAKEFILE)
|
||||
|
||||
# Param 1: Module to find deps for
|
||||
define FindDepsForModule
|
||||
$(DEPS_$(strip $1))
|
||||
endef
|
||||
|
||||
# Find all modules with source for the target platform.
|
||||
define FindAllModules
|
||||
$(sort $(filter-out closed demo sample, $(notdir $(patsubst %/,%, $(dir \
|
||||
$(wildcard $(patsubst %, %/*/share, $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %, %/*/$(OPENJDK_TARGET_OS), $(ALL_TOP_SRC_DIRS)) \
|
||||
$(patsubst %, %/*/$(OPENJDK_TARGET_OS_API_DIR), $(ALL_TOP_SRC_DIRS))))))))
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
|
||||
# Hook to include the corresponding custom file, if present.
|
||||
$(eval $(call IncludeCustomExtension, , common/Modules.gmk))
|
||||
|
||||
endif # _MODULES_GMK
|
Loading…
Reference in New Issue
Block a user