Commit 5bb78269 authored by Sam Ravnborg's avatar Sam Ravnborg
Browse files

kbuild: rename prepare to archprepare to fix dependency chain

When introducing the generic asm-offsets.h support the dependency
chain for the prepare targets was changed. All build scripts expecting
include/asm/asm-offsets.h to be made when using the prepare target would broke.
With the limited number of prepare targets left in arch Makefiles
the trivial solution was to introduce a new arch specific target: archprepare

The dependency chain looks like this now:

  +--> prepare0
         +--> archprepare
		+--> scripts_basic
                +--> prepare1
                       +---> prepare2
                               +--> prepare3

So prepare 3 is processed before prepare2 etc.
This guaantees that the asm symlink, version.h, scripts_basic
are all updated before archprepare is processed.

prepare0 which build the asm-offsets.h file will need the
actions performed by archprepare.

The head target is now named prepare, because users scripts will most
likely use that target, but prepare-all has been kept for compatibility.
Updated Documentation/kbuild/makefiles.txt.

Signed-off-by: default avatarSam Ravnborg <>
parent 9fe66dfd
......@@ -31,7 +31,7 @@ This document describes the Linux kernel Makefiles.
=== 6 Architecture Makefiles
--- 6.1 Set variables to tweak the build to the architecture
--- 6.2 Add prerequisites to prepare:
--- 6.2 Add prerequisites to archprepare:
--- 6.3 List directories to visit when descending
--- 6.4 Architecture specific boot images
--- 6.5 Building non-kbuild targets
......@@ -734,18 +734,18 @@ When kbuild executes the following steps are followed (roughly):
for loadable kernel modules.
--- 6.2 Add prerequisites to prepare:
--- 6.2 Add prerequisites to archprepare:
The prepare: rule is used to list prerequisites that needs to be
The archprepare: rule is used to list prerequisites that needs to be
built before starting to descend down in the subdirectories.
This is usual header files containing assembler constants.
prepare: include/asm-$(ARCH)/offsets.h
archprepare: maketools
In this example the file include/asm-$(ARCH)/offsets.h will
be built before descending down in the subdirectories.
In this example the file target maketools will be processed
before descending down in the subdirectories.
See also chapter XXX-TODO that describe how kbuild supports
generating offset header files.
......@@ -776,15 +776,20 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
# Error messages still appears in the original language
.PHONY: $(vmlinux-dirs)
$(vmlinux-dirs): prepare-all scripts
$(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@
# Things we need to do before we recursively start building the kernel
# or the modules are listed in "prepare-all".
# A multi level approach is used. prepare1 is updated first, then prepare0.
# prepare-all is the collection point for the prepare targets.
# or the modules are listed in "prepare".
# A multi level approach is used. prepareN is processed before prepareN-1.
# archprepare is used in arch Makefiles and when processed asm symlink,
# version.h and scripts_basic is processed / created.
.PHONY: prepare-all prepare prepare0 prepare1 prepare2 prepare3
# Listed in dependency order
.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3
# prepare-all is deprecated, use prepare as valid replacement
.PHONY: prepare-all
# prepare3 is used to check if we are building in a separate output directory,
# and if so do:
......@@ -813,11 +818,13 @@ ifneq ($(KBUILD_MODULES),)
$(Q)mkdir -p $(MODVERDIR)
prepare0: prepare prepare1 FORCE
archprepare: prepare1 scripts_basic
prepare0: archprepare FORCE
$(Q)$(MAKE) $(build)=.
# All the preparing..
prepare-all: prepare0
prepare prepare-all: prepare0
# Leave this as default for preprocessing, which is now
# done in arch/$(ARCH)/kernel/Makefile
......@@ -908,7 +915,7 @@ modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
# Target to prepare building external modules
.PHONY: modules_prepare
modules_prepare: prepare-all scripts
modules_prepare: prepare scripts
# Target to install modules
.PHONY: modules_install
......@@ -175,7 +175,7 @@ else
@touch $@
prepare: maketools include/asm-arm/.arch
archprepare: maketools include/asm-arm/.arch
.PHONY: maketools FORCE
maketools: include/linux/version.h FORCE
......@@ -107,7 +107,7 @@ archclean:
rm -f timage vmlinux.bin decompress.bin rescue.bin cramfs.img
rm -rf $(LD_SCRIPT).tmp
prepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch
archprepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch
# Create some links to make all tools happy
......@@ -82,7 +82,7 @@ unwcheck: vmlinux
$(Q)$(MAKE) $(clean)=$(boot)
prepare: include/asm-ia64/.offsets.h.stamp
archprepare: include/asm-ia64/.offsets.h.stamp
mkdir -p include/asm-ia64
......@@ -107,7 +107,7 @@ archclean:
# Temporary hack until we have migrated to asm-powerpc
$(Q)rm -rf arch/$(ARCH)/include
prepare: checkbin
archprepare: checkbin
# Temporary hack until we have migrated to asm-powerpc
include/asm: arch/$(ARCH)/include/asm
......@@ -152,7 +152,7 @@ endif
@touch $@
prepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
.PHONY: maketools FORCE
maketools: include/linux/version.h FORCE
......@@ -73,7 +73,7 @@ compressed: zImage
$(Q)$(MAKE) $(clean)=$(boot)
prepare: arch/$(ARCH)/lib/syscalltab.h
archprepare: arch/$(ARCH)/lib/syscalltab.h
define filechk_gen-syscalltab
(set -e; \
......@@ -107,7 +107,7 @@ else
$(shell cd $(ARCH_DIR) && ln -sf Kconfig.$(SUBARCH) Kconfig.arch)
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
......@@ -66,7 +66,7 @@ boot := arch/xtensa/boot
archinc := include/asm-xtensa
prepare: $(archinc)/.platform
archprepare: $(archinc)/.platform
# Update machine cpu and platform symlinks if something which affects
# them changed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment