diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2011-03-01 13:19:47 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2011-03-01 13:19:47 (GMT) |
commit | c5ed56c50061cfaadb6dfa80f0107a605ae1f630 (patch) | |
tree | 704338dff4fe9575cafb9a86bfe335fd1dbf933c /uClinux-2.4.20-uc1/Rules.make | |
parent | a00bc04c717debbeeaa3010605ac0318f8e4c98d (diff) | |
download | openipcam-c5ed56c50061cfaadb6dfa80f0107a605ae1f630.zip openipcam-c5ed56c50061cfaadb6dfa80f0107a605ae1f630.tar.gz openipcam-c5ed56c50061cfaadb6dfa80f0107a605ae1f630.tar.bz2 |
Bare uClinux-2.4.20-uc1 CVS pull
Diffstat (limited to 'uClinux-2.4.20-uc1/Rules.make')
-rw-r--r-- | uClinux-2.4.20-uc1/Rules.make | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/Rules.make b/uClinux-2.4.20-uc1/Rules.make new file mode 100644 index 0000000..c27ede9 --- /dev/null +++ b/uClinux-2.4.20-uc1/Rules.make @@ -0,0 +1,329 @@ +# +# This file contains rules which are shared between multiple Makefiles. +# + +# +# False targets. +# +.PHONY: dummy + +# +# Special variables which should not be exported +# +unexport EXTRA_AFLAGS +unexport EXTRA_CFLAGS +unexport EXTRA_LDFLAGS +unexport EXTRA_ARFLAGS +unexport SUBDIRS +unexport SUB_DIRS +unexport ALL_SUB_DIRS +unexport MOD_SUB_DIRS +unexport O_TARGET +unexport ALL_MOBJS + +unexport obj-y +unexport obj-m +unexport obj-n +unexport obj- +unexport export-objs +unexport subdir-y +unexport subdir-m +unexport subdir-n +unexport subdir- + +comma := , +EXTRA_CFLAGS_nostdinc := $(EXTRA_CFLAGS) $(kbuild_2_4_nostdinc) + +# +# Get things started. +# +first_rule: sub_dirs + $(MAKE) all_targets + +both-m := $(filter $(mod-subdirs), $(subdir-y)) +SUB_DIRS := $(subdir-y) +MOD_SUB_DIRS := $(sort $(subdir-m) $(both-m)) +ALL_SUB_DIRS := $(sort $(subdir-y) $(subdir-m) $(subdir-n) $(subdir-)) + + +# +# Common rules +# + +%.s: %.c + $(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) $(CFLAGS_$@) -S $< -o $@ + +%.i: %.c + $(CPP) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) $(CFLAGS_$@) $< > $@ + +%.o: %.c + $(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) $(CFLAGS_$@) -c -o $@ $< + @ ( \ + echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS_nostdinc) $(CFLAGS_$@))),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS_nostdinc) $$(CFLAGS_$@))))' ; \ + echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \ + echo 'endif' \ + ) > $(dir $@)/.$(notdir $@).flags + +%.o: %.s + $(AS) $(AFLAGS) $(EXTRA_CFLAGS) -o $@ $< + +# Old makefiles define their own rules for compiling .S files, +# but these standard rules are available for any Makefile that +# wants to use them. Our plan is to incrementally convert all +# the Makefiles to these standard rules. -- rmk, mec +ifdef USE_STANDARD_AS_RULE + +%.s: %.S + $(CPP) $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$@) $< > $@ + +%.o: %.S + $(CC) $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$@) -c -o $@ $< + +endif + +%.lst: %.c + $(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) $(CFLAGS_$@) -g -c -o $*.o $< + $(TOPDIR)/scripts/makelst $* $(TOPDIR) $(OBJDUMP) +# +# +# +all_targets: $(O_TARGET) $(L_TARGET) + +# +# Rule to compile a set of .o files into one .o file +# +ifdef O_TARGET +$(O_TARGET): $(obj-y) + rm -f $@ + ifneq "$(strip $(obj-y))" "" + $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(obj-y), $^) + else + $(AR) rcs $@ + endif + @ ( \ + echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_LDFLAGS) $(obj-y))),$$(strip $$(subst $$(comma),:,$$(EXTRA_LDFLAGS) $$(obj-y))))' ; \ + echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \ + echo 'endif' \ + ) > $(dir $@)/.$(notdir $@).flags +endif # O_TARGET + +# +# Rule to compile a set of .o files into one .a file +# +ifdef L_TARGET +$(L_TARGET): $(obj-y) + rm -f $@ + $(AR) $(EXTRA_ARFLAGS) rcs $@ $(obj-y) + @ ( \ + echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_ARFLAGS) $(obj-y))),$$(strip $$(subst $$(comma),:,$$(EXTRA_ARFLAGS) $$(obj-y))))' ; \ + echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \ + echo 'endif' \ + ) > $(dir $@)/.$(notdir $@).flags +endif + + +# +# This make dependencies quickly +# +fastdep: dummy + $(TOPDIR)/scripts/mkdep $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -- $(wildcard *.[chS]) > .depend +ifdef ALL_SUB_DIRS + $(MAKE) $(patsubst %,_sfdep_%,$(ALL_SUB_DIRS)) _FASTDEP_ALL_SUB_DIRS="$(ALL_SUB_DIRS)" +endif + +ifdef _FASTDEP_ALL_SUB_DIRS +$(patsubst %,_sfdep_%,$(_FASTDEP_ALL_SUB_DIRS)): + $(MAKE) -C $(patsubst _sfdep_%,%,$@) fastdep +endif + + +# +# A rule to make subdirectories +# +subdir-list = $(sort $(patsubst %,_subdir_%,$(SUB_DIRS))) +sub_dirs: dummy $(subdir-list) + +ifdef SUB_DIRS +$(subdir-list) : dummy + $(MAKE) -C $(patsubst _subdir_%,%,$@) +endif + +# +# A rule to make modules +# +ALL_MOBJS = $(filter-out $(obj-y), $(obj-m)) +ifneq "$(strip $(ALL_MOBJS))" "" +MOD_DESTDIR := $(shell $(CONFIG_SHELL) $(TOPDIR)/scripts/pathdown.sh) +endif + +unexport MOD_DIRS +MOD_DIRS := $(MOD_SUB_DIRS) $(MOD_IN_SUB_DIRS) +ifneq "$(strip $(MOD_DIRS))" "" +.PHONY: $(patsubst %,_modsubdir_%,$(MOD_DIRS)) +$(patsubst %,_modsubdir_%,$(MOD_DIRS)) : dummy + $(MAKE) -C $(patsubst _modsubdir_%,%,$@) modules + +.PHONY: $(patsubst %,_modinst_%,$(MOD_DIRS)) +$(patsubst %,_modinst_%,$(MOD_DIRS)) : dummy + $(MAKE) -C $(patsubst _modinst_%,%,$@) modules_install +endif + +.PHONY: modules +modules: $(ALL_MOBJS) dummy \ + $(patsubst %,_modsubdir_%,$(MOD_DIRS)) + +.PHONY: _modinst__ +_modinst__: dummy +ifneq "$(strip $(ALL_MOBJS))" "" + mkdir -p $(MODLIB)/kernel/$(MOD_DESTDIR) + cp $(sort $(ALL_MOBJS)) $(MODLIB)/kernel/$(MOD_DESTDIR) +endif + +.PHONY: modules_install +modules_install: _modinst__ \ + $(patsubst %,_modinst_%,$(MOD_DIRS)) + +# +# A rule to do nothing +# +dummy: + +# +# This is useful for testing +# +script: + $(SCRIPT) + +# +# This sets version suffixes on exported symbols +# Separate the object into "normal" objects and "exporting" objects +# Exporting objects are: all objects that define symbol tables +# +ifdef CONFIG_MODULES + +multi-used := $(filter $(list-multi), $(obj-y) $(obj-m)) +multi-objs := $(foreach m, $(multi-used), $($(basename $(m))-objs)) +active-objs := $(sort $(multi-objs) $(obj-y) $(obj-m)) + +ifdef CONFIG_MODVERSIONS +ifneq "$(strip $(export-objs))" "" + +MODINCL = $(TOPDIR)/include/linux/modules + +# The -w option (enable warnings) for genksyms will return here in 2.1 +# So where has it gone? +# +# Added the SMP separator to stop module accidents between uniprocessor +# and SMP Intel boxes - AC - from bits by Michael Chastain +# + +ifdef CONFIG_SMP + genksyms_smp_prefix := -p smp_ +else + genksyms_smp_prefix := +endif + +$(MODINCL)/%.ver: %.c + @if [ ! -r $(MODINCL)/$*.stamp -o $(MODINCL)/$*.stamp -ot $< ]; then \ + echo '$(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -E -D__GENKSYMS__ $<'; \ + echo '| $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp'; \ + $(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -E -D__GENKSYMS__ $< \ + | $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp; \ + if [ -r $@ ] && cmp -s $@ $@.tmp; then echo $@ is unchanged; rm -f $@.tmp; \ + else echo mv $@.tmp $@; mv -f $@.tmp $@; fi; \ + fi; touch $(MODINCL)/$*.stamp + +$(addprefix $(MODINCL)/,$(export-objs:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h + +# updates .ver files but not modversions.h +fastdep: $(addprefix $(MODINCL)/,$(export-objs:.o=.ver)) + +# updates .ver files and modversions.h like before (is this needed?) +dep: fastdep update-modverfile + +endif # export-objs + +# update modversions.h, but only if it would change +update-modverfile: + @(echo "#ifndef _LINUX_MODVERSIONS_H";\ + echo "#define _LINUX_MODVERSIONS_H"; \ + echo "#include <linux/modsetver.h>"; \ + cd $(TOPDIR)/include/linux/modules; \ + for f in *.ver; do \ + if [ -f $$f ]; then echo "#include <linux/modules/$${f}>"; fi; \ + done; \ + echo "#endif"; \ + ) > $(TOPDIR)/include/linux/modversions.h.tmp + @if [ -r $(TOPDIR)/include/linux/modversions.h ] && cmp -s $(TOPDIR)/include/linux/modversions.h $(TOPDIR)/include/linux/modversions.h.tmp; then \ + echo $(TOPDIR)/include/linux/modversions.h was not updated; \ + rm -f $(TOPDIR)/include/linux/modversions.h.tmp; \ + else \ + echo $(TOPDIR)/include/linux/modversions.h was updated; \ + mv -f $(TOPDIR)/include/linux/modversions.h.tmp $(TOPDIR)/include/linux/modversions.h; \ + fi + +$(active-objs): $(TOPDIR)/include/linux/modversions.h + +else + +$(TOPDIR)/include/linux/modversions.h: $(TOPDIR)/include/linux/modsetver.h + @echo "#include <linux/modsetver.h>" > $@ + +endif # CONFIG_MODVERSIONS + +ifneq "$(strip $(export-objs))" "" +$(export-objs): $(export-objs:.o=.c) $(TOPDIR)/include/linux/modversions.h + $(CC) $(CFLAGS) $(EXTRA_CFLAGS_nostdinc) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) $(CFLAGS_$@) -DEXPORT_SYMTAB -c $(@:.o=.c) + @ ( \ + echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS_nostdinc) $(CFLAGS_$@) -DEXPORT_SYMTAB)),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS_nostdinc) $$(CFLAGS_$@) -DEXPORT_SYMTAB)))' ; \ + echo 'FILES_FLAGS_UP_TO_DATE += $@' ; \ + echo 'endif' \ + ) > $(dir $@)/.$(notdir $@).flags +endif + +endif # CONFIG_MODULES + + +# +# include dependency files if they exist +# +ifneq ($(wildcard .depend),) +include .depend +endif + +ifneq ($(wildcard $(TOPDIR)/.hdepend),) +include $(TOPDIR)/.hdepend +endif + +# +# Find files whose flags have changed and force recompilation. +# For safety, this works in the converse direction: +# every file is forced, except those whose flags are positively up-to-date. +# +FILES_FLAGS_UP_TO_DATE := + +# For use in expunging commas from flags, which mung our checking. +comma = , + +FILES_FLAGS_EXIST := $(wildcard .*.flags) +ifneq ($(FILES_FLAGS_EXIST),) +include $(FILES_FLAGS_EXIST) +endif + +FILES_FLAGS_CHANGED := $(strip \ + $(filter-out $(FILES_FLAGS_UP_TO_DATE), \ + $(O_TARGET) $(L_TARGET) $(active-objs) \ + )) + +# A kludge: .S files don't get flag dependencies (yet), +# because that will involve changing a lot of Makefiles. Also +# suppress object files explicitly listed in $(IGNORE_FLAGS_OBJS). +# This allows handling of assembly files that get translated into +# multiple object files (see arch/ia64/lib/idiv.S, for example). +FILES_FLAGS_CHANGED := $(strip \ + $(filter-out $(patsubst %.S, %.o, $(wildcard *.S) $(IGNORE_FLAGS_OBJS)), \ + $(FILES_FLAGS_CHANGED))) + +ifneq ($(FILES_FLAGS_CHANGED),) +$(FILES_FLAGS_CHANGED): dummy +endif |