kbuild: create a way to create preprocessor constants from C expressions
The use of enums create constants that are not available to the preprocessor when building the kernel (f.e. MAX_NR_ZONES). Arch code already has a way to export constants calculated to the preprocessor through the asm-offsets.c file. Generate something similar for the core kernel through kbuild. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Andy Whitcroft <apw@shadowen.org> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Rik van Riel <riel@redhat.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
308c05e35e
commit
1cdf25d704
56
Kbuild
56
Kbuild
|
@ -1,19 +1,54 @@
|
||||||
#
|
#
|
||||||
# Kbuild for top-level directory of the kernel
|
# Kbuild for top-level directory of the kernel
|
||||||
# This file takes care of the following:
|
# This file takes care of the following:
|
||||||
# 1) Generate asm-offsets.h
|
# 1) Generate bounds.h
|
||||||
# 2) Check for missing system calls
|
# 2) Generate asm-offsets.h (may need bounds.h)
|
||||||
|
# 3) Check for missing system calls
|
||||||
|
|
||||||
#####
|
#####
|
||||||
# 1) Generate asm-offsets.h
|
# 1) Generate bounds.h
|
||||||
|
|
||||||
|
bounds-file := include/linux/bounds.h
|
||||||
|
|
||||||
|
always := $(bounds-file)
|
||||||
|
targets := $(bounds-file) kernel/bounds.s
|
||||||
|
|
||||||
|
quiet_cmd_bounds = GEN $@
|
||||||
|
define cmd_bounds
|
||||||
|
(set -e; \
|
||||||
|
echo "#ifndef __LINUX_BOUNDS_H__"; \
|
||||||
|
echo "#define __LINUX_BOUNDS_H__"; \
|
||||||
|
echo "/*"; \
|
||||||
|
echo " * DO NOT MODIFY."; \
|
||||||
|
echo " *"; \
|
||||||
|
echo " * This file was generated by Kbuild"; \
|
||||||
|
echo " *"; \
|
||||||
|
echo " */"; \
|
||||||
|
echo ""; \
|
||||||
|
sed -ne $(sed-y) $<; \
|
||||||
|
echo ""; \
|
||||||
|
echo "#endif" ) > $@
|
||||||
|
endef
|
||||||
|
|
||||||
|
# We use internal kbuild rules to avoid the "is up to date" message from make
|
||||||
|
kernel/bounds.s: kernel/bounds.c FORCE
|
||||||
|
$(Q)mkdir -p $(dir $@)
|
||||||
|
$(call if_changed_dep,cc_s_c)
|
||||||
|
|
||||||
|
$(obj)/$(bounds-file): kernel/bounds.s Kbuild
|
||||||
|
$(Q)mkdir -p $(dir $@)
|
||||||
|
$(call cmd,bounds)
|
||||||
|
|
||||||
|
#####
|
||||||
|
# 2) Generate asm-offsets.h
|
||||||
#
|
#
|
||||||
|
|
||||||
offsets-file := include/asm-$(SRCARCH)/asm-offsets.h
|
offsets-file := include/asm-$(SRCARCH)/asm-offsets.h
|
||||||
|
|
||||||
always := $(offsets-file)
|
always += $(offsets-file)
|
||||||
targets := $(offsets-file)
|
targets += $(offsets-file)
|
||||||
targets += arch/$(SRCARCH)/kernel/asm-offsets.s
|
targets += arch/$(SRCARCH)/kernel/asm-offsets.s
|
||||||
clean-files := $(addprefix $(objtree)/,$(targets))
|
|
||||||
|
|
||||||
# Default sed regexp - multiline due to syntax constraints
|
# Default sed regexp - multiline due to syntax constraints
|
||||||
define sed-y
|
define sed-y
|
||||||
|
@ -40,7 +75,8 @@ define cmd_offsets
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# We use internal kbuild rules to avoid the "is up to date" message from make
|
# We use internal kbuild rules to avoid the "is up to date" message from make
|
||||||
arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c FORCE
|
arch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \
|
||||||
|
$(obj)/$(bounds-file) FORCE
|
||||||
$(Q)mkdir -p $(dir $@)
|
$(Q)mkdir -p $(dir $@)
|
||||||
$(call if_changed_dep,cc_s_c)
|
$(call if_changed_dep,cc_s_c)
|
||||||
|
|
||||||
|
@ -49,7 +85,7 @@ $(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s Kbuild
|
||||||
$(call cmd,offsets)
|
$(call cmd,offsets)
|
||||||
|
|
||||||
#####
|
#####
|
||||||
# 2) Check for missing system calls
|
# 3) Check for missing system calls
|
||||||
#
|
#
|
||||||
|
|
||||||
quiet_cmd_syscalls = CALL $<
|
quiet_cmd_syscalls = CALL $<
|
||||||
|
@ -58,3 +94,7 @@ quiet_cmd_syscalls = CALL $<
|
||||||
PHONY += missing-syscalls
|
PHONY += missing-syscalls
|
||||||
missing-syscalls: scripts/checksyscalls.sh FORCE
|
missing-syscalls: scripts/checksyscalls.sh FORCE
|
||||||
$(call cmd,syscalls)
|
$(call cmd,syscalls)
|
||||||
|
|
||||||
|
# Delete all targets during make clean
|
||||||
|
clean-files := $(addprefix $(objtree)/,$(targets))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Generate definitions needed by the preprocessor.
|
||||||
|
* This code generates raw asm output which is post-processed
|
||||||
|
* to extract and format the required data.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define __GENERATING_BOUNDS_H
|
||||||
|
/* Include headers that define the enum constants of interest */
|
||||||
|
|
||||||
|
#define DEFINE(sym, val) \
|
||||||
|
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
|
||||||
|
|
||||||
|
#define BLANK() asm volatile("\n->" : : )
|
||||||
|
|
||||||
|
void foo(void)
|
||||||
|
{
|
||||||
|
/* The enum constants to put into include/linux/bounds.h */
|
||||||
|
/* End of constants */
|
||||||
|
}
|
Loading…
Reference in New Issue