VirtualBox

Changeset 1667 in kBuild


Ignore:
Timestamp:
Jun 30, 2008 11:08:25 PM (17 years ago)
Author:
bird
Message:

Relax the pass ordering if there are no subdirs and makefiles to traverse.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/footer.kmk

    r1654 r1667  
    31663166#
    31673167
     3168#
     3169# First, check whether we need to order the passes explicitly or not.
     3170# This depends on whether we're a leaf makefile or not. A leaf will
     3171# know all its dependencies, while a recursive one relies on the
     3172# order sub-directories and other makefiles are executed it.
     3173#
     3174
     3175## Setup a pass and check for optimizations.
     3176# @param        $(PASS)         Uppercase pass name.
     3177define def_pass_setup_and_optimize
     3178
     3179# The setup. ## @todo This is looks a bit weird...
     3180ifndef SUBDIRS_$(PASS)
     3181 SUBDIRS_$(PASS)          := $(SUBDIRS)          $(SUBDIRS.$(KBUILD_TARGET))          $(SUBDIRS.$(KBUILD_TARGET.$(KBUILD_TARGET_ARCH)))
     3182endif
     3183ifndef SUBDIRS_AFTER_$(PASS)
     3184 SUBDIRS_AFTER_$(PASS)    := $(SUBDIRS_AFTER)    $(SUBDIRS_AFTER.$(KBUILD_TARGET))    $(SUBDIRS_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))
     3185endif
     3186ifndef MAKEFILES_BEFORE_$(PASS)
     3187 MAKEFILES_BEFORE_$(PASS) := $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(KBUILD_TARGET)) $(MAKEFILES_BEFORE.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))
     3188endif
     3189ifndef MAKEFILES_AFTER_$(PASS)
     3190 MAKEFILES_AFTER_$(PASS)  := $(MAKEFILES_AFTER)  $(MAKEFILES_AFTER.$(KBUILD_TARGET))  $(MAKEFILES_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))
     3191endif
     3192
     3193# The check.
     3194ifeq ($(_KBUILD_STRICT_PASS_ORDER),nonstrict)
     3195 ifneq ($(strip \
     3196          $(SUBDIRS_$(PASS))          $(SUBDIRS_$(PASS).$(KBUILD_TARGET))          $(SUBDIRS_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))           \
     3197          $(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))  \
     3198          $(SUBDIRS_AFTER_$(PASS))    $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET))    $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))     \
     3199          $(MAKEFILES_AFTER_$(PASS))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))   \
     3200         ),)
     3201  _KBUILD_STRICT_PASS_ORDER := strict
     3202 endif
     3203endif # _KBUILD_STRICT_PASS_ORDER == nonstrict
     3204endef # def_pass_setup_and_optimize
     3205
     3206## PASS: Setup & optimization.
     3207# Check if we can apply the non-strict pass order optimzation (no SUBDIRS_* and MAKEFILES_*),
     3208# and set up the pass specific variables as we go along.
     3209_KBUILD_STRICT_PASS_ORDER := nonstrict
     3210$(foreach PASS, $(PASSES), $(evalval def_pass_setup_and_optimize))
     3211#$ (error _KBUILD_STRICT_PASS_ORDER=$(_KBUILD_STRICT_PASS_ORDER))
     3212
     3213
    31683214## Subdir
    31693215# @param        $(pass)         Lowercase pass name.
     
    31793225# @param        $(pass)         Lowercase pass name.
    31803226# @param        $(PASS)         Uppercase pass name.
    3181 # @param        $(makefile) Makefile.
     3227# @param        $(makefile)     Makefile.
    31823228# @param        $(tag)          tag to attach to the rule name.
    31833229define def_pass_makefile
     
    31863232endef
    31873233
    3188 ## Execute a pass.
     3234## Execute a pass, strict order.
    31893235# @param        $(pass)         Lowercase pass name.
    31903236# @param        $(PASS)         Uppercase pass name.
    3191 define def_pass_old
    3192 $(eval SUBDIRS_$(PASS)          ?= $(SUBDIRS)          $(SUBDIRS.$(KBUILD_TARGET))           $(SUBDIRS.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))          )
    3193 $(eval SUBDIRS_AFTER_$(PASS)    ?= $(SUBDIRS_AFTER)    $(SUBDIRS_AFTER.$(KBUILD_TARGET))     $(SUBDIRS_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))    )
    3194 $(eval MAKEFILES_BEFORE_$(PASS) ?= $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(KBUILD_TARGET))  $(MAKEFILES_BEFORE.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) )
    3195 $(eval MAKEFILES_AFTER_$(PASS)  ?= $(MAKEFILES_AFTER)  $(MAKEFILES_AFTER.$(KBUILD_TARGET))   $(MAKEFILES_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))  )
    3196 
     3237define def_pass_strict
    31973238$(eval tag:=_before)
    31983239$(eval dep:=)
    3199 $(foreach subdir,$(SUBDIRS_$(PASS))            $(SUBDIRS_$(PASS).$(KBUILD_TARGET))           $(SUBDIRS_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))         ,$(eval $(def_pass_subdir)))
    3200 $(foreach makefile,$(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET))  $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),$(eval $(def_pass_makefile)))
     3240$(foreach subdir,  $(SUBDIRS_$(PASS))          $(SUBDIRS_$(PASS).$(KBUILD_TARGET))          $(SUBDIRS_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))         ,$(eval $(def_pass_subdir)))
     3241$(foreach makefile,$(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),$(eval $(def_pass_makefile)))
    32013242
    32023243$(eval tag:=_after)
    32033244$(eval dep:=pass_$(pass)_doit)
    3204 $(foreach subdir,$(SUBDIRS_AFTER_$(PASS))      $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET))     $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))   ,$(eval $(def_pass_subdir)))
    3205 $(foreach makefile,$(MAKEFILES_AFTER_$(PASS))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET))   $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) ,$(eval $(def_pass_makefile)))
    3206 
    3207 .NOTPARALLEL: pass_$(pass)_before pass_$(pass)_after
    3208 .PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_doit pass_$(pass)_after
    3209 pass_$(pass)_doit:      $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$(var))
     3245$(foreach subdir,  $(SUBDIRS_AFTER_$(PASS))    $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET))    $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))   ,$(eval $(def_pass_subdir)))
     3246$(foreach makefile,$(MAKEFILES_AFTER_$(PASS))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) ,$(eval $(def_pass_makefile)))
     3247
     3248ifdef KBUILD_SAFE_PARALLEL
     3249.NOTPARALLEL: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this
     3250.PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this pass_$(pass)_doit
     3251pass_$(pass)_doit:      $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$(var))
    32103252pass_$(pass)_this:      pass_$(pass)_before
    32113253        + $$(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)_doit
    32123254pass_$(pass)_after::    pass_$(pass)_this
    32133255pass_$(pass):           pass_$(pass)_after
    3214 
    3215 endef
    3216 
    3217 define def_pass
    3218 $(eval SUBDIRS_$(PASS)          ?= $(SUBDIRS)          $(SUBDIRS.$(KBUILD_TARGET))          $(SUBDIRS.$(KBUILD_TARGET.$(KBUILD_TARGET_ARCH)))          )
    3219 $(eval SUBDIRS_AFTER_$(PASS)    ?= $(SUBDIRS_AFTER)    $(SUBDIRS_AFTER.$(KBUILD_TARGET))    $(SUBDIRS_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))    )
    3220 $(eval MAKEFILES_BEFORE_$(PASS) ?= $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(KBUILD_TARGET)) $(MAKEFILES_BEFORE.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) )
    3221 $(eval MAKEFILES_AFTER_$(PASS)  ?= $(MAKEFILES_AFTER)  $(MAKEFILES_AFTER.$(KBUILD_TARGET))  $(MAKEFILES_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))  )
    3222 
    3223 $(eval tag:=_before)
    3224 $(eval dep:=)
    3225 $(foreach subdir,$(SUBDIRS_$(PASS))            $(SUBDIRS_$(PASS).$(KBUILD_TARGET))          $(SUBDIRS_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))         ,$(eval $(def_pass_subdir)))
    3226 $(foreach makefile,$(MAKEFILES_BEFORE_$(PASS)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET)) $(MAKEFILES_BEFORE_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)),$(eval $(def_pass_makefile)))
    3227 
    3228 $(eval tag:=_after)
    3229 $(eval dep:=pass_$(pass)_doit)
    3230 $(foreach subdir,$(SUBDIRS_AFTER_$(PASS))      $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET))    $(SUBDIRS_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH))   ,$(eval $(def_pass_subdir)))
    3231 $(foreach makefile,$(MAKEFILES_AFTER_$(PASS))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET))  $(MAKEFILES_AFTER_$(PASS).$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) ,$(eval $(def_pass_makefile)))
    3232 
    3233 ifdef KBUILD_SAFE_PARALLEL
    3234 .NOTPARALLEL: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this
    3235 .PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_this pass_$(pass)_doit
    3236 pass_$(pass)_doit:          $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$(var))
    3237 pass_$(pass)_this:      pass_$(pass)_before
    3238         + $$(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)_doit
    3239 pass_$(pass)_after::    pass_$(pass)_this
    3240 pass_$(pass):           pass_$(pass)_after
    3241 else
     3256else  # !KBUILD_SAFE_PARALLEL
     3257.PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit
    32423258.NOTPARALLEL: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit
    3243 .PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit
    32443259pass_$(pass)_doit: pass_$(pass)_before \
    32453260                $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$($(var)))
     
    32473262                pass_$(pass)_before \
    32483263                pass_$(pass)_doit \
    3249         pass_$(pass)_after
    3250 endif
     3264                pass_$(pass)_after
     3265endif # !KBUILD_SAFE_PARALLEL
    32513266
    32523267#$ (warning pass=$(pass) PASS=$(PASS): $(PASS_$(PASS)_trgs) $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$($(var))))
    3253 endef
    3254 
    3255 # Generate the defined passes.
     3268endef # def_pass_strict
     3269
     3270## Execute a pass, non-strict pass ordering.
     3271# @param        $(pass)         Lowercase pass name.
     3272# @param        $(PASS)         Uppercase pass name.
     3273define def_pass_nonstrict
     3274.PHONY:       pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit
     3275pass_$(pass)_doit: $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$($(var)))
     3276pass_$(pass):   pass_$(pass)_doit
     3277endef # def_pass_nonstrict
     3278
     3279## PASS: rules
     3280# Generate the rules for the defined passes.
    32563281$(foreach PASS, $(PASSES), \
    32573282        $(eval pass := $(PASS_$(PASS)_pass)) \
    3258         $(eval $(def_pass)))
    3259 
    3260 ## Pass order
     3283        $(eval $(def_pass_$(_KBUILD_STRICT_PASS_ORDER))))
     3284
     3285
     3286## Pass order, strict.
    32613287# @param        $(pass)         Current pass name.
    32623288# @param        $(prev_pass)    The previous pass name.
    3263 define def_pass_order
     3289define def_pass_order_strict
    32643290ifdef KBUILD_SAFE_PARALLEL
     3291.PHONY:       pass_$(pass)_order
    32653292.NOTPARALLEL: pass_$(pass)_order
    3266 .PHONY: pass_$(pass)_order
    32673293pass_$(pass)_order: $(pass_prev)
    32683294        %$$(call MSG_PASS,$$(if $$(PASS_$(PASS)),$$(PASS_$(PASS)),$(pass)))
    32693295        + $$(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)
    3270 else
     3296else  # !KBUILD_SAFE_PARALLEL
    32713297.NOTPARALLEL: pass_$(pass)_order pass_$(pass)_banner
    32723298.PHONY:       pass_$(pass)_order pass_$(pass)_banner
     
    32773303                pass_$(pass)_banner \
    32783304                pass_$(pass)
    3279 endif
     3305endif # !KBUILD_SAFE_PARALLEL
    32803306$(eval pass_prev := pass_$(pass)_order)
    3281 endef
     3307endef # def_pass_order_strict
     3308
     3309## Pass order, non-strict.
     3310# @param        $(pass)         Current pass name.
     3311# @param        $(prev_pass)    The previous pass name.
     3312define def_pass_order_nonstrict
     3313.PHONY:       pass_$(pass)_order pass_$(pass)_banner
     3314pass_$(pass)_banner:
     3315        %$$(call MSG_PASS,$$(if $$(PASS_$(PASS)),$$(PASS_$(PASS)),$(pass)))
     3316pass_$(pass)_order: \
     3317                $(pass_prev) \
     3318                pass_$(pass)_banner \
     3319                pass_$(pass)
     3320$(eval pass_prev := pass_$(pass)_order)
     3321endef # def_pass_order_nonstrict
    32823322
    32833323## PASS: order
     
    32863326$(foreach PASS,$(DEFAULT_PASSES),\
    32873327        $(eval pass := $(PASS_$(PASS)_pass)) \
    3288         $(eval $(def_pass_order)))
     3328        $(eval $(def_pass_order_$(_KBUILD_STRICT_PASS_ORDER))))
    32893329
    32903330ifdef KBUILD_PROFILE_SELF
     
    33263366# kBuild debugging stuff.
    33273367#
     3368## @todo this doesn't work. Move to a debug unit and expand it.
    33283369show_targets:
    33293370        @$(foreach target, $(_ALL_TARGETS),\
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette