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 8*f197d75fSKieran Bingham# 5) Generate constants.py (may need bounds.h) 986feeaa8SSam Ravnborg 10048eb582SSam Ravnborg# Default sed regexp - multiline due to syntax constraints 11048eb582SSam Ravnborgdefine sed-y 12bf2ae2b3SChristoph Lameter "/^->/{s:->#\(.*\):/* \1 */:; \ 1395a2f6f7SDavid Howells s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \ 14a22dcdb0SAlexander van Heukelum s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ 15bf2ae2b3SChristoph Lameter s:->::; p;}" 16048eb582SSam Ravnborgendef 17048eb582SSam Ravnborg 1870a4fd6cSMichal Marek# Use filechk to avoid rebuilds when a header changes, but the resulting file 1970a4fd6cSMichal Marek# does not 2070a4fd6cSMichal Marekdefine filechk_offsets 2186feeaa8SSam Ravnborg (set -e; \ 2239664e2fSMasahiro Yamada echo "#ifndef $2"; \ 2339664e2fSMasahiro Yamada echo "#define $2"; \ 2486feeaa8SSam Ravnborg echo "/*"; \ 2586feeaa8SSam Ravnborg echo " * DO NOT MODIFY."; \ 2686feeaa8SSam Ravnborg echo " *"; \ 2765ff22eeSOlaf Hering echo " * This file was generated by Kbuild"; \ 2886feeaa8SSam Ravnborg echo " */"; \ 2986feeaa8SSam Ravnborg echo ""; \ 3070a4fd6cSMichal Marek sed -ne $(sed-y); \ 3186feeaa8SSam Ravnborg echo ""; \ 3270a4fd6cSMichal Marek echo "#endif" ) 3386feeaa8SSam Ravnborgendef 3486feeaa8SSam Ravnborg 3539664e2fSMasahiro Yamada##### 3639664e2fSMasahiro Yamada# 1) Generate bounds.h 3739664e2fSMasahiro Yamada 3839664e2fSMasahiro Yamadabounds-file := include/generated/bounds.h 3939664e2fSMasahiro Yamada 4039664e2fSMasahiro Yamadaalways := $(bounds-file) 418a58e162SMasahiro Yamadatargets := kernel/bounds.s 4239664e2fSMasahiro Yamada 4339664e2fSMasahiro Yamada# We use internal kbuild rules to avoid the "is up to date" message from make 4439664e2fSMasahiro Yamadakernel/bounds.s: kernel/bounds.c FORCE 4539664e2fSMasahiro Yamada $(Q)mkdir -p $(dir $@) 4639664e2fSMasahiro Yamada $(call if_changed_dep,cc_s_c) 4739664e2fSMasahiro Yamada 4870a4fd6cSMichal Marek$(obj)/$(bounds-file): kernel/bounds.s FORCE 4970a4fd6cSMichal Marek $(call filechk,offsets,__LINUX_BOUNDS_H__) 5039664e2fSMasahiro Yamada 5139664e2fSMasahiro Yamada##### 520a227985SNicholas Mc Guire# 2) Generate timeconst.h 530a227985SNicholas Mc Guire 540a227985SNicholas Mc Guiretimeconst-file := include/generated/timeconst.h 550a227985SNicholas Mc Guire 560a227985SNicholas Mc Guiretargets += $(timeconst-file) 570a227985SNicholas Mc Guire 580a227985SNicholas Mc Guirequiet_cmd_gentimeconst = GEN $@ 590a227985SNicholas Mc Guiredefine cmd_gentimeconst 600a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) > $@ 610a227985SNicholas Mc Guireendef 620a227985SNicholas Mc Guiredefine filechk_gentimeconst 630a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) 640a227985SNicholas Mc Guireendef 650a227985SNicholas Mc Guire 660a227985SNicholas Mc Guire$(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE 670a227985SNicholas Mc Guire $(call filechk,gentimeconst) 680a227985SNicholas Mc Guire 690a227985SNicholas Mc Guire##### 700a227985SNicholas 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 \ 800a227985SNicholas 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##### 880a227985SNicholas 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*f197d75fSKieran Bingham##### 101*f197d75fSKieran Bingham# 5) Generate constants for Python GDB integration 102*f197d75fSKieran Bingham# 103*f197d75fSKieran Bingham 104*f197d75fSKieran Binghamextra-$(CONFIG_GDB_SCRIPTS) += build_constants_py 105*f197d75fSKieran Bingham 106*f197d75fSKieran Binghambuild_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file) 107*f197d75fSKieran Bingham @$(MAKE) $(build)=scripts/gdb/linux $@ 108*f197d75fSKieran Bingham 1090a227985SNicholas Mc Guire# Keep these three files during make clean 1100a227985SNicholas Mc Guireno-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file) 111