subdir.mk 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # debug flags:
  2. #
  3. # d: show subdirectory tree
  4. # t: show added targets
  5. # l: show legacy targets
  6. ifeq ($(DEBUG),all)
  7. build_debug:=dlt
  8. else
  9. build_debug:=$(DEBUG)
  10. endif
  11. define debug
  12. $$(findstring $(2),$$(if $$(DEBUG_DIR),$$(if $$(filter $$(DEBUG_DIR)%,$(1)),$(build_debug)),$(build_debug)))
  13. endef
  14. define warn
  15. $$(if $(call debug,$(1),$(2)),$$(warning $(3)))
  16. endef
  17. define warn_eval
  18. $(call warn,$(1),$(2),$(3) $(4))
  19. $(4)
  20. endef
  21. SUBTARGETS:=clean download prepare compile install update refresh prereq
  22. define subtarget
  23. $(call warn_eval,$(1),t,T,$(1)/$(2): $($(1)/) $(foreach bd,$(if $($(1)/builddirs-$(2)),$($(1)/builddirs-$(2)),$($(1)/builddirs)),$(1)/$(bd)/$(2)))
  24. endef
  25. # Parameters: <subdir>
  26. define subdir
  27. $(call warn,$(1),d,D $(1))
  28. $(foreach bd,$($(1)/builddirs),
  29. $(call warn,$(1),d,BD $(1)/$(bd))
  30. $(foreach target,$(SUBTARGETS),
  31. $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd)))
  32. @+$$(MAKE) -j1 -C $(1)/$(bd) $(target)
  33. # legacy targets
  34. $(call warn_eval,$(1)/$(bd),l,T,$(1)/$(bd)-$(target): $(1)/$(bd)/$(target))
  35. )
  36. )
  37. $(foreach target,$(SUBTARGETS),$(call subtarget,$(1),$(target)))
  38. endef
  39. # Parameters: <subdir> <name>
  40. define stampfile
  41. $(1)/stamp:=$(STAGING_DIR)/stampfiles/.$(2)_installed
  42. $(call rdep,$(1),$$($(1)/stamp))
  43. $$($(1)/stamp):
  44. @+$(MAKE) $(1)/install
  45. @mkdir -p $$$$(dirname $$($(1)/stamp))
  46. @touch $$($(1)/stamp)
  47. .PRECIOUS: $$($(1)/stamp) # work around a make bug
  48. $(1)//clean:=$(1)/stamp/clean
  49. $(1)/stamp/clean: FORCE
  50. @rm -f $$($(1)/stamp)
  51. endef