Skip to content

Commit

Permalink
kbuild: full dependency check on asm-offsets.h
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Sam Ravnborg committed Sep 9, 2005
1 parent 8920e8f commit 86feeaa
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 42 deletions.
41 changes: 41 additions & 0 deletions Kbuild
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 28 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -776,14 +776,14 @@ $(vmlinux-dirs): prepare-all scripts
# A multi level approach is used. prepare1 is updated first, then prepare0.
# 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:
# 1) Check that make has not been executed in the kernel src $(srctree)
# 2) Create the include2 directory, used for the second asm symlink

prepare2:
prepare3:
ifneq ($(KBUILD_SRC),)
@echo ' Using $(srctree) as source for kernel'
$(Q)if [ -f $(srctree)/.config ]; then \
Expand All @@ -795,18 +795,21 @@ ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
endif

# prepare1 creates a makefile if using a separate output directory
prepare1: prepare2 outputmakefile
# prepare2 creates a makefile if using a separate output directory
prepare2: prepare3 outputmakefile

prepare0: prepare1 include/linux/version.h include/asm \
prepare1: prepare2 include/linux/version.h include/asm \
include/config/MARKER
ifneq ($(KBUILD_MODULES),)
$(Q)rm -rf $(MODVERDIR)
$(Q)mkdir -p $(MODVERDIR)
endif

prepare0: prepare prepare1 FORCE
$(Q)$(MAKE) $(build)=$(srctree)

# All the preparing..
prepare-all: prepare0 prepare
prepare-all: prepare0

# Leave this as default for preprocessing vmlinux.lds.S, which is now
# done in arch/$(ARCH)/kernel/Makefile
Expand Down Expand Up @@ -949,26 +952,6 @@ modules modules_install: FORCE

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.
# make clean Delete most generated files
Expand All @@ -991,7 +974,7 @@ MRPROPER_FILES += .config .config.old include/asm .version \
#
clean: rm-dirs := $(CLEAN_DIRS)
clean: rm-files := $(CLEAN_FILES)
clean-dirs := $(addprefix _clean_,$(vmlinux-alldirs))
clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))

.PHONY: $(clean-dirs) clean archclean
$(clean-dirs):
Expand Down
9 changes: 0 additions & 9 deletions arch/i386/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,6 @@ install: vmlinux
install kernel_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:
$(Q)$(MAKE) $(clean)=arch/i386/boot

Expand Down
2 changes: 1 addition & 1 deletion arch/i386/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <asm/desc.h>
#include <asm/cache.h>
#include <asm/thread_info.h>
#include <asm/asm_offsets.h>
#include <asm/asm-offsets.h>
#include <asm/setup.h>

/*
Expand Down
2 changes: 1 addition & 1 deletion arch/i386/kernel/vsyscall-sigreturn.S
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

#include <asm/unistd.h>
#include <asm/asm_offsets.h>
#include <asm/asm-offsets.h>


/* XXX
Expand Down
2 changes: 1 addition & 1 deletion arch/i386/kernel/vsyscall.lds.S
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* object prelinked to its virtual address, and with only one read-only
* segment (that fits in one page). This script controls its layout.
*/
#include <asm/asm_offsets.h>
#include <asm/asm-offsets.h>

SECTIONS
{
Expand Down
2 changes: 1 addition & 1 deletion arch/i386/power/swsusp.S
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include <linux/linkage.h>
#include <asm/segment.h>
#include <asm/page.h>
#include <asm/asm_offsets.h>
#include <asm/asm-offsets.h>

.text

Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/thread_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ struct thread_info {

#else /* !__ASSEMBLY__ */

#include <asm/asm_offsets.h>
#include <asm/asm-offsets.h>

#endif

Expand Down

0 comments on commit 86feeaa

Please sign in to comment.