Commit 86feeaa8120bb1b0ab21efed49e9754039395ef1

Authored by Sam Ravnborg
1 parent 8920e8f94c

kbuild: full dependency check on asm-offsets.h

Building asm-offsets.h has been moved to a seperate Kbuild file
located in the top-level directory. This allow us to share the
functionality across the architectures.

The old rules in architecture specific Makefiles will die
in subsequent patches.

Furhtermore the usual kbuild dependency tracking is now used
when deciding to rebuild asm-offsets.s. So we no longer risk
to fail a rebuild caused by asm-offsets.c dependencies being touched.

With this common rule-set we now force the same name across
all architectures. Following patches will fix the rest.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>

Showing 8 changed files with 57 additions and 42 deletions Side-by-side Diff

  1 +#
  2 +# Kbuild for top-level directory of the kernel
  3 +# This file takes care of the following:
  4 +# 1) Generate asm-offsets.h
  5 +
  6 +#####
  7 +# 1) Generate asm-offsets.h
  8 +#
  9 +
  10 +offsets-file := include/asm-$(ARCH)/asm-offsets.h
  11 +
  12 +always := $(offsets-file)
  13 +targets := $(offsets-file)
  14 +targets += arch/$(ARCH)/kernel/asm-offsets.s
  15 +
  16 +quiet_cmd_offsets = GEN $@
  17 +define cmd_offsets
  18 + cat $< | \
  19 + (set -e; \
  20 + echo "#ifndef __ASM_OFFSETS_H__"; \
  21 + echo "#define __ASM_OFFSETS_H__"; \
  22 + echo "/*"; \
  23 + echo " * DO NOT MODIFY."; \
  24 + echo " *"; \
  25 + echo " * This file was generated by $(srctree)/Kbuild"; \
  26 + echo " *"; \
  27 + echo " */"; \
  28 + echo ""; \
  29 + sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
  30 + echo ""; \
  31 + echo "#endif" ) > $@
  32 +endef
  33 +
  34 +# We use internal kbuild rules to avoid the "is up to date" message from make
  35 +arch/$(ARCH)/kernel/asm-offsets.s: arch/$(ARCH)/kernel/asm-offsets.c FORCE
  36 + $(Q)mkdir -p $(dir $@)
  37 + $(call if_changed_dep,cc_s_c)
  38 +
  39 +$(srctree)/$(offsets-file): arch/$(ARCH)/kernel/asm-offsets.s Kbuild
  40 + $(call cmd,offsets)
... ... @@ -776,14 +776,14 @@
776 776 # A multi level approach is used. prepare1 is updated first, then prepare0.
777 777 # prepare-all is the collection point for the prepare targets.
778 778  
779   -.PHONY: prepare-all prepare prepare0 prepare1 prepare2
  779 +.PHONY: prepare-all prepare prepare0 prepare1 prepare2 prepare3
780 780  
781   -# prepare2 is used to check if we are building in a separate output directory,
  781 +# prepare3 is used to check if we are building in a separate output directory,
782 782 # and if so do:
783 783 # 1) Check that make has not been executed in the kernel src $(srctree)
784 784 # 2) Create the include2 directory, used for the second asm symlink
785 785  
786   -prepare2:
  786 +prepare3:
787 787 ifneq ($(KBUILD_SRC),)
788 788 @echo ' Using $(srctree) as source for kernel'
789 789 $(Q)if [ -f $(srctree)/.config ]; then \
790 790  
791 791  
792 792  
... ... @@ -795,18 +795,21 @@
795 795 $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
796 796 endif
797 797  
798   -# prepare1 creates a makefile if using a separate output directory
799   -prepare1: prepare2 outputmakefile
  798 +# prepare2 creates a makefile if using a separate output directory
  799 +prepare2: prepare3 outputmakefile
800 800  
801   -prepare0: prepare1 include/linux/version.h include/asm \
  801 +prepare1: prepare2 include/linux/version.h include/asm \
802 802 include/config/MARKER
803 803 ifneq ($(KBUILD_MODULES),)
804 804 $(Q)rm -rf $(MODVERDIR)
805 805 $(Q)mkdir -p $(MODVERDIR)
806 806 endif
807 807  
  808 +prepare0: prepare prepare1 FORCE
  809 + $(Q)$(MAKE) $(build)=$(srctree)
  810 +
