Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel' of palacios@newskysaw.cs.northwestern.edu:/home/palacios/palacio...
[palacios.releases.git] / scripts / Kbuild.include
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)))