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 $(SPEC)
|
||||||
include MakeBase.gmk
|
include MakeBase.gmk
|
||||||
|
include Modules.gmk
|
||||||
include JavaCompilation.gmk
|
include JavaCompilation.gmk
|
||||||
include SetupJavaCompilers.gmk
|
include SetupJavaCompilers.gmk
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ include $(SRC_ROOT)/make/MakeHelpers.gmk
|
|||||||
|
|
||||||
# Load the vital tools for all the makefiles.
|
# Load the vital tools for all the makefiles.
|
||||||
include $(SRC_ROOT)/make/common/MakeBase.gmk
|
include $(SRC_ROOT)/make/common/MakeBase.gmk
|
||||||
|
include $(SRC_ROOT)/make/common/Modules.gmk
|
||||||
|
|
||||||
# Load common profile names definitions
|
# Load common profile names definitions
|
||||||
include $(JDK_TOPDIR)/make/ProfileNames.gmk
|
include $(JDK_TOPDIR)/make/ProfileNames.gmk
|
||||||
|
@ -303,4 +303,32 @@ define CleanComponent
|
|||||||
@$(PRINTF) " done\n"
|
@$(PRINTF) " done\n"
|
||||||
endef
|
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
|
endif # _MAKEHELPERS_GMK
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
#
|
#
|
||||||
# Check that GNU make and cygwin are recent enough.
|
|
||||||
# Setup common utility functions.
|
# Setup common utility functions.
|
||||||
#
|
#
|
||||||
################################################################
|
################################################################
|
||||||
@ -532,71 +531,6 @@ define SetupCopyFiles
|
|||||||
|
|
||||||
endef
|
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.
|
# 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…
x
Reference in New Issue
Block a user