186feeaa8SSam Ravnborg# 286feeaa8SSam Ravnborg# Kbuild for top-level directory of the kernel 386feeaa8SSam Ravnborg# This file takes care of the following: 41cdf25d7SChristoph Lameter# 1) Generate bounds.h 5*0a227985SNicholas Mc Guire# 2) Generate timeconst.h 6*0a227985SNicholas Mc Guire# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h) 7*0a227985SNicholas Mc Guire# 4) Check for missing system calls 886feeaa8SSam Ravnborg 9048eb582SSam Ravnborg# Default sed regexp - multiline due to syntax constraints 10048eb582SSam Ravnborgdefine sed-y 11bf2ae2b3SChristoph Lameter "/^->/{s:->#\(.*\):/* \1 */:; \ 1295a2f6f7SDavid Howells s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \ 13a22dcdb0SAlexander van Heukelum s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ 14bf2ae2b3SChristoph Lameter s:->::; p;}" 15048eb582SSam Ravnborgendef 16048eb582SSam Ravnborg 1770a4fd6cSMichal Marek# Use filechk to avoid rebuilds when a header changes, but the resulting file 1870a4fd6cSMichal Marek# does not 1970a4fd6cSMichal Marekdefine filechk_offsets 2086feeaa8SSam Ravnborg (set -e; \ 2139664e2fSMasahiro Yamada echo "#ifndef $2"; \ 2239664e2fSMasahiro Yamada echo "#define $2"; \ 2386feeaa8SSam Ravnborg echo "/*"; \ 2486feeaa8SSam Ravnborg echo " * DO NOT MODIFY."; \ 2586feeaa8SSam Ravnborg echo " *"; \ 2665ff22eeSOlaf Hering echo " * This file was generated by Kbuild"; \ 2786feeaa8SSam Ravnborg echo " */"; \ 2886feeaa8SSam Ravnborg echo ""; \ 2970a4fd6cSMichal Marek sed -ne $(sed-y); \ 3086feeaa8SSam Ravnborg echo ""; \ 3170a4fd6cSMichal Marek echo "#endif" ) 3286feeaa8SSam Ravnborgendef 3386feeaa8SSam Ravnborg 3439664e2fSMasahiro Yamada##### 3539664e2fSMasahiro Yamada# 1) Generate bounds.h 3639664e2fSMasahiro Yamada 3739664e2fSMasahiro Yamadabounds-file := include/generated/bounds.h 3839664e2fSMasahiro Yamada 3939664e2fSMasahiro Yamadaalways := $(bounds-file) 408a58e162SMasahiro Yamadatargets := kernel/bounds.s 4139664e2fSMasahiro Yamada 4239664e2fSMasahiro Yamada# We use internal kbuild rules to avoid the "is up to date" message from make 4339664e2fSMasahiro Yamadakernel/bounds.s: kernel/bounds.c FORCE 4439664e2fSMasahiro Yamada $(Q)mkdir -p $(dir $@) 4539664e2fSMasahiro Yamada $(call if_changed_dep,cc_s_c) 4639664e2fSMasahiro Yamada 4770a4fd6cSMichal Marek$(obj)/$(bounds-file): kernel/bounds.s FORCE 4870a4fd6cSMichal Marek $(call filechk,offsets,__LINUX_BOUNDS_H__) 4939664e2fSMasahiro Yamada 5039664e2fSMasahiro Yamada##### 51*0a227985SNicholas Mc Guire# 2) Generate timeconst.h 52*0a227985SNicholas Mc Guire 53*0a227985SNicholas Mc Guiretimeconst-file := include/generated/timeconst.h 54*0a227985SNicholas Mc Guire 55*0a227985SNicholas Mc Guire#always += $(timeconst-file) 56*0a227985SNicholas Mc Guiretargets += $(timeconst-file) 57*0a227985SNicholas Mc Guire 58*0a227985SNicholas Mc Guirequiet_cmd_gentimeconst = GEN $@ 59*0a227985SNicholas Mc Guiredefine cmd_gentimeconst 60*0a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) > $@ 61*0a227985SNicholas Mc Guireendef 62*0a227985SNicholas Mc Guiredefine filechk_gentimeconst 63*0a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) 64*0a227985SNicholas Mc Guireendef 65*0a227985SNicholas Mc Guire 66*0a227985SNicholas Mc Guire$(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE 67*0a227985SNicholas Mc Guire $(call filechk,gentimeconst) 68*0a227985SNicholas Mc Guire 69*0a227985SNicholas Mc Guire##### 70*0a227985SNicholas Mc Guire# 3) Generate asm-offsets.h 7139664e2fSMasahiro Yamada# 7239664e2fSMasahiro Yamada 7339664e2fSMasahiro Yamadaoffsets-file := include/generated/asm-offsets.h 7439664e2fSMasahiro Yamada 7539664e2fSMasahiro Yamadaalways += $(offsets-file) 7639664e2fSMasahiro Yamadatargets += arch/$(SRCARCH)/kernel/asm-offsets.s 7739664e2fSMasahiro Yamada 7886feeaa8SSam Ravnborg# We use internal kbuild rules to avoid the "is up to date" message from make 791cdf25d7SChristoph Lameterarch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \ 80*0a227985SNicholas Mc Guire $(obj)/$(timeconst-file) $(obj)/$(bounds-file) FORCE 8186feeaa8SSam Ravnborg $(Q)mkdir -p $(dir $@) 8286feeaa8SSam Ravnborg $(call if_changed_dep,cc_s_c) 8386feeaa8SSam Ravnborg 8470a4fd6cSMichal Marek$(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE 8570a4fd6cSMichal Marek $(call filechk,offsets,__ASM_OFFSETS_H__) 8686feeaa8SSam Ravnborg 87c53aeca0SSam Ravnborg##### 88*0a227985SNicholas Mc Guire# 4) Check for missing system calls 89c53aeca0SSam Ravnborg# 90c53aeca0SSam Ravnborg 915f7efb4cSArnaud Lacombealways += missing-syscalls 925f7efb4cSArnaud Lacombetargets += missing-syscalls 935f7efb4cSArnaud Lacombe 94c53aeca0SSam Ravnborgquiet_cmd_syscalls = CALL $< 9544656fa0SDavid Daney cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags) 96c53aeca0SSam Ravnborg 975f7efb4cSArnaud Lacombemissing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE 98c53aeca0SSam Ravnborg $(call cmd,syscalls) 991cdf25d7SChristoph Lameter 100*0a227985SNicholas Mc Guire# Keep these three files during make clean 101*0a227985SNicholas Mc Guireno-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file) 102