Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+57 -42
+41
Kbuild
··· 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) 41 +
+11 -28
Makefile
··· 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 \ ··· 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 ··· 952 949 953 950 endif # CONFIG_MODULES 954 951 955 - # Generate asm-offsets.h 956 - # --------------------------------------------------------------------------- 957 - 958 - define filechk_gen-asm-offsets 959 - (set -e; \ 960 - echo "#ifndef __ASM_OFFSETS_H__"; \ 961 - echo "#define __ASM_OFFSETS_H__"; \ 962 - echo "/*"; \ 963 - echo " * DO NOT MODIFY."; \ 964 - echo " *"; \ 965 - echo " * This file was generated by arch/$(ARCH)/Makefile"; \ 966 - echo " *"; \ 967 - echo " */"; \ 968 - echo ""; \ 969 - sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \ 970 - echo ""; \ 971 - echo "#endif" ) 972 - endef 973 - 974 - 975 952 ### 976 953 # Cleaning is done on three levels. 977 954 # make clean Delete most generated files ··· 974 991 # 975 992 clean: rm-dirs := $(CLEAN_DIRS) 976 993 clean: rm-files := $(CLEAN_FILES) 977 - clean-dirs := $(addprefix _clean_,$(vmlinux-alldirs)) 994 + clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs)) 978 995 979 996 .PHONY: $(clean-dirs) clean archclean 980 997 $(clean-dirs):
-9
arch/i386/Makefile
··· 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
+1 -1
arch/i386/kernel/head.S
··· 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 /*
+1 -1
arch/i386/kernel/vsyscall-sigreturn.S
··· 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
+1 -1
arch/i386/kernel/vsyscall.lds.S
··· 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 {
+1 -1
arch/i386/power/swsusp.S
··· 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
+1 -1
include/asm-i386/thread_info.h
··· 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