Commit 5bb78269000cf326bfdfa19f79449c02a9158020

Authored by Sam Ravnborg
1 parent 9fe66dfd88

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:

prepare
  |
  +--> 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: Sam Ravnborg <sam@ravnborg.org>

Showing 10 changed files with 30 additions and 23 deletions Side-by-side Diff

Documentation/kbuild/makefiles.txt
... ... @@ -31,7 +31,7 @@
31 31  
32 32 === 6 Architecture Makefiles
33 33 --- 6.1 Set variables to tweak the build to the architecture
34   - --- 6.2 Add prerequisites to prepare:
  34 + --- 6.2 Add prerequisites to archprepare:
35 35 --- 6.3 List directories to visit when descending
36 36 --- 6.4 Architecture specific boot images
37 37 --- 6.5 Building non-kbuild targets
38 38  
39 39  
40 40  
... ... @@ -734,18 +734,18 @@
734 734 for loadable kernel modules.
735 735  
736 736  
737   ---- 6.2 Add prerequisites to prepare:
  737 +--- 6.2 Add prerequisites to archprepare:
738 738  
739   - The prepare: rule is used to list prerequisites that needs to be
  739 + The archprepare: rule is used to list prerequisites that needs to be
740 740 built before starting to descend down in the subdirectories.
741 741 This is usual header files containing assembler constants.
742 742  
743 743 Example:
744   - #arch/s390/Makefile
745   - prepare: include/asm-$(ARCH)/offsets.h
  744 + #arch/arm/Makefile
  745 + archprepare: maketools
746 746  
747   - In this example the file include/asm-$(ARCH)/offsets.h will
748   - be built before descending down in the subdirectories.
  747 + In this example the file target maketools will be processed
  748 + before descending down in the subdirectories.
749 749 See also chapter XXX-TODO that describe how kbuild supports
750 750 generating offset header files.
751 751  
... ... @@ -776,16 +776,21 @@
776 776 # Error messages still appears in the original language
777 777  
778 778 .PHONY: $(vmlinux-dirs)
779   -$(vmlinux-dirs): prepare-all scripts
  779 +$(vmlinux-dirs): prepare scripts
780 780 $(Q)$(MAKE) $(build)=$@
781 781  
782 782 # Things we need to do before we recursively start building the kernel
783   -# or the modules are listed in "prepare-all".
784   -# A multi level approach is used. prepare1 is updated first, then prepare0.
785   -# prepare-all is the collection point for the prepare targets.
  783 +# or the modules are listed in "prepare".
  784 +# A multi level approach is used. prepareN is processed before prepareN-1.
  785 +# archprepare is used in arch Makefiles and when processed asm symlink,
  786 +# version.h and scripts_basic is processed / created.
786 787  
787   -.PHONY: prepare-all prepare prepare0 prepare1 prepare2 prepare3
  788 +# Listed in dependency order
  789 +.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3
788 790  
  791 +# prepare-all is deprecated, use prepare as valid replacement
  792 +.PHONY: prepare-all
  793 +
789 794 # prepare3 is used to check if we are building in a separate output directory,
790 795 # and if so do:
791 796 # 1) Check that make has not been executed in the kernel src $(srctree)
792 797  
... ... @@ -813,11 +818,13 @@
813 818 $(Q)mkdir -p $(MODVERDIR)
814 819 endif
815 820  
816   -prepare0: prepare prepare1 FORCE
  821 +archprepare: prepare1 scripts_basic
  822 +
  823 +prepare0: archprepare FORCE
817 824 $(Q)$(MAKE) $(build)=.
818 825  
819 826 # All the preparing..
820   -prepare-all: prepare0
  827 +prepare prepare-all: prepare0
821 828  
822 829 # Leave this as default for preprocessing vmlinux.lds.S, which is now
823 830 # done in arch/$(ARCH)/kernel/Makefile
... ... @@ -908,7 +915,7 @@
908 915  
909 916 # Target to prepare building external modules
910 917 .PHONY: modules_prepare
911   -modules_prepare: prepare-all scripts
  918 +modules_prepare: prepare scripts
912 919  
913 920 # Target to install modules
914 921 .PHONY: modules_install
... ... @@ -175,7 +175,7 @@
175 175 endif
176 176 @touch $@
177 177  
178   -prepare: maketools include/asm-arm/.arch
  178 +archprepare: maketools include/asm-arm/.arch
179 179  
180 180 .PHONY: maketools FORCE
181 181 maketools: include/linux/version.h FORCE
... ... @@ -107,7 +107,7 @@
107 107 rm -f timage vmlinux.bin decompress.bin rescue.bin cramfs.img
108 108 rm -rf $(LD_SCRIPT).tmp
109 109  
110   -prepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch
  110 +archprepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch
111 111  
112 112 # Create some links to make all tools happy
113 113 $(SRC_ARCH)/.links:
... ... @@ -82,7 +82,7 @@
82 82 archclean:
83 83 $(Q)$(MAKE) $(clean)=$(boot)
84 84  
85   -prepare: include/asm-ia64/.offsets.h.stamp
  85 +archprepare: include/asm-ia64/.offsets.h.stamp
86 86  
87 87 include/asm-ia64/.offsets.h.stamp:
88 88 mkdir -p include/asm-ia64
... ... @@ -107,7 +107,7 @@
107 107 # Temporary hack until we have migrated to asm-powerpc
108 108 $(Q)rm -rf arch/$(ARCH)/include
109 109  
110   -prepare: checkbin
  110 +archprepare: checkbin
111 111  
112 112 # Temporary hack until we have migrated to asm-powerpc
113 113 include/asm: arch/$(ARCH)/include/asm
... ... @@ -152,7 +152,7 @@
152 152 @touch $@
153 153  
154 154  
155   -prepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
  155 +archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
156 156  
157 157 .PHONY: maketools FORCE
158 158 maketools: include/linux/version.h FORCE
... ... @@ -73,7 +73,7 @@
73 73 archclean:
74 74 $(Q)$(MAKE) $(clean)=$(boot)
75 75  
76   -prepare: arch/$(ARCH)/lib/syscalltab.h
  76 +archprepare: arch/$(ARCH)/lib/syscalltab.h
77 77  
78 78 define filechk_gen-syscalltab
79 79 (set -e; \
... ... @@ -107,7 +107,7 @@
107 107 $(shell cd $(ARCH_DIR) && ln -sf Kconfig.$(SUBARCH) Kconfig.arch)
108 108 endif
109 109  
110   -prepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS)
  110 +archprepare: $(ARCH_SYMLINKS) $(SYS_HEADERS) $(GEN_HEADERS)
111 111  
112 112 LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
113 113 LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
arch/xtensa/Makefile
... ... @@ -66,7 +66,7 @@
66 66  
67 67 archinc := include/asm-xtensa
68 68  
69   -prepare: $(archinc)/.platform
  69 +archprepare: $(archinc)/.platform
70 70  
71 71 # Update machine cpu and platform symlinks if something which affects
72 72 # them changed.