make/MainSupport.gmk
changeset 29662 78c47f0002c3
parent 29156 bd932374081c
child 29790 79641c886929
equal deleted inserted replaced
29565:34ead0aa3d9d 29662:78c47f0002c3
       
     1 #
       
     2 # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
       
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4 #
       
     5 # This code is free software; you can redistribute it and/or modify it
       
     6 # under the terms of the GNU General Public License version 2 only, as
       
     7 # published by the Free Software Foundation.  Oracle designates this
       
     8 # particular file as subject to the "Classpath" exception as provided
       
     9 # by Oracle in the LICENSE file that accompanied this code.
       
    10 #
       
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14 # version 2 for more details (a copy is included in the LICENSE file that
       
    15 # accompanied this code).
       
    16 #
       
    17 # You should have received a copy of the GNU General Public License version
       
    18 # 2 along with this work; if not, write to the Free Software Foundation,
       
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20 #
       
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22 # or visit www.oracle.com if you need additional information or have any
       
    23 # questions.
       
    24 #
       
    25 
       
    26 ################################################################################
       
    27 # This file contains helper functions for Main.gmk.
       
    28 ################################################################################
       
    29 
       
    30 ifndef _MAINSUPPORT_GMK
       
    31 _MAINSUPPORT_GMK := 1
       
    32 
       
    33 # Run the tests specified by $1.
       
    34 define RunTests
       
    35 	($(CD) $(SRC_ROOT)/test && $(MAKE) $(MAKE_ARGS) -j1 -k MAKEFLAGS= \
       
    36 	    JT_HOME=$(JT_HOME) PRODUCT_HOME=$(JDK_IMAGE_DIR) \
       
    37 	    TEST_IMAGE_DIR=$(TEST_IMAGE_DIR) \
       
    38 	    ALT_OUTPUTDIR=$(OUTPUT_ROOT) CONCURRENCY=$(JOBS) $1) || true
       
    39 endef
       
    40 
       
    41 # Cleans the dir given as $1
       
    42 define CleanDir
       
    43 	@$(PRINTF) "Cleaning $(strip $1) build artifacts ..."
       
    44 	@($(CD) $(OUTPUT_ROOT) && $(RM) -r $1)
       
    45 	@$(PRINTF) " done\n"
       
    46 endef
       
    47 
       
    48 define CleanTest
       
    49 	@$(PRINTF) "Cleaning test $(strip $1) ..."
       
    50 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/test/$(strip $(subst -,/,$1))
       
    51 	@$(PRINTF) " done\n"
       
    52 endef
       
    53 
       
    54 define Clean-gensrc
       
    55 	@$(PRINTF) "Cleaning gensrc $(if $1,for $(strip $1) )..."
       
    56 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/gensrc/$(strip $1)
       
    57 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/gensrc_no_docs/$(strip $1)
       
    58 	@$(PRINTF) " done\n"
       
    59 endef
       
    60 
       
    61 define Clean-java
       
    62 	@$(PRINTF) "Cleaning java $(if $1,for $(strip $1) )..."
       
    63 	@$(RM) -r $(JDK_OUTPUTDIR)/modules/$(strip $1)
       
    64 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/misc/$(strip $1)
       
    65 	@$(PRINTF) " done\n"
       
    66 	@$(PRINTF) "Cleaning headers $(if $1,for $(strip $1)) ..."
       
    67 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/headers/$(strip $1)
       
    68 	@$(PRINTF) " done\n"
       
    69 endef
       
    70 
       
    71 define Clean-native
       
    72 	@$(PRINTF) "Cleaning native $(if $1,for $(strip $1) )..."
       
    73 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/native/$(strip $1)
       
    74 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/modules_libs/$(strip $1)
       
    75 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/modules_libs-stripped/$(strip $1)
       
    76 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/modules_cmds/$(strip $1)
       
    77 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/modules_cmds-stripped/$(strip $1)
       
    78 	@$(PRINTF) " done\n"
       
    79 endef
       
    80 
       
    81 define Clean-include
       
    82 	@$(PRINTF) "Cleaning include $(if $1,for $(strip $1) )..."
       
    83 	@$(RM) -r $(SUPPORT_OUTPUTDIR)/modules_include/$(strip $1)
       
    84 	@$(PRINTF) " done\n"
       
    85 endef
       
    86 
       
    87 define CleanModule
       
    88   $(call Clean-gensrc, $1)
       
    89   $(call Clean-java, $1)
       
    90   $(call Clean-native, $1)
       
    91   $(call Clean-include, $1)
       
    92 endef
       
    93 
       
    94 
       
    95 ################################################################################
       
    96 
       
    97 MAKE_TOPDIR_LIST := $(JDK_TOPDIR) $(CORBA_TOPDIR) $(LANGTOOLS_TOPDIR)
       
    98 MAKE_MAKEDIR_LIST := make
       
    99 
       
   100 # Helper macro for DeclareRecipesForPhase
       
   101 # Declare a recipe for calling the module and phase specific makefile.
       
   102 # If there are multiple makefiles to call, create a rule for each topdir
       
   103 # that contains a makefile with the target $module-$suffix-$repodir,
       
   104 # (i.e: java.base-gensrc-jdk)
       
   105 # Normally there is only one makefile, and the target will just be
       
   106 # $module-$suffix
       
   107 # Param 1: Name of list to add targets to
       
   108 # Param 2: Module name
       
   109 # Param 3: Topdir
       
   110 define DeclareRecipeForModuleMakefile
       
   111   ifeq ($$($1_MULTIPLE_MAKEFILES), true)
       
   112     $2-$$($1_TARGET_SUFFIX): $2-$$($1_TARGET_SUFFIX)-$$(notdir $3)
       
   113     $1 += $2-$$($1_TARGET_SUFFIX)-$$(notdir $3)
       
   114 
       
   115     $2-$$($1_TARGET_SUFFIX)-$$(notdir $3):
       
   116   else
       
   117     $2-$$($1_TARGET_SUFFIX):
       
   118   endif
       
   119 	$(ECHO) $(LOG_INFO) "Building $$@"
       
   120         ifeq ($$($1_USE_WRAPPER), true)
       
   121 	  +($(CD) $(SRC_ROOT)/make && $(MAKE) $(MAKE_ARGS) \
       
   122 	      -f ModuleWrapper.gmk \
       
   123 	          $$(addprefix -I, $$(wildcard $$(addprefix $3/, $(MAKE_MAKEDIR_LIST)) \
       
   124 	          $$(addsuffix /$$($1_MAKE_SUBDIR), $$(addprefix $3/, $(MAKE_MAKEDIR_LIST))))) \
       
   125 	          MODULE=$2 MAKEFILE_PREFIX=$$($1_FILE_PREFIX))
       
   126         else
       
   127 	  +($(CD) $$(dir $$(firstword $$(wildcard $$(patsubst %, \
       
   128 	          $3/%/$$($1_MAKE_SUBDIR)/$$($1_FILE_PREFIX)-$2.gmk, $(MAKE_MAKEDIR_LIST))))) \
       
   129 	    && $(MAKE) $(MAKE_ARGS) \
       
   130 	          -f $$($1_FILE_PREFIX)-$2.gmk \
       
   131 	          $$(addprefix -I, $$(wildcard $$(addprefix $3/, $(MAKE_MAKEDIR_LIST)) \
       
   132 	          $$(addsuffix /$$($1_MAKE_SUBDIR), $$(addprefix $3/, $(MAKE_MAKEDIR_LIST))))) \
       
   133 	          MODULE=$2)
       
   134         endif
       
   135 
       
   136 endef
       
   137 
       
   138 # Helper macro for DeclareRecipesForPhase
       
   139 # Param 1: Name of list to add targets to
       
   140 # Param 2: Module name
       
   141 define DeclareRecipesForPhaseAndModule
       
   142   $1_$2_TOPDIRS := $$(strip $$(sort $$(foreach d, $(MAKE_TOPDIR_LIST), \
       
   143       $$(patsubst $$d/%, $$d, $$(filter $$d/%, \
       
   144           $$(wildcard $$(patsubst %, %/$$($1_MAKE_SUBDIR)/$$($1_FILE_PREFIX)-$2.gmk, \
       
   145           $$(foreach s, $(MAKE_MAKEDIR_LIST), \
       
   146               $$(addsuffix /$$s, $(MAKE_TOPDIR_LIST))))))))))
       
   147 
       
   148   # Only declare recipes if there are makefiles to call
       
   149   ifneq ($$($1_$2_TOPDIRS), )
       
   150     ifeq ($(NO_RECIPES),)
       
   151       $$(foreach d, $$($1_$2_TOPDIRS), \
       
   152           $$(eval $$(call DeclareRecipeForModuleMakefile,$1,$2,$$d)))
       
   153     endif
       
   154     $1 += $2-$$($1_TARGET_SUFFIX)
       
   155     $1_MODULES += $2
       
   156   endif
       
   157 endef
       
   158 
       
   159 # Declare recipes for a specific module and build phase if there are makefiles
       
   160 # present for the specific combination.
       
   161 # Param 1: Name of list to add targets to
       
   162 # Named params:
       
   163 # TARGET_SUFFIX : Suffix of target to create for recipe
       
   164 # MAKE_SUBDIR : Subdir for this build phase
       
   165 # FILE_PREFIX : File prefix for this build phase
       
   166 # USE_WRAPPER : Set to true to use ModuleWrapper.gmk
       
   167 # CHECK_MODULES : List of modules to try
       
   168 # MULTIPLE_MAKEFILES : Set to true to handle makefils for the same module in
       
   169 #                      phase in multiple repos
       
   170 # Exported variables:
       
   171 # $1_MODULES : All modules that had rules generated
       
   172 # $1_TARGETS : All targets generated
       
   173 define DeclareRecipesForPhase
       
   174   $(foreach i,2 3 4 5 6 7, $(if $($i),$(strip $1)_$(strip $($i)))$(NEWLINE))
       
   175   $(if $(8),$(error Internal makefile error: Too many arguments to \
       
   176       DeclareRecipesForPhase, please update MakeHelper.gmk))
       
   177 
       
   178   $$(foreach m, $$($(strip $1)_CHECK_MODULES), \
       
   179       $$(eval $$(call DeclareRecipesForPhaseAndModule,$(strip $1),$$m)))
       
   180 
       
   181   $(strip $1)_TARGETS := $$($(strip $1))
       
   182 endef
       
   183 
       
   184 ################################################################################
       
   185 
       
   186 endif # _MAINSUPPORT_GMK