summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@penguin.transmeta.com>2002-10-27 23:35:58 -0800
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-10-27 23:35:58 -0800
commit61fa45e0f04d35db247506657cd744f07a8b02e0 (patch)
treeba88af04563ccadd62b84b745bbb6b9cb197357f
parentc957f976ae75034f604eb220142dda3c46c28474 (diff)
parentafed13861e6bd0e308d3d53b38ed11e4eabe3a2f (diff)
Merge http://linux-isdn.bkbits.net/linux-2.5.make
into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux
-rw-r--r--Makefile70
-rw-r--r--Rules.make624
-rw-r--r--arch/i386/Makefile2
-rw-r--r--arch/i386/boot/Makefile2
-rw-r--r--arch/x86_64/boot/Makefile2
-rw-r--r--drivers/char/Makefile2
-rw-r--r--drivers/isdn/Makefile4
-rw-r--r--drivers/isdn/act2000/Makefile2
-rw-r--r--drivers/isdn/capi/Makefile4
-rw-r--r--drivers/isdn/divert/Makefile7
-rw-r--r--drivers/isdn/eicon/Makefile2
-rw-r--r--drivers/isdn/hardware/Makefile4
-rw-r--r--drivers/isdn/hardware/avm/Makefile4
-rw-r--r--drivers/isdn/hardware/eicon/Makefile3
-rw-r--r--drivers/isdn/hisax/Makefile2
-rw-r--r--drivers/isdn/hysdn/Makefile2
-rw-r--r--drivers/isdn/i4l/Makefile2
-rw-r--r--drivers/isdn/icn/Makefile2
-rw-r--r--drivers/isdn/isdnloop/Makefile3
-rw-r--r--drivers/isdn/pcbit/Makefile2
-rw-r--r--drivers/isdn/sc/Makefile2
-rw-r--r--drivers/isdn/tpam/Makefile2
-rw-r--r--drivers/scsi/aic7xxx/Makefile5
-rw-r--r--init/Makefile8
-rw-r--r--net/appletalk/Makefile1
-rw-r--r--net/ax25/Makefile1
-rw-r--r--net/bluetooth/rfcomm/Makefile3
-rw-r--r--net/decnet/Makefile1
-rw-r--r--net/ipx/Makefile1
-rw-r--r--net/irda/Makefile1
-rw-r--r--net/llc/Makefile1
-rw-r--r--net/netrom/Makefile1
-rw-r--r--net/rose/Makefile1
-rw-r--r--net/sctp/Makefile2
-rw-r--r--net/sunrpc/Makefile1
-rw-r--r--net/unix/Makefile1
-rw-r--r--net/x25/Makefile1
-rw-r--r--scripts/Makefile.build223
-rw-r--r--scripts/Makefile.clean33
-rw-r--r--scripts/Makefile.lib190
-rw-r--r--scripts/Makefile.modinst34
-rw-r--r--scripts/Makefile.modver123
42 files changed, 646 insertions, 735 deletions
diff --git a/Makefile b/Makefile
index a2962207fa2b..cd22bf54397d 100644
--- a/Makefile
+++ b/Makefile
@@ -38,6 +38,8 @@ ARCH := $(SUBARCH)
KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
+UTS_MACHINE := $(ARCH)
+
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi ; fi)
@@ -106,11 +108,20 @@ endif
MAKEFLAGS += --no-print-directory
+# For maximum performance (+ possibly random breakage, uncomment
+# the following)
+
+#MAKEFLAGS += -rR
+
# If the user wants quiet mode, echo short versions of the commands
# only
-ifneq ($(KBUILD_VERBOSE),1)
+ifeq ($(KBUILD_VERBOSE),1)
+ quiet =
+ Q =
+else
quiet=quiet_
+ Q = @
endif
# If the user is running make -s (silent mode), suppress echoing of
@@ -120,7 +131,7 @@ ifneq ($(findstring s,$(MAKEFLAGS)),)
quiet=silent_
endif
-export quiet KBUILD_VERBOSE
+export quiet Q KBUILD_VERBOSE
# Paths to obj / src tree
@@ -142,7 +153,6 @@ NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
-MAKEFILES = .config
GENKSYMS = /sbin/genksyms
DEPMOD = /sbin/depmod
KALLSYMS = /sbin/kallsyms
@@ -161,7 +171,7 @@ AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
CONFIG_SHELL TOPDIR HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
- CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS PERL
+ CPP AR NM STRIP OBJCOPY OBJDUMP MAKE GENKSYMS PERL UTS_MACHINE
export CPPFLAGS NOSTDINC_FLAGS OBJCOPYFLAGS LDFLAGS
export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
@@ -187,7 +197,7 @@ scripts/docproc scripts/fixdep scripts/split-include : scripts ;
.PHONY: scripts
scripts:
- +@$(call descend,scripts,)
+ +@$(Q)$(MAKE) -f scripts/Makefile.build obj=scripts
# Objects we will link into vmlinux / subdirs we need to visit
# ---------------------------------------------------------------------------
@@ -306,7 +316,7 @@ define rule_vmlinux__
echo ' Generating build number'
. scripts/mkversion > .tmp_version
mv -f .tmp_version .version
- +$(call descend,init,)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=init
)
$(call cmd,vmlinux__)
echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
@@ -365,7 +375,7 @@ $(sort $(vmlinux-objs)): $(SUBDIRS) ;
.PHONY: $(SUBDIRS)
$(SUBDIRS): .hdepend prepare
- +@$(call descend,$@,)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$@
# Things we need done before we descend to build or make
# module versions are listed in "prepare"
@@ -388,17 +398,17 @@ targets += arch/$(ARCH)/vmlinux.lds.s
# ---------------------------------------------------------------------------
%.s: %.c scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
%.i: %.c scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
%.o: %.c scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
%.lst: %.c scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
%.s: %.S scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
%.o: %.S scripts FORCE
- +@$(call descend,$(@D),$@)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$(@D) $@
# FIXME: The asm symlink changes when $(ARCH) changes. That's
# hard to detect, but I suppose "make mrproper" is a good idea
@@ -472,9 +482,11 @@ ifdef CONFIG_MODVERSIONS
# Update modversions.h, but only if it would change.
-include/linux/modversions.h: FORCE
+.PHONY: __rm_tmp_export-objs
+__rm_tmp_export-objs:
@rm -rf .tmp_export-objs
- @$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS))
+
+include/linux/modversions.h: $(patsubst %,_modver_%,$(SUBDIRS))
@echo -n ' Generating $@'
@( echo "#ifndef _LINUX_MODVERSIONS_H";\
echo "#define _LINUX_MODVERSIONS_H"; \
@@ -487,8 +499,9 @@ include/linux/modversions.h: FORCE
) > $@.tmp; \
$(update-if-changed)
-$(patsubst %,_sfdep_%,$(SUBDIRS)): FORCE
- +@$(call descend,$(patsubst _sfdep_%,%,$@),fastdep)
+.PHONY: $(patsubst %, _modver_%, $(SUBDIRS))
+$(patsubst %, _modver_%, $(SUBDIRS)): __rm_tmp_export-objs
+ $(Q)$(MAKE) -f scripts/Makefile.modver obj=$(patsubst _modver_%,%,$@)
else # !CONFIG_MODVERSIONS
@@ -540,8 +553,7 @@ _modinst_post:
.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
$(patsubst %, _modinst_%, $(SUBDIRS)) :
- +@$(call descend,$(patsubst _modinst_%,%,$@),modules_install)
-
+ $(Q)$(MAKE) -f scripts/Makefile.modinst obj=$(patsubst _modinst_%,%,$@)
else # CONFIG_MODULES
# Modules not configured
@@ -638,11 +650,11 @@ ifeq ($(filter-out $(noconfig_targets),$(MAKECMDGOALS)),)
make_with_config
xconfig:
- +@$(call descend,scripts,scripts/kconfig.tk)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts scripts/kconfig.tk
wish -f scripts/kconfig.tk
menuconfig:
- +@$(call descend,scripts,lxdialog)
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=scripts lxdialog
$(CONFIG_SHELL) $(src)/scripts/Menuconfig arch/$(ARCH)/config.in
config:
@@ -698,7 +710,7 @@ MRPROPER_DIRS += \
clean-dirs += $(ALL_SUBDIRS) Documentation/DocBook scripts
$(addprefix _clean_,$(clean-dirs)):
- $(MAKE) MAKEFILES= -rR -f scripts/Makefile.clean obj=$(patsubst _clean_%,%,$@)
+ $(Q)$(MAKE) -f scripts/Makefile.clean obj=$(patsubst _clean_%,%,$@)
quiet_cmd_rmclean = RM $$(CLEAN_FILES)
cmd_rmclean = rm -f $(CLEAN_FILES)
@@ -798,7 +810,7 @@ help:
# Documentation targets
# ---------------------------------------------------------------------------
sgmldocs psdocs pdfdocs htmldocs: scripts
- +@$(call descend,Documentation/DocBook,$@)
+ $(Q)$(MAKE) -f Documentation/DocBook/Makefile $@
# Scripts to check various things for consistency
# ---------------------------------------------------------------------------
@@ -833,12 +845,10 @@ endif # ifdef include-config
# FIXME Should go into a make.lib or something
# ===========================================================================
-echo_target = $@
-
a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(NOSTDINC_FLAGS) \
$(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
-quiet_cmd_as_s_S = CPP $(echo_target)
+quiet_cmd_as_s_S = CPP $@
cmd_as_s_S = $(CPP) $(a_flags) -o $@ $<
# read all saved command lines
@@ -885,13 +895,9 @@ define update-if-changed
mv -f $@.tmp $@; \
fi
endef
-
# $(call descend,<dir>,<target>)
-# Recursively call a sub-make in <dir> with target <target>
+# Recursively call a sub-make in <dir> with target <target>
-ifeq ($(KBUILD_VERBOSE),1)
-descend = echo '$(MAKE) -f $(1)/Makefile $(2)';
-endif
-descend += $(MAKE) -f $(1)/Makefile obj=$(1) $(2)
+descend = $(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2)
FORCE:
diff --git a/Rules.make b/Rules.make
index 9343c984a820..8b137891791f 100644
--- a/Rules.make
+++ b/Rules.make
@@ -1,625 +1 @@
-ifndef no-rules.make
-
-#
-# This file contains rules which are shared between multiple Makefiles.
-#
-
-# Some standard vars
-
-comma := ,
-empty :=
-space := $(empty) $(empty)
-
-# Some bug traps
-# ---------------------------------------------------------------------------
-
-ifdef O_TARGET
-$(error kbuild: $(obj)/Makefile - Usage of O_TARGET := $(O_TARGET) is obsolete in 2.5. Please fix!)
-endif
-
-ifdef L_TARGET
-ifneq ($(L_TARGET),lib.a)
-$(warning kbuild: $(obj)/Makefile - L_TARGET := $(L_TARGET) target shall be renamed to lib.a. Please fix!)
-endif
-endif
-
-ifdef list-multi
-$(warning kbuild: $(obj)/Makefile - list-multi := $(list-multi) is obsolete in 2.5. Please fix!)
-endif
-
-# Some paths for the Makefiles to use
-# ---------------------------------------------------------------------------
-
-# FIXME. For now, we leave it possible to use make -C or make -f
-# to do work in subdirs.
-
-ifndef obj
-obj = .
-CFLAGS := $(patsubst -I%,-I$(TOPDIR)/%,$(patsubst -I$(TOPDIR)/%,-I%,$(CFLAGS)))
-AFLAGS := $(patsubst -I%,-I$(TOPDIR)/%,$(patsubst -I$(TOPDIR)/%,-I%,$(AFLAGS)))
-endif
-
-# For use in the quiet output
-echo_target = $@
-
-# Usage:
-#
-# $(obj)/target.o : target.o in the build dir
-# $(src)/target.c : target.c in the source dir
-# $(objtree)/include/linux/version.h : Some file relative to the build
-# dir root
-# $(srctree)/include/linux/module.h : Some file relative to the source
-# dir root
-#
-# $(obj) and $(src) can only be used in the section after
-# include $(TOPDIR)/Rules.make, i.e for generated files and the like.
-# Intentionally.
-#
-# We don't support separate source / object yet, so these are just
-# placeholders for now
-
-src := $(obj)
-
-# Figure out what we need to build from the various variables
-# ===========================================================================
-
-# When an object is listed to be built compiled-in and modular,
-# only build the compiled-in version
-
-obj-m := $(filter-out $(obj-y),$(obj-m))
-
-# Handle objects in subdirs
-# ---------------------------------------------------------------------------
-# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
-# and add the directory to the list of dirs to descend into: $(subdir-y)
-# o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
-# and add the directory to the list of dirs to descend into: $(subdir-m)
-
-__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
-subdir-y += $(__subdir-y)
-__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
-subdir-m += $(__subdir-m)
-__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n)))
-subdir-n += $(__subdir-n)
-__subdir- := $(patsubst %/,%,$(filter %/, $(obj-)))
-subdir- += $(__subdir-)
-obj-y := $(patsubst %/, %/built-in.o, $(obj-y))
-obj-m := $(filter-out %/, $(obj-m))
-
-# Subdirectories we need to descend into
-
-subdir-ym := $(sort $(subdir-y) $(subdir-m))
-subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-))
-
-# export.o is never a composite object, since $(export-objs) has a
-# fixed meaning (== objects which EXPORT_SYMBOL())
-__obj-y = $(filter-out export.o,$(obj-y))
-__obj-m = $(filter-out export.o,$(obj-m))
-
-# if $(foo-objs) exists, foo.o is a composite object
-multi-used-y := $(sort $(foreach m,$(__obj-y), $(if $($(m:.o=-objs)), $(m))))
-multi-used-m := $(sort $(foreach m,$(__obj-m), $(if $($(m:.o=-objs)), $(m))))
-
-# Build list of the parts of our composite objects, our composite
-# objects depend on those (obviously)
-multi-objs-y := $(foreach m, $(multi-used-y), $($(m:.o=-objs)))
-multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)))
-
-# $(subdir-obj-y) is the list of objects in $(obj-y) which do not live
-# in the local directory
-subdir-obj-y := $(foreach o,$(obj-y),$(if $(filter-out $(o),$(notdir $(o))),$(o)))
-
-# Replace multi-part objects by their individual parts, look at local dir only
-real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $($(m:.o=-objs)),$($(m:.o=-objs)),$(m))) $(EXTRA_TARGETS)
-real-objs-m := $(foreach m, $(obj-m), $(if $($(m:.o=-objs)),$($(m:.o=-objs)),$(m)))
-
-# Only build module versions for files which are selected to be built
-export-objs := $(filter $(export-objs),$(real-objs-y) $(real-objs-m))
-
-host-progs-single := $(foreach m,$(host-progs),$(if $($(m)-objs),,$(m)))
-host-progs-multi := $(foreach m,$(host-progs),$(if $($(m)-objs),$(m)))
-host-progs-multi-objs := $(foreach m,$(host-progs-multi),$($(m)-objs))
-
-# Add subdir path
-
-EXTRA_TARGETS := $(addprefix $(obj)/,$(EXTRA_TARGETS))
-obj-y := $(addprefix $(obj)/,$(obj-y))
-obj-m := $(addprefix $(obj)/,$(obj-m))
-export-objs := $(addprefix $(obj)/,$(export-objs))
-subdir-obj-y := $(addprefix $(obj)/,$(subdir-obj-y))
-real-objs-y := $(addprefix $(obj)/,$(real-objs-y))
-real-objs-m := $(addprefix $(obj)/,$(real-objs-m))
-multi-used-y := $(addprefix $(obj)/,$(multi-used-y))
-multi-used-m := $(addprefix $(obj)/,$(multi-used-m))
-multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y))
-multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m))
-subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
-subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
-clean-files := $(addprefix $(obj)/,$(clean-files))
-host-progs := $(addprefix $(obj)/,$(host-progs))
-host-progs-single := $(addprefix $(obj)/,$(host-progs-single))
-host-progs-multi := $(addprefix $(obj)/,$(host-progs-multi))
-host-progs-multi-objs := $(addprefix $(obj)/,$(host-progs-multi-objs))
-
-# The temporary file to save gcc -MD generated dependencies must not
-# contain a comma
-depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
-
-# We're called for one of four purposes:
-# o subdirclean: Delete intermidiate files in the current directory
-# o fastdep: build module version files (.ver) for $(export-objs) in
-# the current directory
-# o modules_install: install the modules in the current directory
-# o build: When no target is given, first_rule is the default and
-# will build the built-in and modular objects in this dir
-# (or a subset thereof, depending on $(KBUILD_MODULES),$(KBUILD_BUILTIN)
-# When targets are given directly (like foo.o), we just build these
-# targets (That happens when someone does make some/dir/foo.[ois])
-
-ifeq ($(MAKECMDGOALS),subdirclean)
-
-__clean-files := $(wildcard $(EXTRA_TARGETS) $(host-progs) $(clean-files))
-
-subdirclean: $(subdir-ymn)
-ifneq ($(strip $(__clean-files) $(clean-rule)),)
- rm -f $(__clean-files)
- $(clean-rule)
-else
- @:
-endif
-
-else
-ifeq ($(MAKECMDGOALS),fastdep)
-
-# ===========================================================================
-# Module versions
-# ===========================================================================
-
-ifeq ($(strip $(export-objs)),)
-
-# If we don't export any symbols in this dir, just descend
-# ---------------------------------------------------------------------------
-
-fastdep: $(subdir-ym)
- @:
-
-else
-
-# This sets version suffixes on exported symbols
-# ---------------------------------------------------------------------------
-
-MODVERDIR := include/linux/modules
-
-#
-# 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
-
-# Don't include modversions.h, we're just about to generate it here.
-
-CFLAGS_MODULE := $(filter-out -include linux/modversions.h,$(CFLAGS_MODULE))
-
-$(addprefix $(MODVERDIR)/,$(real-objs-y:.o=.ver)): modkern_cflags := $(CFLAGS_KERNEL)
-$(addprefix $(MODVERDIR)/,$(real-objs-m:.o=.ver)): modkern_cflags := $(CFLAGS_MODULE)
-$(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)): export_flags := -D__GENKSYMS__
-
-c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
- $(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
- -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
- $(export_flags)
-
-# Our objects only depend on modversions.h, not on the individual .ver
-# files (fix-dep filters them), so touch modversions.h if any of the .ver
-# files changes
-
-quiet_cmd_cc_ver_c = MKVER include/linux/modules/$*.ver
-cmd_cc_ver_c = $(CPP) $(c_flags) $< | $(GENKSYMS) $(genksyms_smp_prefix) \
- -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
-
-# Okay, let's explain what's happening in rule_make_cc_ver_c:
-# o echo the command
-# o execute the command
-# o If the $(CPP) fails, we won't notice because it's output is piped
-# to $(GENKSYMS) which does not fail. We recognize this case by
-# looking if the generated $(depfile) exists, though.
-# o If the .ver file changed, touch modversions.h, which is our maker
-# of any changed .ver files.
-# o Move command line and deps into their normal .*.cmd place.
-
-define rule_cc_ver_c
- $(if $($(quiet)cmd_cc_ver_c),echo ' $($(quiet)cmd_cc_ver_c)';) \
- $(cmd_cc_ver_c); \
- if [ ! -r $(depfile) ]; then exit 1; fi; \
- scripts/fixdep $(depfile) $@ '$(cmd_cc_ver_c)' > $(@D)/.$(@F).tmp; \
- rm -f $(depfile); \
- if [ ! -r $@ ] || cmp -s $@ $@.tmp; then \
- touch include/linux/modversions.h; \
- fi; \
- mv -f $@.tmp $@
- mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
-endef
-
-$(MODVERDIR)/%.ver: %.c FORCE
- @$(call if_changed_rule,cc_ver_c)
-
-targets := $(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver))
-
-fastdep: $(targets) $(subdir-ym)
- @mkdir -p $(dir $(addprefix .tmp_export-objs/modules/,$(export-objs:.o=.ver)))
- @touch $(addprefix .tmp_export-objs/modules/,$(export-objs:.o=.ver))
-
-endif # export-objs
-
-else # ! fastdep
-ifeq ($(MAKECMDGOALS),modules_install)
-
-# ==========================================================================
-# Installing modules
-# ==========================================================================
-
-quiet_cmd_modules_install = INSTALL $(obj-m)
-cmd_modules_install = mkdir -p $(MODLIB)/kernel/$(obj); \
- cp $(obj-m) $(MODLIB)/kernel/$(obj)
-
-.PHONY: modules_install
-
-modules_install: $(subdir-ym)
-ifneq ($(obj-m),)
- $(call cmd,modules_install)
-else
- @:
-endif
-
-else # ! modules_install
-
-# ==========================================================================
-# Building
-# ==========================================================================
-
-# If a Makefile does not define a L_TARGET, link an object called "built-in.o"
-
-ifdef L_TARGET
-L_TARGET := $(obj)/$(L_TARGET)
-else
-O_TARGET := $(obj)/built-in.o
-endif
-
-first_rule: $(if $(KBUILD_BUILTIN),$(O_TARGET) $(L_TARGET) $(EXTRA_TARGETS)) \
- $(if $(KBUILD_MODULES),$(obj-m)) \
- $(subdir-ym)
- @:
-
-# Compile C sources (.c)
-# ---------------------------------------------------------------------------
-
-# Default is built-in, unless we know otherwise
-modkern_cflags := $(CFLAGS_KERNEL)
-
-$(real-objs-m) : modkern_cflags := $(CFLAGS_MODULE)
-$(real-objs-m:.o=.i) : modkern_cflags := $(CFLAGS_MODULE)
-$(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
-
-$(export-objs) : export_flags := $(EXPORT_FLAGS)
-$(export-objs:.o=.i) : export_flags := $(EXPORT_FLAGS)
-$(export-objs:.o=.s) : export_flags := $(EXPORT_FLAGS)
-$(export-objs:.o=.lst): export_flags := $(EXPORT_FLAGS)
-
-c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
- $(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
- -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
- $(export_flags)
-
-quiet_cmd_cc_s_c = CC $(echo_target)
-cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
-
-%.s: %.c FORCE
- $(call if_changed_dep,cc_s_c)
-
-quiet_cmd_cc_i_c = CPP $(echo_target)
-cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $<
-
-%.i: %.c FORCE
- $(call if_changed_dep,cc_i_c)
-
-quiet_cmd_cc_o_c = CC $(echo_target)
-cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
-
-%.o: %.c FORCE
- $(call if_changed_dep,cc_o_c)
-
-quiet_cmd_cc_lst_c = MKLST $(echo_target)
-cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && sh scripts/makelst $*.o System.map $(OBJDUMP) > $@
-
-%.lst: %.c FORCE
- $(call if_changed_dep,cc_lst_c)
-
-# Compile assembler sources (.S)
-# ---------------------------------------------------------------------------
-
-modkern_aflags := $(AFLAGS_KERNEL)
-
-$(real-objs-m) : modkern_aflags := $(AFLAGS_MODULE)
-$(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
-
-a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(NOSTDINC_FLAGS) \
- $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
-
-quiet_cmd_as_s_S = CPP $(echo_target)
-cmd_as_s_S = $(CPP) $(a_flags) -o $@ $<
-
-%.s: %.S FORCE
- $(call if_changed_dep,as_s_S)
-
-quiet_cmd_as_o_S = AS $(echo_target)
-cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
-
-%.o: %.S FORCE
- $(call if_changed_dep,as_o_S)
-
-targets += $(real-objs-y) $(real-objs-m) $(EXTRA_TARGETS) $(MAKECMDGOALS)
-
-# Build the compiled-in targets
-# ---------------------------------------------------------------------------
-
-# To build objects in subdirs, we need to descend into the directories
-$(sort $(subdir-obj-y)): $(subdir-ym) ;
-
-#
-# Rule to compile a set of .o files into one .o file
-#
-ifdef O_TARGET
-quiet_cmd_link_o_target = LD $(echo_target)
-# If the list of objects to link is empty, just create an empty O_TARGET
-cmd_link_o_target = $(if $(strip $(obj-y)),\
- $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(obj-y), $^),\
- rm -f $@; $(AR) rcs $@)
-
-$(O_TARGET): $(obj-y) FORCE
- $(call if_changed,link_o_target)
-
-targets += $(O_TARGET)
-endif # O_TARGET
-
-#
-# Rule to compile a set of .o files into one .a file
-#
-ifdef L_TARGET
-quiet_cmd_link_l_target = AR $(echo_target)
-cmd_link_l_target = rm -f $@; $(AR) $(EXTRA_ARFLAGS) rcs $@ $(obj-y)
-
-$(L_TARGET): $(obj-y) FORCE
- $(call if_changed,link_l_target)
-
-targets += $(L_TARGET)
-endif
-
-#
-# Rule to link composite objects
-#
-
-quiet_cmd_link_multi = LD $(echo_target)
-cmd_link_multi = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.o=-objs)))),$^)
-
-# We would rather have a list of rules like
-# foo.o: $(foo-objs)
-# but that's not so easy, so we rather make all composite objects depend
-# on the set of all their parts
-$(multi-used-y) : %.o: $(multi-objs-y) FORCE
- $(call if_changed,link_multi)
-
-$(multi-used-m) : %.o: $(multi-objs-m) FORCE
- $(call if_changed,link_multi)
-
-targets += $(multi-used-y) $(multi-used-m)
-
-# Compile programs on the host
-# ===========================================================================
-
-quiet_cmd_host_cc__c = HOSTCC $(echo_target)
-cmd_host_cc__c = $(HOSTCC) -Wp,-MD,$(depfile) \
- $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
- $(HOST_LOADLIBES) -o $@ $<
-
-$(host-progs-single): %: %.c FORCE
- $(call if_changed_dep,host_cc__c)
-
-quiet_cmd_host_cc_o_c = HOSTCC $(echo_target)
-cmd_host_cc_o_c = $(HOSTCC) -Wp,-MD,$(depfile) \
- $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $<
-
-$(host-progs-multi-objs): %.o: %.c FORCE
- $(call if_changed_dep,host_cc_o_c)
-
-quiet_cmd_host_cc__o = HOSTLD $(echo_target)
-cmd_host_cc__o = $(HOSTCC) $(HOSTLDFLAGS) -o $@ $(addprefix $(obj)/,$($(subst $(obj)/,,$@)-objs)) \
- $(HOST_LOADLIBES)
-
-$(host-progs-multi): %: $(host-progs-multi-objs) FORCE
- $(call if_changed,host_cc__o)
-
-targets += $(host-progs-single) $(host-progs-multi-objs) $(host-progs-multi)
-
-endif # ! subdirclean
-endif # ! modules_install
-endif # ! fastdep
-
-# Shipped files
-# ===========================================================================
-
-quiet_cmd_shipped = SHIPPED $(echo_target)
-cmd_shipped = cat $< > $@
-
-%:: %_shipped
- $(call cmd,shipped)
-
-# Commands useful for building a boot image
-# ===========================================================================
-#
-# Use as following:
-#
-# target: source(s) FORCE
-# $(if_changed,ld/objcopy/gzip)
-#
-# and add target to EXTRA_TARGETS so that we know we have to
-# read in the saved command line
-
-# Linking
-# ---------------------------------------------------------------------------
-
-quiet_cmd_ld = LD $(echo_target)
-cmd_ld = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_$(@F)) \
- $(filter-out FORCE,$^) -o $@
-
-# Objcopy
-# ---------------------------------------------------------------------------
-
-quiet_cmd_objcopy = OBJCOPY $(echo_target)
-cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
-
-# Gzip
-# ---------------------------------------------------------------------------
-
-quiet_cmd_gzip = GZIP $(echo_target)
-cmd_gzip = gzip -f -9 < $< > $@
-
-# ===========================================================================
-# Generic stuff
-# ===========================================================================
-
-# Descending
-# ---------------------------------------------------------------------------
-
-.PHONY: $(subdir-ymn)
-
-$(subdir-ymn):
- +@$(call descend,$@,$(MAKECMDGOALS))
-
-# Add FORCE to the prequisites of a target to force it to be always rebuilt.
-# ---------------------------------------------------------------------------
-
-.PHONY: FORCE
-
-FORCE:
-
-#
-# 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
-#
-
-# ---------------------------------------------------------------------------
-# Check if command line has changed
-
-# Usage:
-# normally one uses rules like
-#
-# %.o: %.c
-# <command line>
-#
-# However, these only rebuild the target when the source has changed,
-# but not when e.g. the command or the flags on the command line changed.
-#
-# This extension allows to do the following:
-#
-# command = <command line>
-#
-# %.o: %.c dummy
-# $(call if_changed,command)
-#
-# which will make sure to rebuild the target when either its prerequisites
-# change or the command line changes
-#
-# The magic works as follows:
-# The addition of dummy to the dependencies causes the rule for rebuilding
-# to be always executed. However, the if_changed function will generate
-# an empty command when
-# o none of the prequesites changed (i.e $? is empty)
-# o the command line did not change (we compare the old command line,
-# which is saved in .<target>.o, to the current command line using
-# the two filter-out commands)
-
-# Read all saved command lines and dependencies for the $(targets) we
-# may be building above, using $(if_changed{,_dep}). As an
-# optimization, we don't need to read them if the target does not
-# exist, we will rebuild anyway in that case.
-
-targets := $(wildcard $(sort $(targets)))
-cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
-
-ifneq ($(cmd_files),)
- include $(cmd_files)
-endif
-
-# function to only execute the passed command if necessary
-
-if_changed = $(if $(strip $? \
- $(filter-out $(cmd_$(1)),$(cmd_$@))\
- $(filter-out $(cmd_$@),$(cmd_$(1)))),\
- @set -e; \
- $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
- $(cmd_$(1)); \
- echo 'cmd_$@ := $(cmd_$(1))' > $(@D)/.$(@F).cmd)
-
-
-# execute the command and also postprocess generated .d dependencies
-# file
-
-if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
- $(filter-out $(cmd_$(1)),$(cmd_$@))\
- $(filter-out $(cmd_$@),$(cmd_$(1)))),\
- @set -e; \
- $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
- $(cmd_$(1)); \
- scripts/fixdep $(depfile) $@ '$(cmd_$(1))' > $(@D)/.$(@F).tmp; \
- rm -f $(depfile); \
- mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
-
-# Usage: $(call if_changed_rule,foo)
-# will check if $(cmd_foo) changed, or any of the prequisites changed,
-# and if so will execute $(rule_foo)
-
-if_changed_rule = $(if $(strip $? \
- $(filter-out $(cmd_$(1)),$(cmd_$@))\
- $(filter-out $(cmd_$@),$(cmd_$(1)))),\
- @set -e; \
- mkdir -p $(dir $@); \
- $(rule_$(1)))
-
-# If quiet is set, only print short version of command
-
-cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
-
-# do_cmd is a shorthand used to support both compressed, verbose
-# and silent output in a single line.
-# Compared to cmd described avobe, do_cmd does no rely on any variables
-# previously assigned a value.
-#
-# Usage $(call do_cmd,CMD $@,cmd_to_execute bla bla)
-# Example:
-# $(call do_cmd,CP $@,cp -b $< $@)
-# make -s => nothing will be printed
-# make KBUILD_VERBOSE=1 => cp -b path/to/src.file path/to/dest.file
-# make KBUILD_VERBOSE=0 => CP path/to/dest.file
-define do_cmd
- @$(if $(filter quiet_,$(quiet)), echo ' $(1)' &&,
- $(if $(filter silent_,$(quiet)),,
- echo "$(2)" &&)) \
- $(2)
-endef
-
-# $(call descend,<dir>,<target>)
-# Recursively call a sub-make in <dir> with target <target>
-
-ifeq ($(KBUILD_VERBOSE),1)
-descend = echo '$(MAKE) -f $(1)/Makefile $(2)';
-endif
-descend += $(MAKE) -f $(1)/Makefile obj=$(1) $(2)
-
-endif
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index f23a066d98d8..517d27f46bb3 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -88,6 +88,6 @@ install: vmlinux
+@$(call makeboot,BOOTIMAGE=$(BOOTIMAGE) install)
archclean:
- $(MAKE) -rR -f scripts/Makefile.clean obj=arch/i386/boot
+ @$(MAKE) -f scripts/Makefile.clean obj=arch/i386/boot
archmrproper:
diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile
index b06bab8ccd43..3e5ad77e1d33 100644
--- a/arch/i386/boot/Makefile
+++ b/arch/i386/boot/Makefile
@@ -46,7 +46,7 @@ $(obj)/bzImage: IMAGE_OFFSET := 0x100000
$(obj)/bzImage: EXTRA_AFLAGS := -traditional $(SVGA_MODE) $(RAMDISK) -D__BIG_KERNEL__
$(obj)/bzImage: BUILDFLAGS := -b
-quiet_cmd_image = BUILD $(echo_target)
+quiet_cmd_image = BUILD $@
cmd_image = $(obj)/tools/build $(BUILDFLAGS) $(obj)/bootsect $(obj)/setup \
$(obj)/vmlinux.bin $(ROOT_DEV) > $@
diff --git a/arch/x86_64/boot/Makefile b/arch/x86_64/boot/Makefile
index da4f08b2fa7a..5191843726ff 100644
--- a/arch/x86_64/boot/Makefile
+++ b/arch/x86_64/boot/Makefile
@@ -46,7 +46,7 @@ $(obj)/bzImage: IMAGE_OFFSET := 0x100000
$(obj)/bzImage: EXTRA_AFLAGS := -traditional $(SVGA_MODE) $(RAMDISK) -D__BIG_KERNEL__
$(obj)/bzImage: BUILDFLAGS := -b
-quiet_cmd_image = BUILD $(echo_target)
+quiet_cmd_image = BUILD $@
cmd_image = $(obj)/tools/build $(BUILDFLAGS) $(obj)/bootsect $(obj)/setup \
$(obj)/vmlinux.bin $(ROOT_DEV) > $@
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
index e65360cf6538..7dfa2d4850b7 100644
--- a/drivers/char/Makefile
+++ b/drivers/char/Makefile
@@ -110,7 +110,7 @@ clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c
include $(TOPDIR)/Rules.make
$(obj)/consolemap_deftbl.c: $(src)/$(FONTMAPFILE)
- $(call do_cmd,CONMK $(echo_target),$(objtree)/scripts/conmakehash $< > $@)
+ $(call do_cmd,CONMK $@,$(objtree)/scripts/conmakehash $< > $@)
$(obj)/defkeymap.o: $(obj)/defkeymap.c
diff --git a/drivers/isdn/Makefile b/drivers/isdn/Makefile
index 438d73e64e3a..fb53d7251b20 100644
--- a/drivers/isdn/Makefile
+++ b/drivers/isdn/Makefile
@@ -15,7 +15,3 @@ obj-$(CONFIG_ISDN_DRV_ACT2000) += act2000/
obj-$(CONFIG_ISDN_DRV_EICON) += eicon/
obj-$(CONFIG_HYSDN) += hysdn/
obj-$(CONFIG_ISDN_DRV_TPAM) += tpam/
-
-# The global Rules.make.
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/act2000/Makefile b/drivers/isdn/act2000/Makefile
index d23b224b2530..fd749f59ee4a 100644
--- a/drivers/isdn/act2000/Makefile
+++ b/drivers/isdn/act2000/Makefile
@@ -7,5 +7,3 @@ obj-$(CONFIG_ISDN_DRV_ACT2000) += act2000.o
# Multipart objects.
act2000-objs := module.o capi.o act2000_isa.o
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/capi/Makefile b/drivers/isdn/capi/Makefile
index 4424f110bb44..8b26c2f8be9c 100644
--- a/drivers/isdn/capi/Makefile
+++ b/drivers/isdn/capi/Makefile
@@ -18,7 +18,3 @@ obj-$(CONFIG_ISDN_CAPI_CAPIFS) += capifs.o
kernelcapi-y := kcapi.o capiutil.o capilib.o
kernelcapi-$(CONFIG_PROC_FS) += kcapi_proc.o
kernelcapi-objs := $(kernelcapi-y)
-
-# The global Rules.make.
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/divert/Makefile b/drivers/isdn/divert/Makefile
index f2d234dbcd64..f45e5b51408f 100644
--- a/drivers/isdn/divert/Makefile
+++ b/drivers/isdn/divert/Makefile
@@ -7,10 +7,3 @@ obj-$(CONFIG_ISDN_DIVERSION) += dss1_divert.o
# Multipart objects.
dss1_divert-objs := isdn_divert.o divert_procfs.o divert_init.o
-
-include $(TOPDIR)/Rules.make
-
-
-
-
-
diff --git a/drivers/isdn/eicon/Makefile b/drivers/isdn/eicon/Makefile
index c4e4da7290a3..1c60bf021356 100644
--- a/drivers/isdn/eicon/Makefile
+++ b/drivers/isdn/eicon/Makefile
@@ -23,5 +23,3 @@ eicon-objs-$(CONFIG_ISDN_DRV_EICON_PCI) += common.o idi.o bri.o pri.o log.o \
linsys.o linio.o
eicon-objs += $(eicon-objs-y)
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/hardware/Makefile b/drivers/isdn/hardware/Makefile
index 9d1ebf7e4d9c..11c8a183948c 100644
--- a/drivers/isdn/hardware/Makefile
+++ b/drivers/isdn/hardware/Makefile
@@ -4,7 +4,3 @@
obj-$(CONFIG_CAPI_AVM) += avm/
obj-$(CONFIG_CAPI_EICON) += eicon/
-
-# The global Rules.make.
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/hardware/avm/Makefile b/drivers/isdn/hardware/avm/Makefile
index e5ad1692712c..316a3116a120 100644
--- a/drivers/isdn/hardware/avm/Makefile
+++ b/drivers/isdn/hardware/avm/Makefile
@@ -13,7 +13,3 @@ obj-$(CONFIG_ISDN_DRV_AVMB1_AVM_CS) += avm_cs.o
obj-$(CONFIG_ISDN_DRV_AVMB1_T1ISA) += t1isa.o b1.o
obj-$(CONFIG_ISDN_DRV_AVMB1_T1PCI) += t1pci.o b1.o b1dma.o
obj-$(CONFIG_ISDN_DRV_AVMB1_C4) += c4.o b1.o
-
-# The global Rules.make.
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/hardware/eicon/Makefile b/drivers/isdn/hardware/eicon/Makefile
index 4b953cd2e033..67ded00b5eca 100644
--- a/drivers/isdn/hardware/eicon/Makefile
+++ b/drivers/isdn/hardware/eicon/Makefile
@@ -26,6 +26,3 @@ obj-$(CONFIG_ISDN_DIVAS) += divadidd.o divas.o
obj-$(CONFIG_ISDN_DIVAS_MAINT) += diva_mnt.o
obj-$(CONFIG_ISDN_DIVAS_USERIDI) += diva_idi.o
obj-$(CONFIG_ISDN_DIVAS_DIVACAPI) += divacapi.o
-
-include $(TOPDIR)/Rules.make
-
diff --git a/drivers/isdn/hisax/Makefile b/drivers/isdn/hisax/Makefile
index 9b0560bcf5e5..0264c628e242 100644
--- a/drivers/isdn/hisax/Makefile
+++ b/drivers/isdn/hisax/Makefile
@@ -65,5 +65,3 @@ hisax-objs += $(hisax-objs-y)
CERT := $(shell cd $(src); md5sum -c md5sums.asc > /dev/null 2> /dev/null ;echo $$?)
CFLAGS_cert.o := -DCERTIFICATION=$(CERT)
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/hysdn/Makefile b/drivers/isdn/hysdn/Makefile
index a0a2bd3b16e7..2db847e67285 100644
--- a/drivers/isdn/hysdn/Makefile
+++ b/drivers/isdn/hysdn/Makefile
@@ -14,5 +14,3 @@ hysdn-objs := hysdn_procconf.o hysdn_proclog.o boardergo.o hysdn_boot.o \
hysdn-objs-$(CONFIG_HYSDN_CAPI) += hycapi.o
hysdn-objs += $(hysdn-objs-y)
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/i4l/Makefile b/drivers/isdn/i4l/Makefile
index 58c4e6d3ed35..3bf0d170754f 100644
--- a/drivers/isdn/i4l/Makefile
+++ b/drivers/isdn/i4l/Makefile
@@ -25,5 +25,3 @@ isdn-objs-$(CONFIG_ISDN_AUDIO) += isdn_audio.o
isdn-objs-$(CONFIG_ISDN_TTY_FAX) += isdn_ttyfax.o
isdn-objs += $(isdn-objs-y)
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/icn/Makefile b/drivers/isdn/icn/Makefile
index 66b2487b72b8..d9b476fcf384 100644
--- a/drivers/isdn/icn/Makefile
+++ b/drivers/isdn/icn/Makefile
@@ -3,5 +3,3 @@
# Each configuration option enables a list of files.
obj-$(CONFIG_ISDN_DRV_ICN) += icn.o
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/isdnloop/Makefile b/drivers/isdn/isdnloop/Makefile
index b532b4907de1..7e60c21b9e69 100644
--- a/drivers/isdn/isdnloop/Makefile
+++ b/drivers/isdn/isdnloop/Makefile
@@ -5,6 +5,3 @@
# Each configuration option enables a list of files.
obj-$(CONFIG_ISDN_DRV_LOOP) += isdnloop.o
-
-include $(TOPDIR)/Rules.make
-
diff --git a/drivers/isdn/pcbit/Makefile b/drivers/isdn/pcbit/Makefile
index 0d85b0b92465..4646c1491ff3 100644
--- a/drivers/isdn/pcbit/Makefile
+++ b/drivers/isdn/pcbit/Makefile
@@ -7,5 +7,3 @@ obj-$(CONFIG_ISDN_DRV_PCBIT) += pcbit.o
# Multipart objects.
pcbit-objs := module.o edss1.o drv.o layer2.o capi.o callbacks.o
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/sc/Makefile b/drivers/isdn/sc/Makefile
index ba6f1e641283..5d819a743724 100644
--- a/drivers/isdn/sc/Makefile
+++ b/drivers/isdn/sc/Makefile
@@ -8,5 +8,3 @@ obj-$(CONFIG_ISDN_DRV_SC) += sc.o
sc-objs := shmem.o init.o debug.o packet.o command.o event.o \
ioctl.o interrupt.o message.o timer.o
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/isdn/tpam/Makefile b/drivers/isdn/tpam/Makefile
index e416221a25c8..1ae6c5093141 100644
--- a/drivers/isdn/tpam/Makefile
+++ b/drivers/isdn/tpam/Makefile
@@ -8,5 +8,3 @@ obj-$(CONFIG_ISDN_DRV_TPAM) += tpam.o
tpam-objs := tpam_main.o tpam_nco.o tpam_memory.o tpam_commands.o \
tpam_queues.o tpam_hdlc.o tpam_crcpc.o
-
-include $(TOPDIR)/Rules.make
diff --git a/drivers/scsi/aic7xxx/Makefile b/drivers/scsi/aic7xxx/Makefile
index ea95d8a13309..56b2736a6b9f 100644
--- a/drivers/scsi/aic7xxx/Makefile
+++ b/drivers/scsi/aic7xxx/Makefile
@@ -24,8 +24,7 @@ endif
clean-files := aic7xxx_seq.h aic7xxx_reg.h
# Command to be executed upon make clean
-# Note: Assignment without ':' to force late evaluation of $(src)
-clean-rule = @$(MAKE) -C $(src)/aicasm clean
+clean-rule := $(MAKE) -C $(src)/aicasm clean
include $(TOPDIR)/Rules.make
@@ -39,7 +38,7 @@ ifeq ($(CONFIG_AIC7XXX_BUILD_FIRMWARE),y)
$(obj)/aic7xxx_seq.h: $(src)/aic7xxx.seq $(src)/aic7xxx.reg \
$(obj)/aicasm/aicasm
- $(obj)/aicasm/aicasm -I. -r $(obj)/aic7xxx_reg.h \
+ $(obj)/aicasm/aicasm -I$(obj) -r $(obj)/aic7xxx_reg.h \
-o $(obj)/aic7xxx_seq.h $(src)/aic7xxx.seq
$(obj)/aic7xxx_reg.h: $(obj)/aix7xxx_seq.h
diff --git a/init/Makefile b/init/Makefile
index 60f06f6ccb81..e19137ccd04d 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -11,13 +11,13 @@ include $(TOPDIR)/Rules.make
# dependencies on generated files need to be listed explicitly
-$(obj)/version.o: $(obj)/../include/linux/compile.h
+$(obj)/version.o: include/linux/compile.h
# compile.h changes depending on hostname, generation number, etc,
# so we regenerate it always.
# mkcompile_h will make sure to only update the
# actual file if its content has changed.
-$(obj)/../include/linux/compile.h: FORCE
- @echo -n ' Generating $(echo_target)'
- @sh $(srctree)/scripts/mkcompile_h $@ "$(ARCH)" "$(CONFIG_SMP)" "$(CC) $(CFLAGS)"
+include/linux/compile.h: FORCE
+ @echo -n ' Generating $@'
+ @sh $(srctree)/scripts/mkcompile_h $@ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CC) $(CFLAGS)"
diff --git a/net/appletalk/Makefile b/net/appletalk/Makefile
index 0f8309f9d5a6..997f49b4f03b 100644
--- a/net/appletalk/Makefile
+++ b/net/appletalk/Makefile
@@ -8,7 +8,6 @@ obj-$(CONFIG_ATALK) += appletalk.o
appletalk-y := aarp.o ddp.o atalk_proc.o
appletalk-$(CONFIG_SYSCTL) += sysctl_net_atalk.o
-appletalk-objs := $(appletalk-y)
include $(TOPDIR)/Rules.make
diff --git a/net/ax25/Makefile b/net/ax25/Makefile
index 8233831615c0..4117987a132a 100644
--- a/net/ax25/Makefile
+++ b/net/ax25/Makefile
@@ -11,7 +11,6 @@ ax25-y := ax25_addr.o ax25_dev.o ax25_iface.o ax25_in.o ax25_ip.o ax25_out.o \
ax25_subr.o ax25_timer.o ax25_uid.o af_ax25.o
ax25-$(CONFIG_AX25_DAMA_SLAVE) += ax25_ds_in.o ax25_ds_subr.o ax25_ds_timer.o
ax25-$(CONFIG_SYSCTL) += sysctl_net_ax25.o
-ax25-objs := $(ax25-y)
include $(TOPDIR)/Rules.make
diff --git a/net/bluetooth/rfcomm/Makefile b/net/bluetooth/rfcomm/Makefile
index 9cae42fee3d6..fad3b0c5066d 100644
--- a/net/bluetooth/rfcomm/Makefile
+++ b/net/bluetooth/rfcomm/Makefile
@@ -4,8 +4,7 @@
obj-$(CONFIG_BT_RFCOMM) += rfcomm.o
-rfcomm-y := core.o sock.o crc.o
+rfcomm-y := core.o sock.o crc.o
rfcomm-$(CONFIG_BT_RFCOMM_TTY) += tty.o
-rfcomm-objs := $(rfcomm-y)
include $(TOPDIR)/Rules.make
diff --git a/net/decnet/Makefile b/net/decnet/Makefile
index 74a8bae054e7..f08bc37384d9 100644
--- a/net/decnet/Makefile
+++ b/net/decnet/Makefile
@@ -5,7 +5,6 @@ decnet-y := af_decnet.o dn_nsp_in.o dn_nsp_out.o dn_route.o dn_dev.o dn_neigh.o
decnet-$(CONFIG_DECNET_ROUTER) += dn_fib.o dn_rules.o dn_table.o
decnet-$(CONFIG_DECNET_FW) += dn_fw.o
decnet-y += sysctl_net_decnet.o
-decnet-objs := $(decnet-y)
include $(TOPDIR)/Rules.make
diff --git a/net/ipx/Makefile b/net/ipx/Makefile
index e17fffc815d8..95d20a027109 100644
--- a/net/ipx/Makefile
+++ b/net/ipx/Makefile
@@ -6,6 +6,5 @@ obj-$(CONFIG_IPX) += ipx.o
ipx-y := af_ipx.o ipx_proc.o
ipx-$(CONFIG_SYSCTL) += sysctl_net_ipx.o
-ipx-objs := $(ipx-y)
include $(TOPDIR)/Rules.make
diff --git a/net/irda/Makefile b/net/irda/Makefile
index 380ae32c8eab..eb5561eec5e2 100644
--- a/net/irda/Makefile
+++ b/net/irda/Makefile
@@ -15,6 +15,5 @@ irda-y := iriap.o iriap_event.o irlmp.o irlmp_event.o irlmp_frame.o \
discovery.o parameters.o irsyms.o
irda-$(CONFIG_PROC_FS) += irproc.o
irda-$(CONFIG_SYSCTL) += irsysctl.o
-irda-objs := $(irda-y)
include $(TOPDIR)/Rules.make
diff --git a/net/llc/Makefile b/net/llc/Makefile
index 5c9a53fe6988..b2fde6ef561e 100644
--- a/net/llc/Makefile
+++ b/net/llc/Makefile
@@ -18,7 +18,6 @@ llc-y := llc_if.o llc_c_ev.o llc_c_ac.o llc_mac.o llc_sap.o llc_s_st.o \
llc_main.o llc_s_ac.o llc_conn.o llc_c_st.o llc_stat.o llc_actn.o \
llc_s_ev.o llc_evnt.o llc_pdu.o llc_proc.o
llc-$(CONFIG_LLC_UI) += af_llc.o
-llc-objs := $(llc-y)
# Objects that export symbols.
export-objs := llc_if.o
diff --git a/net/netrom/Makefile b/net/netrom/Makefile
index 1992013851b5..6f5c9ad566d6 100644
--- a/net/netrom/Makefile
+++ b/net/netrom/Makefile
@@ -7,7 +7,6 @@ obj-$(CONFIG_NETROM) += netrom.o
netrom-y := af_netrom.o nr_dev.o nr_in.o nr_loopback.o \
nr_out.o nr_route.o nr_subr.o nr_timer.o
netrom-$(CONFIG_SYSCTL) += sysctl_net_netrom.o
-netrom-objs := $(netrom-y)
include $(TOPDIR)/Rules.make
diff --git a/net/rose/Makefile b/net/rose/Makefile
index cc9688cd6f39..4e1d25f93144 100644
--- a/net/rose/Makefile
+++ b/net/rose/Makefile
@@ -7,7 +7,6 @@ obj-$(CONFIG_ROSE) += rose.o
rose-y := af_rose.o rose_dev.o rose_in.o rose_link.o rose_loopback.o \
rose_out.o rose_route.o rose_subr.o rose_timer.o
rose-$(CONFIG_SYSCTL) += sysctl_net_rose.o
-rose-objs := $(rose-y)
include $(TOPDIR)/Rules.make
diff --git a/net/sctp/Makefile b/net/sctp/Makefile
index 3e0bb4c05287..602cebb0361f 100644
--- a/net/sctp/Makefile
+++ b/net/sctp/Makefile
@@ -23,6 +23,4 @@ sctp-$(CONFIG_SYSCTL) += sysctl.o
sctp-$(subst m,y,$(CONFIG_IPV6)) += ipv6.o
-sctp-objs := $(sctp-y)
-
include $(TOPDIR)/Rules.make
diff --git a/net/sunrpc/Makefile b/net/sunrpc/Makefile
index 33275b9a78ad..6070ace3b94c 100644
--- a/net/sunrpc/Makefile
+++ b/net/sunrpc/Makefile
@@ -13,6 +13,5 @@ sunrpc-y := clnt.o xprt.o sched.o \
sunrpc_syms.o cache.o
sunrpc-$(CONFIG_PROC_FS) += stats.o
sunrpc-$(CONFIG_SYSCTL) += sysctl.o
-sunrpc-objs := $(sunrpc-y)
include $(TOPDIR)/Rules.make
diff --git a/net/unix/Makefile b/net/unix/Makefile
index 4c8e36185709..b590913e9025 100644
--- a/net/unix/Makefile
+++ b/net/unix/Makefile
@@ -6,7 +6,6 @@ obj-$(CONFIG_UNIX) += unix.o
unix-y := af_unix.o garbage.o
unix-$(CONFIG_SYSCTL) += sysctl_net_unix.o
-unix-objs := $(unix-y)
include $(TOPDIR)/Rules.make
diff --git a/net/x25/Makefile b/net/x25/Makefile
index eb24260baafc..bdc6c4825951 100644
--- a/net/x25/Makefile
+++ b/net/x25/Makefile
@@ -8,7 +8,6 @@ x25-y := af_x25.o x25_dev.o x25_facilities.o x25_in.o \
x25_link.o x25_out.o x25_route.o x25_subr.o \
x25_timer.o x25_proc.o
x25-$(CONFIG_SYSCTL) += sysctl_net_x25.o
-x25-objs := $(x25-y)
include $(TOPDIR)/Rules.make
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
new file mode 100644
index 000000000000..cd75f49b58f9
--- /dev/null
+++ b/scripts/Makefile.build
@@ -0,0 +1,223 @@
+# ==========================================================================
+# Building
+# ==========================================================================
+
+src := $(obj)
+
+.PHONY: __build
+__build:
+
+include .config
+
+include $(obj)/Makefile
+
+include scripts/Makefile.lib
+
+ifdef O_TARGET
+$(error kbuild: $(obj)/Makefile - Usage of O_TARGET := $(O_TARGET) is obsolete in 2.5. Please fix!)
+endif
+
+ifdef L_TARGET
+ifneq ($(L_TARGET),lib.a)
+$(warning kbuild: $(obj)/Makefile - L_TARGET := $(L_TARGET) target shall be renamed to lib.a. Please fix!)
+endif
+endif
+
+ifdef list-multi
+$(warning kbuild: $(obj)/Makefile - list-multi := $(list-multi) is obsolete in 2.5. Please fix!)
+endif
+
+ifndef obj
+$(warning kbuild: Makefile.build is included improperly)
+endif
+
+# ===========================================================================
+
+# If a Makefile does not define a L_TARGET, link an object called "built-in.o"
+
+ifdef L_TARGET
+L_TARGET := $(obj)/$(L_TARGET)
+else
+O_TARGET := $(obj)/built-in.o
+endif
+
+__build: $(if $(KBUILD_BUILTIN),$(O_TARGET) $(L_TARGET) $(EXTRA_TARGETS)) \
+ $(if $(KBUILD_MODULES),$(obj-m)) \
+ $(subdir-ym)
+ @:
+
+# Compile C sources (.c)
+# ---------------------------------------------------------------------------
+
+# Default is built-in, unless we know otherwise
+modkern_cflags := $(CFLAGS_KERNEL)
+
+$(real-objs-m) : modkern_cflags := $(CFLAGS_MODULE)
+$(real-objs-m:.o=.i) : modkern_cflags := $(CFLAGS_MODULE)
+$(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
+
+$(export-objs) : export_flags := $(EXPORT_FLAGS)
+$(export-objs:.o=.i) : export_flags := $(EXPORT_FLAGS)
+$(export-objs:.o=.s) : export_flags := $(EXPORT_FLAGS)
+$(export-objs:.o=.lst): export_flags := $(EXPORT_FLAGS)
+
+c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
+ $(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
+ -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
+ $(export_flags)
+
+quiet_cmd_cc_s_c = CC $@
+cmd_cc_s_c = $(CC) $(c_flags) -S -o $@ $<
+
+%.s: %.c FORCE
+ $(call if_changed_dep,cc_s_c)
+
+quiet_cmd_cc_i_c = CPP $@
+cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $<
+
+%.i: %.c FORCE
+ $(call if_changed_dep,cc_i_c)
+
+quiet_cmd_cc_o_c = CC $@
+cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
+
+%.o: %.c FORCE
+ $(call if_changed_dep,cc_o_c)
+
+quiet_cmd_cc_lst_c = MKLST $@
+cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && sh scripts/makelst $*.o System.map $(OBJDUMP) > $@
+
+%.lst: %.c FORCE
+ $(call if_changed_dep,cc_lst_c)
+
+# Compile assembler sources (.S)
+# ---------------------------------------------------------------------------
+
+modkern_aflags := $(AFLAGS_KERNEL)
+
+$(real-objs-m) : modkern_aflags := $(AFLAGS_MODULE)
+$(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
+
+a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(NOSTDINC_FLAGS) \
+ $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
+
+quiet_cmd_as_s_S = CPP $@
+cmd_as_s_S = $(CPP) $(a_flags) -o $@ $<
+
+%.s: %.S FORCE
+ $(call if_changed_dep,as_s_S)
+
+quiet_cmd_as_o_S = AS $@
+cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+%.o: %.S FORCE
+ $(call if_changed_dep,as_o_S)
+
+targets += $(real-objs-y) $(real-objs-m) $(EXTRA_TARGETS) $(MAKECMDGOALS)
+
+# Build the compiled-in targets
+# ---------------------------------------------------------------------------
+
+# To build objects in subdirs, we need to descend into the directories
+$(sort $(subdir-obj-y)): $(subdir-ym) ;
+
+#
+# Rule to compile a set of .o files into one .o file
+#
+ifdef O_TARGET
+quiet_cmd_link_o_target = LD $@
+# If the list of objects to link is empty, just create an empty O_TARGET
+cmd_link_o_target = $(if $(strip $(obj-y)),\
+ $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(obj-y), $^),\
+ rm -f $@; $(AR) rcs $@)
+
+$(O_TARGET): $(obj-y) FORCE
+ $(call if_changed,link_o_target)
+
+targets += $(O_TARGET)
+endif # O_TARGET
+
+#
+# Rule to compile a set of .o files into one .a file
+#
+ifdef L_TARGET
+quiet_cmd_link_l_target = AR $@
+cmd_link_l_target = rm -f $@; $(AR) $(EXTRA_ARFLAGS) rcs $@ $(obj-y)
+
+$(L_TARGET): $(obj-y) FORCE
+ $(call if_changed,link_l_target)
+
+targets += $(L_TARGET)
+endif
+
+#
+# Rule to link composite objects
+#
+
+quiet_cmd_link_multi = LD $@
+cmd_link_multi = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.o=-objs))) $($(subst $(obj)/,,$(@:.o=-y)))),$^)
+
+# We would rather have a list of rules like
+# foo.o: $(foo-objs)
+# but that's not so easy, so we rather make all composite objects depend
+# on the set of all their parts
+$(multi-used-y) : %.o: $(multi-objs-y) FORCE
+ $(call if_changed,link_multi)
+
+$(multi-used-m) : %.o: $(multi-objs-m) FORCE
+ $(call if_changed,link_multi)
+
+targets += $(multi-used-y) $(multi-used-m)
+
+# Compile programs on the host
+# ===========================================================================
+
+quiet_cmd_host_cc__c = HOSTCC $@
+cmd_host_cc__c = $(HOSTCC) -Wp,-MD,$(depfile) \
+ $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
+ $(HOST_LOADLIBES) -o $@ $<
+
+$(host-progs-single): %: %.c FORCE
+ $(call if_changed_dep,host_cc__c)
+
+quiet_cmd_host_cc_o_c = HOSTCC $@
+cmd_host_cc_o_c = $(HOSTCC) -Wp,-MD,$(depfile) \
+ $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $<
+
+$(host-progs-multi-objs): %.o: %.c FORCE
+ $(call if_changed_dep,host_cc_o_c)
+
+quiet_cmd_host_cc__o = HOSTLD $@
+cmd_host_cc__o = $(HOSTCC) $(HOSTLDFLAGS) -o $@ $(addprefix $(obj)/,$($(subst $(obj)/,,$@)-objs)) \
+ $(HOST_LOADLIBES)
+
+$(host-progs-multi): %: $(host-progs-multi-objs) FORCE
+ $(call if_changed,host_cc__o)
+
+targets += $(host-progs-single) $(host-progs-multi-objs) $(host-progs-multi)
+
+# Descending
+# ---------------------------------------------------------------------------
+
+.PHONY: $(subdir-ym)
+$(subdir-ym):
+ $(Q)$(MAKE) -f scripts/Makefile.build obj=$@
+
+# Add FORCE to the prequisites of a target to force it to be always rebuilt.
+# ---------------------------------------------------------------------------
+
+.PHONY: FORCE
+
+FORCE:
+
+# Read all saved command lines and dependencies for the $(targets) we
+# may be building above, using $(if_changed{,_dep}). As an
+# optimization, we don't need to read them if the target does not
+# exist, we will rebuild anyway in that case.
+
+targets := $(wildcard $(sort $(targets)))
+cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
+
+ifneq ($(cmd_files),)
+ include $(cmd_files)
+endif
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index d7bb2dfb88d8..e7c392fd5788 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -1,13 +1,17 @@
+# ==========================================================================
+# Cleaning up
+# ==========================================================================
src := $(obj)
-no-rules.make := 1
-
.PHONY: __clean
__clean:
include $(obj)/Makefile
+# Figure out what we need to build from the various variables
+# ==========================================================================
+
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
subdir-y += $(__subdir-y)
__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
@@ -17,26 +21,43 @@ subdir-n += $(__subdir-n)
__subdir- := $(patsubst %/,%,$(filter %/, $(obj-)))
subdir- += $(__subdir-)
+# Subdirectories we need to descend into
+
subdir-ym := $(sort $(subdir-y) $(subdir-m))
subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-))
+# Add subdir path
+
EXTRA_TARGETS := $(addprefix $(obj)/,$(EXTRA_TARGETS))
clean-files := $(addprefix $(obj)/,$(clean-files))
host-progs := $(addprefix $(obj)/,$(host-progs))
subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
+# ==========================================================================
+
__clean-files := $(wildcard $(EXTRA_TARGETS) $(host-progs) $(clean-files))
+quiet_cmd_clean = CLEAN $(obj)
+ cmd_clean = rm -f $(__clean-files); $(clean-rule)
+
__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files) $(clean-rule)),)
- rm -f $(__clean-files)
- $(clean-rule)
+ +$(call cmd,clean)
else
@:
endif
-.PHONY: $(subdir-ymn)
+# ===========================================================================
+# Generic stuff
+# ===========================================================================
+
+# Descending
+# ---------------------------------------------------------------------------
+.PHONY: $(subdir-ymn)
$(subdir-ymn):
- $(MAKE) -rR -f scripts/Makefile.clean obj=$@
+ $(Q)$(MAKE) -f scripts/Makefile.clean obj=$@
+
+# If quiet is set, only print short version of command
+cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
new file mode 100644
index 000000000000..73668ee0fbea
--- /dev/null
+++ b/scripts/Makefile.lib
@@ -0,0 +1,190 @@
+# ===========================================================================
+# kbuild: Generic definitions
+# ===========================================================================
+
+# Standard vars
+
+comma := ,
+
+# Figure out what we need to build from the various variables
+# ===========================================================================
+
+# When an object is listed to be built compiled-in and modular,
+# only build the compiled-in version
+
+obj-m := $(filter-out $(obj-y),$(obj-m))
+
+# Handle objects in subdirs
+# ---------------------------------------------------------------------------
+# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
+# and add the directory to the list of dirs to descend into: $(subdir-y)
+# o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
+# and add the directory to the list of dirs to descend into: $(subdir-m)
+
+__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
+subdir-y += $(__subdir-y)
+__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
+subdir-m += $(__subdir-m)
+obj-y := $(patsubst %/, %/built-in.o, $(obj-y))
+obj-m := $(filter-out %/, $(obj-m))
+
+# Subdirectories we need to descend into
+
+subdir-ym := $(sort $(subdir-y) $(subdir-m))
+
+# export.o is never a composite object, since $(export-objs) has a
+# fixed meaning (== objects which EXPORT_SYMBOL())
+__obj-y = $(filter-out export.o,$(obj-y))
+__obj-m = $(filter-out export.o,$(obj-m))
+
+# if $(foo-objs) exists, foo.o is a composite object
+multi-used-y := $(sort $(foreach m,$(__obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
+multi-used-m := $(sort $(foreach m,$(__obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
+
+# Build list of the parts of our composite objects, our composite
+# objects depend on those (obviously)
+multi-objs-y := $(foreach m, $(multi-used-y), $($(m:.o=-objs)) $($(m:.o=-y)))
+multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)) $($(m:.o=-y)))
+
+# $(subdir-obj-y) is the list of objects in $(obj-y) which do not live
+# in the local directory
+subdir-obj-y := $(foreach o,$(obj-y),$(if $(filter-out $(o),$(notdir $(o))),$(o)))
+
+# Replace multi-part objects by their individual parts, look at local dir only
+real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) $(EXTRA_TARGETS)
+real-objs-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
+
+# Only build module versions for files which are selected to be built
+export-objs := $(filter $(export-objs),$(real-objs-y) $(real-objs-m))
+
+host-progs-single := $(foreach m,$(host-progs),$(if $($(m)-objs),,$(m)))
+host-progs-multi := $(foreach m,$(host-progs),$(if $($(m)-objs),$(m)))
+host-progs-multi-objs := $(foreach m,$(host-progs-multi),$($(m)-objs))
+
+# Add subdir path
+
+EXTRA_TARGETS := $(addprefix $(obj)/,$(EXTRA_TARGETS))
+obj-y := $(addprefix $(obj)/,$(obj-y))
+obj-m := $(addprefix $(obj)/,$(obj-m))
+export-objs := $(addprefix $(obj)/,$(export-objs))
+subdir-obj-y := $(addprefix $(obj)/,$(subdir-obj-y))
+real-objs-y := $(addprefix $(obj)/,$(real-objs-y))
+real-objs-m := $(addprefix $(obj)/,$(real-objs-m))
+multi-used-y := $(addprefix $(obj)/,$(multi-used-y))
+multi-used-m := $(addprefix $(obj)/,$(multi-used-m))
+multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y))
+multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m))
+subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
+host-progs := $(addprefix $(obj)/,$(host-progs))
+host-progs-single := $(addprefix $(obj)/,$(host-progs-single))
+host-progs-multi := $(addprefix $(obj)/,$(host-progs-multi))
+host-progs-multi-objs := $(addprefix $(obj)/,$(host-progs-multi-objs))
+
+# The temporary file to save gcc -MD generated dependencies must not
+# contain a comma
+depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
+
+# Shipped files
+# ===========================================================================
+
+quiet_cmd_shipped = SHIPPED $@
+cmd_shipped = cat $< > $@
+
+%:: %_shipped
+ $(call cmd,shipped)
+
+# Commands useful for building a boot image
+# ===========================================================================
+#
+# Use as following:
+#
+# target: source(s) FORCE
+# $(if_changed,ld/objcopy/gzip)
+#
+# and add target to EXTRA_TARGETS so that we know we have to
+# read in the saved command line
+
+# Linking
+# ---------------------------------------------------------------------------
+
+quiet_cmd_ld = LD $@
+cmd_ld = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_$(@F)) \
+ $(filter-out FORCE,$^) -o $@
+
+# Objcopy
+# ---------------------------------------------------------------------------
+
+quiet_cmd_objcopy = OBJCOPY $@
+cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
+
+# Gzip
+# ---------------------------------------------------------------------------
+
+quiet_cmd_gzip = GZIP $@
+cmd_gzip = gzip -f -9 < $< > $@
+
+# ===========================================================================
+# Generic stuff
+# ===========================================================================
+
+# function to only execute the passed command if necessary
+
+if_changed = $(if $(strip $? \
+ $(filter-out $(cmd_$(1)),$(cmd_$@))\
+ $(filter-out $(cmd_$@),$(cmd_$(1)))),\
+ @set -e; \
+ $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
+ $(cmd_$(1)); \
+ echo 'cmd_$@ := $(cmd_$(1))' > $(@D)/.$(@F).cmd)
+
+
+# execute the command and also postprocess generated .d dependencies
+# file
+
+if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
+ $(filter-out $(cmd_$(1)),$(cmd_$@))\
+ $(filter-out $(cmd_$@),$(cmd_$(1)))),\
+ @set -e; \
+ $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';) \
+ $(cmd_$(1)); \
+ scripts/fixdep $(depfile) $@ '$(cmd_$(1))' > $(@D)/.$(@F).tmp; \
+ rm -f $(depfile); \
+ mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
+
+# Usage: $(call if_changed_rule,foo)
+# will check if $(cmd_foo) changed, or any of the prequisites changed,
+# and if so will execute $(rule_foo)
+
+if_changed_rule = $(if $(strip $? \
+ $(filter-out $(cmd_$(1)),$(cmd_$@))\
+ $(filter-out $(cmd_$@),$(cmd_$(1)))),\
+ @set -e; \
+ mkdir -p $(dir $@); \
+ $(rule_$(1)))
+
+# If quiet is set, only print short version of command
+
+cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
+
+# do_cmd is a shorthand used to support both compressed, verbose
+# and silent output in a single line.
+# Compared to cmd described avobe, do_cmd does no rely on any variables
+# previously assigned a value.
+#
+# Usage $(call do_cmd,CMD $@,cmd_to_execute bla bla)
+# Example:
+# $(call do_cmd,CP $@,cp -b $< $@)
+# make -s => nothing will be printed
+# make KBUILD_VERBOSE=1 => cp -b path/to/src.file path/to/dest.file
+# make KBUILD_VERBOSE=0 => CP path/to/dest.file
+define do_cmd
+ @$(if $(filter quiet_,$(quiet)), echo ' $(1)' &&,
+ $(if $(filter silent_,$(quiet)),,
+ echo "$(2)" &&)) \
+ $(2)
+endef
+
+# $(call descend,<dir>,<target>)
+# Recursively call a sub-make in <dir> with target <target>
+
+descend = $(Q)$(MAKE) -f scripts/Makefile.build obj=$(1) $(2)
diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
new file mode 100644
index 000000000000..626a9a95866c
--- /dev/null
+++ b/scripts/Makefile.modinst
@@ -0,0 +1,34 @@
+# ==========================================================================
+# Installing modules
+# ==========================================================================
+
+src := $(obj)
+
+.PHONY: modules_install
+modules_install:
+
+include .config
+
+include $(obj)/Makefile
+
+include scripts/Makefile.lib
+
+# ==========================================================================
+
+quiet_cmd_modules_install = INSTALL $(obj-m)
+ cmd_modules_install = mkdir -p $(MODLIB)/kernel/$(obj); \
+ cp $(obj-m) $(MODLIB)/kernel/$(obj)
+
+modules_install: $(subdir-ym)
+ifneq ($(obj-m),)
+ $(call cmd,modules_install)
+else
+ @:
+endif
+
+# Descending
+# ---------------------------------------------------------------------------
+
+.PHONY: $(subdir-ym)
+$(subdir-ym):
+ $(Q)$(MAKE) -rR -f scripts/Makefile.modinst obj=$@
diff --git a/scripts/Makefile.modver b/scripts/Makefile.modver
new file mode 100644
index 000000000000..0ee922a3aadf
--- /dev/null
+++ b/scripts/Makefile.modver
@@ -0,0 +1,123 @@
+# ===========================================================================
+# Module versions
+# ===========================================================================
+
+src := $(obj)
+
+.PHONY: modver
+modver:
+
+include .config
+
+include $(obj)/Makefile
+
+include scripts/Makefile.lib
+
+# ===========================================================================
+
+ifeq ($(strip $(export-objs)),)
+
+# If we don't export any symbols in this dir, just descend
+# ---------------------------------------------------------------------------
+
+modver: $(subdir-ym)
+ @:
+
+else
+
+# This sets version suffixes on exported symbols
+# ---------------------------------------------------------------------------
+
+MODVERDIR := include/linux/modules
+
+#
+# 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
+
+# Don't include modversions.h, we're just about to generate it here.
+
+CFLAGS_MODULE := $(filter-out -include include/linux/modversions.h,$(CFLAGS_MODULE))
+
+$(addprefix $(MODVERDIR)/,$(real-objs-y:.o=.ver)): modkern_cflags := $(CFLAGS_KERNEL)
+$(addprefix $(MODVERDIR)/,$(real-objs-m:.o=.ver)): modkern_cflags := $(CFLAGS_MODULE)
+$(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver)): export_flags := -D__GENKSYMS__
+
+c_flags = -Wp,-MD,$(depfile) $(CFLAGS) $(NOSTDINC_FLAGS) \
+ $(modkern_cflags) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) \
+ -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) \
+ $(export_flags)
+
+# Our objects only depend on modversions.h, not on the individual .ver
+# files (fix-dep filters them), so touch modversions.h if any of the .ver
+# files changes
+
+quiet_cmd_cc_ver_c = MKVER include/linux/modules/$*.ver
+cmd_cc_ver_c = $(CPP) $(c_flags) $< | $(GENKSYMS) $(genksyms_smp_prefix) \
+ -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp
+
+# Okay, let's explain what's happening in rule_make_cc_ver_c:
+# o echo the command
+# o execute the command
+# o If the $(CPP) fails, we won't notice because it's output is piped
+# to $(GENKSYMS) which does not fail. We recognize this case by
+# looking if the generated $(depfile) exists, though.
+# o If the .ver file changed, touch modversions.h, which is our marker
+# of any changed .ver files.
+# o Move command line and deps into their normal .*.cmd place.
+
+define rule_cc_ver_c
+ $(if $($(quiet)cmd_cc_ver_c),echo ' $($(quiet)cmd_cc_ver_c)';) \
+ $(cmd_cc_ver_c); \
+ if [ ! -r $(depfile) ]; then exit 1; fi; \
+ scripts/fixdep $(depfile) $@ '$(cmd_cc_ver_c)' > $(@D)/.$(@F).tmp; \
+ rm -f $(depfile); \
+ if [ ! -r $@ ] || cmp -s $@ $@.tmp; then \
+ touch include/linux/modversions.h; \
+ fi; \
+ mv -f $@.tmp $@
+ mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd
+endef
+
+targets := $(addprefix $(MODVERDIR)/,$(export-objs:.o=.ver))
+
+$(MODVERDIR)/%.ver: %.c FORCE
+ @$(call if_changed_rule,cc_ver_c)
+
+modver: $(targets) $(subdir-ym)
+ @mkdir -p $(dir $(addprefix .tmp_export-objs/modules/,$(export-objs:.o=.ver)))
+ @touch $(addprefix .tmp_export-objs/modules/,$(export-objs:.o=.ver))
+
+endif # export-objs
+
+# Descending
+# ---------------------------------------------------------------------------
+
+.PHONY: $(subdir-ym)
+$(subdir-ym):
+ $(Q)$(MAKE) -f scripts/Makefile.modver obj=$@
+
+# Add FORCE to the prequisites of a target to force it to be always rebuilt.
+# ---------------------------------------------------------------------------
+
+.PHONY: FORCE
+
+FORCE:
+
+# Read all saved command lines and dependencies for the $(targets) we
+# may be building above, using $(if_changed{,_dep}). As an
+# optimization, we don't need to read them if the target does not
+# exist, we will rebuild anyway in that case.
+
+targets := $(wildcard $(sort $(targets)))
+cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
+
+ifneq ($(cmd_files),)
+ include $(cmd_files)
+endif