home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / scripts / Kbuild.include < prev    next >
Encoding:
Text File  |  1995-11-21  |  5.1 KB  |  149 lines

  1. ####
  2. # kbuild: Generic definitions
  3.  
  4. # Convinient variables
  5. comma   := ,
  6. squote  := '
  7. empty   :=
  8. space   := $(empty) $(empty)
  9.  
  10. ###
  11. # The temporary file to save gcc -MD generated dependencies must not
  12. # contain a comma
  13. depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
  14.  
  15. ###
  16. # Escape single quote for use in echo statements
  17. escsq = $(subst $(squote),'\$(squote)',$1)
  18.  
  19. ###
  20. # filechk is used to check if the content of a generated file is updated.
  21. # Sample usage:
  22. # define filechk_sample
  23. #    echo $KERNELRELEASE
  24. # endef
  25. # version.h : Makefile
  26. #    $(call filechk,sample)
  27. # The rule defined shall write to stdout the content of the new file.
  28. # The existing file will be compared with the new one.
  29. # - If no file exist it is created
  30. # - If the content differ the new file is used
  31. # - If they are equal no change, and no timestamp update
  32. # - stdin is piped in from the first prerequisite ($<) so one has
  33. #   to specify a valid file as first prerequisite (often the kbuild file)
  34. define filechk
  35.     $(Q)set -e;                \
  36.     echo '  CHK     $@';            \
  37.     mkdir -p $(dir $@);            \
  38.     $(filechk_$(1)) < $< > $@.tmp;        \
  39.     if [ -r $@ ] && cmp -s $@ $@.tmp; then    \
  40.         rm -f $@.tmp;            \
  41.     else                    \
  42.         echo '  UPD     $@';        \
  43.         mv -f $@.tmp $@;        \
  44.     fi
  45. endef
  46.  
  47. ######
  48. # gcc support functions
  49. # See documentation in Documentation/kbuild/makefiles.txt
  50.  
  51. # as-option
  52. # Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
  53.  
  54. as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
  55.          -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
  56.          else echo "$(2)"; fi ;)
  57.  
  58. # cc-option
  59. # Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
  60.  
  61. cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
  62.              > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
  63.  
  64. # cc-option-yn
  65. # Usage: flag := $(call cc-option-yn, -march=winchip-c6)
  66. cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
  67.                 > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
  68.  
  69. # cc-option-align
  70. # Prefix align with either -falign or -malign
  71. cc-option-align = $(subst -functions=0,,\
  72.     $(call cc-option,-falign-functions=0,-malign-functions=0))
  73.  
  74. # cc-version
  75. # Usage gcc-ver := $(call cc-version, $(CC))
  76. cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
  77.               $(if $(1), $(1), $(CC)))
  78.  
  79. # cc-ifversion
  80. # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
  81. cc-ifversion = $(shell if [ $(call cc-version, $(CC)) $(1) $(2) ]; then \
  82.                        echo $(3); fi;)
  83.  
  84. ###
  85. # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
  86. # Usage:
  87. # $(Q)$(MAKE) $(build)=dir
  88. build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
  89.  
  90. # Prefix -I with $(srctree) if it is not an absolute path
  91. addtree = $(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1)
  92. # Find all -I options and call addtree
  93. flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
  94.  
  95. # If quiet is set, only print short version of command
  96. cmd = @$(echo-cmd) $(cmd_$(1))
  97.  
  98. # Add $(obj)/ for paths that is not absolute
  99. objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
  100.  
  101. ###
  102. # if_changed      - execute command if any prerequisite is newer than 
  103. #                   target, or command line has changed
  104. # if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
  105. #                   including used config symbols
  106. # if_changed_rule - as if_changed but execute rule instead
  107. # See Documentation/kbuild/makefiles.txt for more info
  108.  
  109. ifneq ($(KBUILD_NOCMDDEP),1)
  110. # Check if both arguments has same arguments. Result in empty string if equal
  111. # User may override this check using make KBUILD_NOCMDDEP=1
  112. arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) )
  113. endif
  114.  
  115. # echo command. Short version is $(quiet) equals quiet, otherwise full command
  116. echo-cmd = $(if $($(quiet)cmd_$(1)), \
  117.     echo '  $(call escsq,$($(quiet)cmd_$(1)))';)
  118.  
  119. make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))
  120.  
  121. # function to only execute the passed command if necessary
  122. # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
  123. # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
  124. #
  125. if_changed = $(if $(strip $(filter-out $(PHONY),$?)          \
  126.         $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
  127.     @set -e; \
  128.     $(echo-cmd) $(cmd_$(1)); \
  129.     echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
  130.  
  131. # execute the command and also postprocess generated .d dependencies
  132. # file
  133. if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?)  \
  134.         $(filter-out FORCE $(wildcard $^),$^)    \
  135.     $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),     \
  136.     @set -e; \
  137.     $(echo-cmd) $(cmd_$(1)); \
  138.     scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
  139.     rm -f $(depfile); \
  140.     mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
  141.  
  142. # Usage: $(call if_changed_rule,foo)
  143. # will check if $(cmd_foo) changed, or any of the prequisites changed,
  144. # and if so will execute $(rule_foo)
  145. if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?)            \
  146.             $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
  147.             @set -e; \
  148.             $(rule_$(1)))
  149.