Changeset 1667 in kBuild
- Timestamp:
- Jun 30, 2008 11:08:25 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kBuild/footer.kmk
r1654 r1667 3166 3166 # 3167 3167 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. 3177 define def_pass_setup_and_optimize 3178 3179 # The setup. ## @todo This is looks a bit weird... 3180 ifndef SUBDIRS_$(PASS) 3181 SUBDIRS_$(PASS) := $(SUBDIRS) $(SUBDIRS.$(KBUILD_TARGET)) $(SUBDIRS.$(KBUILD_TARGET.$(KBUILD_TARGET_ARCH))) 3182 endif 3183 ifndef SUBDIRS_AFTER_$(PASS) 3184 SUBDIRS_AFTER_$(PASS) := $(SUBDIRS_AFTER) $(SUBDIRS_AFTER.$(KBUILD_TARGET)) $(SUBDIRS_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) 3185 endif 3186 ifndef MAKEFILES_BEFORE_$(PASS) 3187 MAKEFILES_BEFORE_$(PASS) := $(MAKEFILES_BEFORE) $(MAKEFILES_BEFORE.$(KBUILD_TARGET)) $(MAKEFILES_BEFORE.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) 3188 endif 3189 ifndef MAKEFILES_AFTER_$(PASS) 3190 MAKEFILES_AFTER_$(PASS) := $(MAKEFILES_AFTER) $(MAKEFILES_AFTER.$(KBUILD_TARGET)) $(MAKEFILES_AFTER.$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)) 3191 endif 3192 3193 # The check. 3194 ifeq ($(_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 3203 endif # _KBUILD_STRICT_PASS_ORDER == nonstrict 3204 endef # 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 3168 3214 ## Subdir 3169 3215 # @param $(pass) Lowercase pass name. … … 3179 3225 # @param $(pass) Lowercase pass name. 3180 3226 # @param $(PASS) Uppercase pass name. 3181 # @param $(makefile) 3227 # @param $(makefile) Makefile. 3182 3228 # @param $(tag) tag to attach to the rule name. 3183 3229 define def_pass_makefile … … 3186 3232 endef 3187 3233 3188 ## Execute a pass .3234 ## Execute a pass, strict order. 3189 3235 # @param $(pass) Lowercase pass name. 3190 3236 # @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 3237 define def_pass_strict 3197 3238 $(eval tag:=_before) 3198 3239 $(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)) 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))) 3201 3242 3202 3243 $(eval tag:=_after) 3203 3244 $(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 3248 ifdef 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 3251 pass_$(pass)_doit: $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$(var)) 3210 3252 pass_$(pass)_this: pass_$(pass)_before 3211 3253 + $$(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass)_doit 3212 3254 pass_$(pass)_after:: pass_$(pass)_this 3213 3255 pass_$(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 3256 else # !KBUILD_SAFE_PARALLEL 3257 .PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit 3242 3258 .NOTPARALLEL: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit 3243 .PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit3244 3259 pass_$(pass)_doit: pass_$(pass)_before \ 3245 3260 $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$($(var))) … … 3247 3262 pass_$(pass)_before \ 3248 3263 pass_$(pass)_doit \ 3249 3250 endif 3264 pass_$(pass)_after 3265 endif # !KBUILD_SAFE_PARALLEL 3251 3266 3252 3267 #$ (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. 3268 endef # def_pass_strict 3269 3270 ## Execute a pass, non-strict pass ordering. 3271 # @param $(pass) Lowercase pass name. 3272 # @param $(PASS) Uppercase pass name. 3273 define def_pass_nonstrict 3274 .PHONY: pass_$(pass) pass_$(pass)_before pass_$(pass)_after pass_$(pass)_doit 3275 pass_$(pass)_doit: $(PASS_$(PASS)_trgs) $(foreach var,$(PASS_$(PASS)_vars),$($(var))) 3276 pass_$(pass): pass_$(pass)_doit 3277 endef # def_pass_nonstrict 3278 3279 ## PASS: rules 3280 # Generate the rules for the defined passes. 3256 3281 $(foreach PASS, $(PASSES), \ 3257 3282 $(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. 3261 3287 # @param $(pass) Current pass name. 3262 3288 # @param $(prev_pass) The previous pass name. 3263 define def_pass_order 3289 define def_pass_order_strict 3264 3290 ifdef KBUILD_SAFE_PARALLEL 3291 .PHONY: pass_$(pass)_order 3265 3292 .NOTPARALLEL: pass_$(pass)_order 3266 .PHONY: pass_$(pass)_order3267 3293 pass_$(pass)_order: $(pass_prev) 3268 3294 %$$(call MSG_PASS,$$(if $$(PASS_$(PASS)),$$(PASS_$(PASS)),$(pass))) 3269 3295 + $$(QUIET)$$(MAKE) -f $$(MAKEFILE) pass_$(pass) 3270 else 3296 else # !KBUILD_SAFE_PARALLEL 3271 3297 .NOTPARALLEL: pass_$(pass)_order pass_$(pass)_banner 3272 3298 .PHONY: pass_$(pass)_order pass_$(pass)_banner … … 3277 3303 pass_$(pass)_banner \ 3278 3304 pass_$(pass) 3279 endif 3305 endif # !KBUILD_SAFE_PARALLEL 3280 3306 $(eval pass_prev := pass_$(pass)_order) 3281 endef 3307 endef # def_pass_order_strict 3308 3309 ## Pass order, non-strict. 3310 # @param $(pass) Current pass name. 3311 # @param $(prev_pass) The previous pass name. 3312 define def_pass_order_nonstrict 3313 .PHONY: pass_$(pass)_order pass_$(pass)_banner 3314 pass_$(pass)_banner: 3315 %$$(call MSG_PASS,$$(if $$(PASS_$(PASS)),$$(PASS_$(PASS)),$(pass))) 3316 pass_$(pass)_order: \ 3317 $(pass_prev) \ 3318 pass_$(pass)_banner \ 3319 pass_$(pass) 3320 $(eval pass_prev := pass_$(pass)_order) 3321 endef # def_pass_order_nonstrict 3282 3322 3283 3323 ## PASS: order … … 3286 3326 $(foreach PASS,$(DEFAULT_PASSES),\ 3287 3327 $(eval pass := $(PASS_$(PASS)_pass)) \ 3288 $(eval $(def_pass_order )))3328 $(eval $(def_pass_order_$(_KBUILD_STRICT_PASS_ORDER)))) 3289 3329 3290 3330 ifdef KBUILD_PROFILE_SELF … … 3326 3366 # kBuild debugging stuff. 3327 3367 # 3368 ## @todo this doesn't work. Move to a debug unit and expand it. 3328 3369 show_targets: 3329 3370 @$(foreach target, $(_ALL_TARGETS),\
Note:
See TracChangeset
for help on using the changeset viewer.