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 50a227985SNicholas Mc Guire# 2) Generate timeconst.h 60a227985SNicholas Mc Guire# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h) 70a227985SNicholas 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##### 510a227985SNicholas Mc Guire# 2) Generate timeconst.h 520a227985SNicholas Mc Guire 530a227985SNicholas Mc Guiretimeconst-file := include/generated/timeconst.h 540a227985SNicholas Mc Guire 550a227985SNicholas Mc Guiretargets += $(timeconst-file) 560a227985SNicholas Mc Guire 570a227985SNicholas Mc Guirequiet_cmd_gentimeconst = GEN $@ 580a227985SNicholas Mc Guiredefine cmd_gentimeconst 590a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) > $@ 600a227985SNicholas Mc Guireendef 610a227985SNicholas Mc Guiredefine filechk_gentimeconst 620a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) 630a227985SNicholas Mc Guireendef 640a227985SNicholas Mc Guire 650a227985SNicholas Mc Guire$(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE 660a227985SNicholas Mc Guire $(call filechk,gentimeconst) 670a227985SNicholas Mc Guire 680a227985SNicholas Mc Guire##### 690a227985SNicholas Mc Guire# 3) Generate asm-offsets.h 7039664e2fSMasahiro Yamada# 7139664e2fSMasahiro Yamada 7239664e2fSMasahiro Yamadaoffsets-file := include/generated/asm-offsets.h 7339664e2fSMasahiro Yamada 7439664e2fSMasahiro Yamadaalways += $(offsets-file) 7539664e2fSMasahiro Yamadatargets += arch/$(SRCARCH)/kernel/asm-offsets.s 7639664e2fSMasahiro Yamada 7786feeaa8SSam Ravnborg# We use internal kbuild rules to avoid the "is up to date" message from make 781cdf25d7SChristoph Lameterarch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \ 790a227985SNicholas Mc Guire $(obj)/$(timeconst-file) $(obj)/$(bounds-file) FORCE 8086feeaa8SSam Ravnborg $(Q)mkdir -p $(dir $@) 8186feeaa8SSam Ravnborg $(call if_changed_dep,cc_s_c) 8286feeaa8SSam Ravnborg 8370a4fd6cSMichal Marek$(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE 8470a4fd6cSMichal Marek $(call filechk,offsets,__ASM_OFFSETS_H__) 8586feeaa8SSam Ravnborg 86c53aeca0SSam Ravnborg##### 870a227985SNicholas Mc Guire# 4) Check for missing system calls 88c53aeca0SSam Ravnborg# 89c53aeca0SSam Ravnborg 905f7efb4cSArnaud Lacombealways += missing-syscalls 915f7efb4cSArnaud Lacombetargets += missing-syscalls 925f7efb4cSArnaud Lacombe 93c53aeca0SSam Ravnborgquiet_cmd_syscalls = CALL $< 9444656fa0SDavid Daney cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags) 95c53aeca0SSam Ravnborg 965f7efb4cSArnaud Lacombemissing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE 97c53aeca0SSam Ravnborg $(call cmd,syscalls) 981cdf25d7SChristoph Lameter 990a227985SNicholas Mc Guire# Keep these three files during make clean 1000a227985SNicholas Mc Guireno-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file) 101