mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
kbuild: change kbuild to not rely on incorrect GNU make behavior
The kbuild system takes advantage of an incorrect behavior in GNU make. Once this behavior is fixed, all files in the kernel rebuild every time, even if nothing has changed. This patch ensures kbuild works with both the incorrect and correct behaviors of GNU make. For more details on the incorrect behavior, see: http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html Changes in this patch: - Keep all targets that are to be marked .PHONY in a variable, PHONY. - Add .PHONY: $(PHONY) to mark them properly. - Remove any $(PHONY) files from the $? list when determining whether targets are up-to-date or not. Signed-off-by: Paul Smith <psmith@gnu.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
7b75b13cda
commit
4f1933620f
25 changed files with 144 additions and 75 deletions
|
@ -116,16 +116,18 @@ make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))
|
|||
# function to only execute the passed command if necessary
|
||||
# >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
|
||||
# note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
|
||||
#
|
||||
if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
|
||||
#
|
||||
if_changed = $(if $(strip $(filter-out $(PHONY),$?) \
|
||||
$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
|
||||
@set -e; \
|
||||
$(echo-cmd) $(cmd_$(1)); \
|
||||
echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
|
||||
|
||||
# execute the command and also postprocess generated .d dependencies
|
||||
# file
|
||||
if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
|
||||
$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
|
||||
if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \
|
||||
$(filter-out FORCE $(wildcard $^),$^) \
|
||||
$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
|
||||
@set -e; \
|
||||
$(echo-cmd) $(cmd_$(1)); \
|
||||
scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
|
||||
|
@ -135,6 +137,7 @@ if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
|
|||
# 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 $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
|
||||
if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \
|
||||
$(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
|
||||
@set -e; \
|
||||
$(rule_$(1)))
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
src := $(obj)
|
||||
|
||||
.PHONY: __build
|
||||
PHONY := __build
|
||||
__build:
|
||||
|
||||
# Read .config if it exist, otherwise ignore
|
||||
|
@ -308,14 +308,14 @@ targets += $(multi-used-y) $(multi-used-m)
|
|||
# Descending
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
.PHONY: $(subdir-ym)
|
||||
PHONY += $(subdir-ym)
|
||||
$(subdir-ym):
|
||||
$(Q)$(MAKE) $(build)=$@
|
||||
|
||||
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
.PHONY: FORCE
|
||||
PHONY += FORCE
|
||||
|
||||
FORCE:
|
||||
|
||||
|
@ -330,3 +330,9 @@ cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
|||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
src := $(obj)
|
||||
|
||||
.PHONY: __clean
|
||||
PHONY := __clean
|
||||
__clean:
|
||||
|
||||
# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
|
||||
|
@ -87,10 +87,16 @@ endif
|
|||
# Descending
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
.PHONY: $(subdir-ymn)
|
||||
PHONY += $(subdir-ymn)
|
||||
$(subdir-ymn):
|
||||
$(Q)$(MAKE) $(clean)=$@
|
||||
|
||||
# If quiet is set, only print short version of command
|
||||
|
||||
cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
|
||||
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Installing modules
|
||||
# ==========================================================================
|
||||
|
||||
.PHONY: __modinst
|
||||
PHONY := __modinst
|
||||
__modinst:
|
||||
|
||||
include scripts/Kbuild.include
|
||||
|
@ -12,7 +12,7 @@ include scripts/Kbuild.include
|
|||
__modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
|
||||
modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
|
||||
|
||||
.PHONY: $(modules)
|
||||
PHONY += $(modules)
|
||||
__modinst: $(modules)
|
||||
@:
|
||||
|
||||
|
@ -27,3 +27,9 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))
|
|||
|
||||
$(modules):
|
||||
$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
|
||||
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
# Step 4 is solely used to allow module versioning in external modules,
|
||||
# where the CRC of each module is retrieved from the Module.symers file.
|
||||
|
||||
.PHONY: _modpost
|
||||
PHONY := _modpost
|
||||
_modpost: __modpost
|
||||
|
||||
include .config
|
||||
|
@ -60,7 +60,7 @@ quiet_cmd_modpost = MODPOST
|
|||
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
||||
$(filter-out FORCE,$^)
|
||||
|
||||
.PHONY: __modpost
|
||||
PHONY += __modpost
|
||||
__modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE
|
||||
$(call cmd,modpost)
|
||||
|
||||
|
@ -97,7 +97,7 @@ targets += $(modules)
|
|||
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
.PHONY: FORCE
|
||||
PHONY += FORCE
|
||||
|
||||
FORCE:
|
||||
|
||||
|
@ -112,3 +112,9 @@ cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
|||
ifneq ($(cmd_files),)
|
||||
include $(cmd_files)
|
||||
endif
|
||||
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Kernel configuration targets
|
||||
# These targets are used from top-level makefile
|
||||
|
||||
.PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
|
||||
PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
|
||||
|
||||
xconfig: $(obj)/qconf
|
||||
$< arch/$(ARCH)/Kconfig
|
||||
|
@ -42,7 +42,7 @@ update-po-config: $(obj)/kxgettext
|
|||
$(Q)rm -f arch/um/Kconfig_arch
|
||||
$(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
|
||||
|
||||
.PHONY: randconfig allyesconfig allnoconfig allmodconfig defconfig
|
||||
PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
|
||||
|
||||
randconfig: $(obj)/conf
|
||||
$< -r arch/$(ARCH)/Kconfig
|
||||
|
|
|
@ -7,10 +7,10 @@ check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh
|
|||
# we really need to do so. (Do not call gcc as part of make mrproper)
|
||||
HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
|
||||
HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
|
||||
|
||||
HOST_EXTRACFLAGS += -DLOCALE
|
||||
|
||||
.PHONY: dochecklxdialog
|
||||
HOST_EXTRACFLAGS += -DLOCALE
|
||||
|
||||
PHONY += dochecklxdialog
|
||||
$(obj)/dochecklxdialog:
|
||||
$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES)
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ MKSPEC := $(srctree)/scripts/package/mkspec
|
|||
PREV := set -e; cd ..;
|
||||
|
||||
# rpm-pkg
|
||||
.PHONY: rpm-pkg rpm
|
||||
PHONY += rpm-pkg rpm
|
||||
|
||||
$(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile
|
||||
$(CONFIG_SHELL) $(MKSPEC) > $@
|
||||
|
@ -54,10 +54,10 @@ rpm-pkg rpm: $(objtree)/kernel.spec
|
|||
clean-files := $(objtree)/kernel.spec
|
||||
|
||||
# binrpm-pkg
|
||||
.PHONY: binrpm-pkg
|
||||
PHONY += binrpm-pkg
|
||||
$(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile
|
||||
$(CONFIG_SHELL) $(MKSPEC) prebuilt > $@
|
||||
|
||||
|
||||
binrpm-pkg: $(objtree)/binkernel.spec
|
||||
$(MAKE) KBUILD_SRC=
|
||||
set -e; \
|
||||
|
@ -72,7 +72,7 @@ clean-files += $(objtree)/binkernel.spec
|
|||
# Deb target
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
.PHONY: deb-pkg
|
||||
PHONY += deb-pkg
|
||||
deb-pkg:
|
||||
$(MAKE) KBUILD_SRC=
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
|
||||
|
@ -82,7 +82,7 @@ clean-dirs += $(objtree)/debian/
|
|||
|
||||
# tarball targets
|
||||
# ---------------------------------------------------------------------------
|
||||
.PHONY: tar%pkg
|
||||
PHONY += tar%pkg
|
||||
tar%pkg:
|
||||
$(MAKE) KBUILD_SRC=
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue