Import 2.1.116pre1
[davej-history.git] / Rules.make
blobc64024d8fe1d1b2a9052cf57e9b7a8be1dd8bfb0
2 # This file contains rules which are shared between multiple Makefiles.
6 # False targets.
8 .PHONY: dummy
11 # Special variables which should not be exported
13 unexport EXTRA_ASFLAGS
14 unexport EXTRA_CFLAGS
15 unexport EXTRA_LDFLAGS
16 unexport EXTRA_ARFLAGS
17 unexport SUBDIRS
18 unexport SUB_DIRS
19 unexport ALL_SUB_DIRS
20 unexport MOD_SUB_DIRS
21 unexport O_TARGET
22 unexport O_OBJS
23 unexport L_OBJS
24 unexport M_OBJS
25 # intermediate objects that form part of a module
26 unexport MI_OBJS
27 unexport ALL_MOBJS
28 # objects that export symbol tables
29 unexport OX_OBJS
30 unexport LX_OBJS
31 unexport MX_OBJS
32 unexport MIX_OBJS
33 unexport SYMTAB_OBJS
35 unexport MOD_LIST_NAME
38 # Get things started.
40 first_rule: sub_dirs
41 $(MAKE) all_targets
44 # Common rules
47 %.s: %.c
48 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -S $< -o $@
50 %.i: %.c
51 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -E $< > $@
53 %.o: %.c
54 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -c -o $@ $<
55 @ ( \
56 echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@))),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS) $$(CFLAGS_$@))))' ; \
57 echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \
58 echo 'endif' \
59 ) > $(dir $@)/.$(notdir $@).flags
61 %.o: %.s
62 $(AS) $(ASFLAGS) $(EXTRA_CFLAGS) -o $@ $<
67 all_targets: $(O_TARGET) $(L_TARGET)
70 # Rule to compile a set of .o files into one .o file
72 ifdef O_TARGET
73 ALL_O = $(OX_OBJS) $(O_OBJS)
74 $(O_TARGET): $(ALL_O)
75 rm -f $@
76 ifneq "$(strip $(ALL_O))" ""
77 $(LD) $(EXTRA_LDFLAGS) -r -o $@ $(ALL_O)
78 else
79 $(AR) rcs $@
80 endif
81 @ ( \
82 echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_LDFLAGS) $(ALL_O))),$$(strip $$(subst $$(comma),:,$$(EXTRA_LDFLAGS) $$(ALL_O))))' ; \
83 echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \
84 echo 'endif' \
85 ) > $(dir $@)/.$(notdir $@).flags
86 endif # O_TARGET
89 # Rule to compile a set of .o files into one .a file
91 ifdef L_TARGET
92 $(L_TARGET): $(LX_OBJS) $(L_OBJS)
93 rm -f $@
94 $(AR) $(EXTRA_ARFLAGS) rcs $@ $(LX_OBJS) $(L_OBJS)
95 @ ( \
96 echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_ARFLAGS) $(LX_OBJS) $(L_OBJS))),$$(strip $$(subst $$(comma),:,$$(EXTRA_ARFLAGS) $$(LX_OBJS) $$(L_OBJS))))' ; \
97 echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \
98 echo 'endif' \
99 ) > $(dir $@)/.$(notdir $@).flags
100 endif
103 # This make dependencies quickly
105 fastdep: dummy
106 $(TOPDIR)/scripts/mkdep $(wildcard *.[chS] local.h.master) > .depend
107 ifdef ALL_SUB_DIRS
108 set -e; for i in $(ALL_SUB_DIRS); do $(MAKE) -C $$i fastdep; done
109 endif
112 # A rule to make subdirectories
114 sub_dirs: dummy
115 ifdef SUB_DIRS
116 set -e; for i in $(SUB_DIRS); do $(MAKE) -C $$i; done
117 endif
120 # A rule to make modules
122 ALL_MOBJS = $(MX_OBJS) $(M_OBJS)
123 ifneq "$(strip $(ALL_MOBJS))" ""
124 PDWN=$(shell $(CONFIG_SHELL) $(TOPDIR)/scripts/pathdown.sh)
125 endif
126 modules: $(ALL_MOBJS) $(MIX_OBJS) $(MI_OBJS) dummy
127 ifdef MOD_SUB_DIRS
128 set -e; for i in $(MOD_SUB_DIRS); do $(MAKE) -C $$i modules; done
129 endif
130 ifdef MOD_IN_SUB_DIRS
131 set -e; for i in $(MOD_IN_SUB_DIRS); do $(MAKE) -C $$i modules; done
132 endif
133 ifneq "$(strip $(MOD_LIST_NAME))" ""
134 rm -f $$TOPDIR/modules/$(MOD_LIST_NAME)
135 ifdef MOD_SUB_DIRS
136 for i in $(MOD_SUB_DIRS); do \
137 echo `basename $$i`.o >> $$TOPDIR/modules/$(MOD_LIST_NAME); done
138 endif
139 ifneq "$(strip $(ALL_MOBJS))" ""
140 echo $(ALL_MOBJS) >> $$TOPDIR/modules/$(MOD_LIST_NAME)
141 endif
142 ifneq "$(strip $(MOD_TO_LIST))" ""
143 echo $(MOD_TO_LIST) >> $$TOPDIR/modules/$(MOD_LIST_NAME)
144 endif
145 endif
146 ifneq "$(strip $(ALL_MOBJS))" ""
147 echo $(PDWN)
148 cd $$TOPDIR/modules; for i in $(ALL_MOBJS); do \
149 ln -sf ../$(PDWN)/$$i $$i; done
150 endif
153 # A rule to do nothing
155 dummy:
158 # This is useful for testing
160 script:
161 $(SCRIPT)
164 # This sets version suffixes on exported symbols
165 # Uses SYMTAB_OBJS
166 # Separate the object into "normal" objects and "exporting" objects
167 # Exporting objects are: all objects that define symbol tables
169 ifdef CONFIG_MODULES
171 SYMTAB_OBJS = $(LX_OBJS) $(OX_OBJS) $(MX_OBJS) $(MIX_OBJS)
173 ifdef CONFIG_MODVERSIONS
174 ifneq "$(strip $(SYMTAB_OBJS))" ""
176 MODINCL = $(TOPDIR)/include/linux/modules
178 # The -w option (enable warnings) for genksyms will return here in 2.1
179 # So where has it gone?
181 # Added the SMP separator to stop module accidents between uniprocessor
182 # and SMP Intel boxes - AC - from bits by Michael Chastain
185 ifdef SMP
186 genksyms_smp_prefix := -p smp_
187 else
188 genksyms_smp_prefix :=
189 endif
191 $(MODINCL)/%.ver: %.c
192 @if [ ! -r $(MODINCL)/$*.stamp -o $(MODINCL)/$*.stamp -ot $< ]; then \
193 echo '$(CC) $(CFLAGS) -E -D__GENKSYMS__ $<'; \
194 echo '| $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp'; \
195 $(CC) $(CFLAGS) -E -D__GENKSYMS__ $< \
196 | $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp; \
197 if [ -r $@ ] && cmp -s $@ $@.tmp; then echo $@ is unchanged; rm -f $@.tmp; \
198 else echo mv $@.tmp $@; mv -f $@.tmp $@; fi; \
199 fi; touch $(MODINCL)/$*.stamp
201 $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
203 $(TOPDIR)/include/linux/modversions.h: $(addprefix $(MODINCL)/,$(SYMTAB_OBJS:.o=.ver))
204 @echo updating $(TOPDIR)/include/linux/modversions.h
205 @(echo "#ifndef _LINUX_MODVERSIONS_H";\
206 echo "#define _LINUX_MODVERSIONS_H"; \
207 echo "#include <linux/modsetver.h>"; \
208 cd $(TOPDIR)/include/linux/modules; \
209 for f in *.ver; do \
210 if [ -f $$f ]; then echo "#include <linux/modules/$${f}>"; fi; \
211 done; \
212 echo "#endif"; \
213 ) > $@
215 dep fastdep: $(TOPDIR)/include/linux/modversions.h
217 endif # SYMTAB_OBJS
219 $(M_OBJS): $(TOPDIR)/include/linux/modversions.h
220 ifdef MAKING_MODULES
221 $(O_OBJS) $(L_OBJS): $(TOPDIR)/include/linux/modversions.h
222 endif
224 else
226 $(TOPDIR)/include/linux/modversions.h:
227 @echo "#include <linux/modsetver.h>" > $@
229 endif # CONFIG_MODVERSIONS
231 ifneq "$(strip $(SYMTAB_OBJS))" ""
232 $(SYMTAB_OBJS): $(TOPDIR)/include/linux/modversions.h $(SYMTAB_OBJS:.o=.c)
233 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB -c $(@:.o=.c)
234 @ ( \
235 echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -DEXPORT_SYMTAB)),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS) $$(CFLAGS_$@) -DEXPORT_SYMTAB)))' ; \
236 echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \
237 echo 'endif' \
238 ) > $(dir $@)/.$(notdir $@).flags
239 endif
241 endif # CONFIG_MODULES
245 # include dependency files if they exist
247 ifneq ($(wildcard .depend),)
248 include .depend
249 endif
251 ifneq ($(wildcard $(TOPDIR)/.hdepend),)
252 include $(TOPDIR)/.hdepend
253 endif
256 # Find files whose flags have changed and force recompilation.
257 # For safety, this works in the converse direction:
258 # every file is forced, except those whose flags are positively up-to-date.
260 FILES_FLAGS_UP_TO_DATE :=
262 # For use in expunging commas from flags, which mung our checking.
263 comma = ,
265 FILES_FLAGS_EXIST := $(wildcard .*.flags)
266 ifneq ($(FILES_FLAGS_EXIST),)
267 include $(FILES_FLAGS_EXIST)
268 endif
270 FILES_FLAGS_CHANGED := $(strip \
271 $(filter-out $(FILES_FLAGS_UP_TO_DATE), \
272 $(O_TARGET) $(O_OBJS) $(OX_OBJS) \
273 $(L_TARGET) $(L_OBJS) $(LX_OBJS) \
274 $(M_OBJS) $(MX_OBJS) \
275 $(MI_OBJS) $(MIX_OBJS) \
278 # A kludge: .S files don't get flag dependencies (yet),
279 # because that will involve changing a lot of Makefiles.
280 FILES_FLAGS_CHANGED := $(strip \
281 $(filter-out $(patsubst %.S, %.o, $(wildcard *.S)), \
282 $(FILES_FLAGS_CHANGED)))
284 ifneq ($(FILES_FLAGS_CHANGED),)
285 $(FILES_FLAGS_CHANGED): dummy
286 endif