808 811 # All the preparing..
809   -prepare-all: prepare0 prepare
  812 +prepare-all: prepare0
810 813  
811 814 # Leave this as default for preprocessing vmlinux.lds.S, which is now
812 815 # done in arch/$(ARCH)/kernel/Makefile
... ... @@ -949,26 +952,6 @@
949 952  
950 953 endif # CONFIG_MODULES
951 954  
952   -# Generate asm-offsets.h
953   -# ---------------------------------------------------------------------------
954   -
955   -define filechk_gen-asm-offsets
956   - (set -e; \
957   - echo "#ifndef __ASM_OFFSETS_H__"; \
958   - echo "#define __ASM_OFFSETS_H__"; \
959   - echo "/*"; \
960   - echo " * DO NOT MODIFY."; \
961   - echo " *"; \
962   - echo " * This file was generated by arch/$(ARCH)/Makefile"; \
963   - echo " *"; \
964   - echo " */"; \
965   - echo ""; \
966   - sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
967   - echo ""; \
968   - echo "#endif" )
969   -endef
970   -
971   -
972 955 ###
973 956 # Cleaning is done on three levels.
974 957 # make clean Delete most generated files
... ... @@ -991,7 +974,7 @@
991 974 #
992 975 clean: rm-dirs := $(CLEAN_DIRS)
993 976 clean: rm-files := $(CLEAN_FILES)
994   -clean-dirs := $(addprefix _clean_,$(vmlinux-alldirs))
  977 +clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))
995 978  
996 979 .PHONY: $(clean-dirs) clean archclean
997 980 $(clean-dirs):
... ... @@ -156,15 +156,6 @@
156 156 install kernel_install:
157 157 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
158 158  
159   -prepare: include/asm-$(ARCH)/asm_offsets.h
160   -CLEAN_FILES += include/asm-$(ARCH)/asm_offsets.h
161   -
162   -arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
163   - include/config/MARKER
164   -
165   -include/asm-$(ARCH)/asm_offsets.h: arch/$(ARCH)/kernel/asm-offsets.s
166   - $(call filechk,gen-asm-offsets)
167   -
168 159 archclean:
169 160 $(Q)$(MAKE) $(clean)=arch/i386/boot
170 161  
arch/i386/kernel/head.S
... ... @@ -17,7 +17,7 @@
17 17 #include <asm/desc.h>
18 18 #include <asm/cache.h>
19 19 #include <asm/thread_info.h>
20   -#include <asm/asm_offsets.h>
  20 +#include <asm/asm-offsets.h>
21 21 #include <asm/setup.h>
22 22  
23 23 /*
arch/i386/kernel/vsyscall-sigreturn.S
... ... @@ -7,7 +7,7 @@
7 7 */
8 8  
9 9 #include <asm/unistd.h>
10   -#include <asm/asm_offsets.h>
  10 +#include <asm/asm-offsets.h>
11 11  
12 12  
13 13 /* XXX
arch/i386/kernel/vsyscall.lds.S
... ... @@ -3,7 +3,7 @@
3 3 * object prelinked to its virtual address, and with only one read-only
4 4 * segment (that fits in one page). This script controls its layout.
5 5 */
6   -#include <asm/asm_offsets.h>
  6 +#include <asm/asm-offsets.h>
7 7  
8 8 SECTIONS
9 9 {
arch/i386/power/swsusp.S
... ... @@ -12,7 +12,7 @@
12 12 #include <linux/linkage.h>
13 13 #include <asm/segment.h>
14 14 #include <asm/page.h>
15   -#include <asm/asm_offsets.h>
  15 +#include <asm/asm-offsets.h>
16 16  
17 17 .text
18 18  
include/asm-i386/thread_info.h
... ... @@ -48,7 +48,7 @@
48 48  
49 49 #else /* !__ASSEMBLY__ */
50 50  
51   -#include <asm/asm_offsets.h>
  51 +#include <asm/asm-offsets.h>
52 52  
53 53 #endif
54 54