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>
This commit is contained in:
parent
8920e8f94c
commit
86feeaa812
8 changed files with 57 additions and 42 deletions
41
Kbuild
Normal file
41
Kbuild
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#
|
||||||
|
# Kbuild for top-level directory of the kernel
|
||||||
|
# This file takes care of the following:
|
||||||
|
# 1) Generate asm-offsets.h
|
||||||
|
|
||||||
|
#####
|
||||||
|
# 1) Generate asm-offsets.h
|
||||||
|
#
|
||||||
|
|
||||||
|
offsets-file := include/asm-$(ARCH)/asm-offsets.h
|
||||||
|
|
||||||
|
always := $(offsets-file)
|
||||||
|
targets := $(offsets-file)
|
||||||
|
targets += arch/$(ARCH)/kernel/asm-offsets.s
|
||||||
|
|
||||||
|
quiet_cmd_offsets = GEN $@
|
||||||
|
define cmd_offsets
|
||||||
|
cat $< | \
|
||||||
|
(set -e; \
|
||||||
|
echo "#ifndef __ASM_OFFSETS_H__"; \
|
||||||
|
echo "#define __ASM_OFFSETS_H__"; \
|
||||||
|
echo "/*"; \
|
||||||
|
echo " * DO NOT MODIFY."; \
|
||||||
|
echo " *"; \
|
||||||
|
echo " * This file was generated by $(srctree)/Kbuild"; \
|
||||||
|
echo " *"; \
|
||||||
|
echo " */"; \
|
||||||
|
echo ""; \
|
||||||
|
sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
|
||||||
|
echo ""; \
|
||||||
|
echo "#endif" ) > $@
|
||||||
|
endef
|
||||||
|
|
||||||
|
# We use internal kbuild rules to avoid the "is up to date" message from make
|
||||||
|
arch/$(ARCH)/kernel/asm-offsets.s: arch/$(ARCH)/kernel/asm-offsets.c FORCE
|
||||||
|
$(Q)mkdir -p $(dir $@)
|
||||||
|
$(call if_changed_dep,cc_s_c)
|
||||||
|
|
||||||
|
$(srctree)/$(offsets-file): arch/$(ARCH)/kernel/asm-offsets.s Kbuild
|
||||||
|
$(call cmd,offsets)
|
||||||
|
|
39
Makefile
39
Makefile
|
@ -776,14 +776,14 @@ $(vmlinux-dirs): prepare-all scripts
|
||||||
# A multi level approach is used. prepare1 is updated first, then prepare0.
|
# A multi level approach is used. prepare1 is updated first, then prepare0.
|
||||||
# prepare-all is the collection point for the prepare targets.
|
# prepare-all is the collection point for the prepare targets.
|
||||||
|
|
||||||
.PHONY: prepare-all prepare prepare0 prepare1 prepare2
|
.PHONY: prepare-all prepare prepare0 prepare1 prepare2 prepare3
|
||||||
|
|
||||||
# prepare2 is used to check if we are building in a separate output directory,
|
# prepare3 is used to check if we are building in a separate output directory,
|
||||||
# and if so do:
|
# and if so do:
|
||||||
# 1) Check that make has not been executed in the kernel src $(srctree)
|
# 1) Check that make has not been executed in the kernel src $(srctree)
|
||||||
# 2) Create the include2 directory, used for the second asm symlink
|
# 2) Create the include2 directory, used for the second asm symlink
|
||||||
|
|
||||||
prepare2:
|
prepare3:
|
||||||
ifneq ($(KBUILD_SRC),)
|
ifneq ($(KBUILD_SRC),)
|
||||||
@echo ' Using $(srctree) as source for kernel'
|
@echo ' Using $(srctree) as source for kernel'
|
||||||
$(Q)if [ -f $(srctree)/.config ]; then \
|
$(Q)if [ -f $(srctree)/.config ]; then \
|
||||||
|
@ -795,18 +795,21 @@ ifneq ($(KBUILD_SRC),)
|
||||||
$(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
|
$(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# prepare1 creates a makefile if using a separate output directory
|
# prepare2 creates a makefile if using a separate output directory
|
||||||
prepare1: prepare2 outputmakefile
|
prepare2: prepare3 outputmakefile
|
||||||
|
|
||||||
prepare0: prepare1 include/linux/version.h include/asm \
|
prepare1: prepare2 include/linux/version.h include/asm \
|
||||||
include/config/MARKER
|
include/config/MARKER
|
||||||
ifneq ($(KBUILD_MODULES),)
|
ifneq ($(KBUILD_MODULES),)
|
||||||
$(Q)rm -rf $(MODVERDIR)
|
$(Q)rm -rf $(MODVERDIR)
|
||||||
$(Q)mkdir -p $(MODVERDIR)
|
$(Q)mkdir -p $(MODVERDIR)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
prepare0: prepare prepare1 FORCE
|
||||||
|
$(Q)$(MAKE) $(build)=$(srctree)
|
||||||
|
|
||||||
# All the preparing..
|
# All the preparing..
|
||||||
prepare-all: prepare0 prepare
|
prepare-all: prepare0
|
||||||
|
|
||||||
# Leave this as default for preprocessing vmlinux.lds.S, which is now
|
# Leave this as default for preprocessing vmlinux.lds.S, which is now
|
||||||
# done in arch/$(ARCH)/kernel/Makefile
|
# done in arch/$(ARCH)/kernel/Makefile
|
||||||
|
@ -949,26 +952,6 @@ modules modules_install: FORCE
|
||||||
|
|
||||||
endif # CONFIG_MODULES
|
endif # CONFIG_MODULES
|
||||||
|
|
||||||
# Generate asm-offsets.h
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
define filechk_gen-asm-offsets
|
|
||||||
(set -e; \
|
|
||||||
echo "#ifndef __ASM_OFFSETS_H__"; \
|
|
||||||
echo "#define __ASM_OFFSETS_H__"; \
|
|
||||||
echo "/*"; \
|
|
||||||
echo " * DO NOT MODIFY."; \
|
|
||||||
echo " *"; \
|
|
||||||
echo " * This file was generated by arch/$(ARCH)/Makefile"; \
|
|
||||||
echo " *"; \
|
|
||||||
echo " */"; \
|
|
||||||
echo ""; \
|
|
||||||
sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
|
|
||||||
echo ""; \
|
|
||||||
echo "#endif" )
|
|
||||||
endef
|
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# Cleaning is done on three levels.
|
# Cleaning is done on three levels.
|
||||||
# make clean Delete most generated files
|
# make clean Delete most generated files
|
||||||
|
@ -991,7 +974,7 @@ MRPROPER_FILES += .config .config.old include/asm .version \
|
||||||
#
|
#
|
||||||
clean: rm-dirs := $(CLEAN_DIRS)
|
clean: rm-dirs := $(CLEAN_DIRS)
|
||||||
clean: rm-files := $(CLEAN_FILES)
|
clean: rm-files := $(CLEAN_FILES)
|
||||||
clean-dirs := $(addprefix _clean_,$(vmlinux-alldirs))
|
clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))
|
||||||
|
|
||||||
.PHONY: $(clean-dirs) clean archclean
|
.PHONY: $(clean-dirs) clean archclean
|
||||||
$(clean-dirs):
|
$(clean-dirs):
|
||||||
|
|
|
@ -156,15 +156,6 @@ install: vmlinux
|
||||||
install kernel_install:
|
install kernel_install:
|
||||||
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
|
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
|
||||||
|
|
||||||
prepare: include/asm-$(ARCH)/asm_offsets.h
|
|
||||||
CLEAN_FILES += include/asm-$(ARCH)/asm_offsets.h
|
|
||||||
|
|
||||||
arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
|
|
||||||
include/config/MARKER
|
|
||||||
|
|
||||||
include/asm-$(ARCH)/asm_offsets.h: arch/$(ARCH)/kernel/asm-offsets.s
|
|
||||||
$(call filechk,gen-asm-offsets)
|
|
||||||
|
|
||||||
archclean:
|
archclean:
|
||||||
$(Q)$(MAKE) $(clean)=arch/i386/boot
|
$(Q)$(MAKE) $(clean)=arch/i386/boot
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/asm_offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/asm_offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
|
|
||||||
|
|
||||||
/* XXX
|
/* XXX
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* object prelinked to its virtual address, and with only one read-only
|
* object prelinked to its virtual address, and with only one read-only
|
||||||
* segment (that fits in one page). This script controls its layout.
|
* segment (that fits in one page). This script controls its layout.
|
||||||
*/
|
*/
|
||||||
#include <asm/asm_offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/asm_offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ struct thread_info {
|
||||||
|
|
||||||
#else /* !__ASSEMBLY__ */
|
#else /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
#include <asm/asm_offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue