diff --git a/make/CompileJavaModules.gmk b/make/CompileJavaModules.gmk index 8a796ecd342..2f30f83c32c 100644 --- a/make/CompileJavaModules.gmk +++ b/make/CompileJavaModules.gmk @@ -28,6 +28,7 @@ default: all include $(SPEC) include MakeBase.gmk +include Modules.gmk include JavaCompilation.gmk include SetupJavaCompilers.gmk diff --git a/make/Main.gmk b/make/Main.gmk index 509ebf2d329..aee0061a2b3 100644 --- a/make/Main.gmk +++ b/make/Main.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 diff --git a/make/MakeHelpers.gmk b/make/MakeHelpers.gmk index 19a4634d908..b8581e3f6eb 100644 --- a/make/MakeHelpers.gmk +++ b/make/MakeHelpers.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 diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index 8c987609efa..cecb04ce6bc 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.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. diff --git a/make/common/Modules.gmk b/make/common/Modules.gmk new file mode 100644 index 00000000000..87b03f8b0ec --- /dev/null +++ b/make/common/Modules.gmk @@ -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