| # |
| # Generic kbuild routines |
| # |
| |
| # The temporary file to save gcc -MD generated dependencies must not |
| # contain a comma |
| depfile = $(subst $(comma),_,$(@D)/.$(@F).d) |
| |
| |
| ifneq ($(KBUILD_NOCMDDEP),1) |
| # Check if both arguments has same arguments. Result in empty string if equal |
| # User may override this check using make KBUILD_NOCMDDEP=1 |
| arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) ) |
| |
| endif |
| |
| # If quiet is set, only print short version of command |
| cmd = @$(if $($(quiet)cmd_$(1)),\ |
| echo ' $(subst ','\'',$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) |
| |
| |
| # echo command. Short version is $(quiet) equals quiet, otherwise full command |
| echo-cmd = $(if $($(quiet)cmd_$(1)), \ |
| echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) |
| |
| # function to only execute the passed command if necessary |
| # >'< substitution is for echo to work, |
| # >$< substitution to preserve $ when reloading .cmd file |
| # note: when using inline perl scripts [perl -e '...$$t=1;...'] in |
| # $(cmd_xxx) double $$ your perl vars |
| # |
| if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ |
| @set -e; \ |
| $(echo-cmd) \ |
| $(cmd_$(1)); \ |
| echo 'cmd_$@ := $(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' \ |
| > $(@D)/.$(@F).cmd) |
| |
| |
| # execute the command and also postprocess generated .d dependencies |
| # file |
| if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^) \ |
| $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ |
| @set -e; \ |
| $(echo-cmd) \ |
| $(cmd_$(1)); \ |
| scripts/basic/fixdep $(depfile) $@ \ |
| '$(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ |
| rm -f $(depfile); \ |
| mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) |
| |
| |