1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 286feeaa8SSam Ravnborg# 386feeaa8SSam Ravnborg# Kbuild for top-level directory of the kernel 486feeaa8SSam Ravnborg# This file takes care of the following: 51cdf25d7SChristoph Lameter# 1) Generate bounds.h 60a227985SNicholas Mc Guire# 2) Generate timeconst.h 70a227985SNicholas Mc Guire# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h) 80a227985SNicholas Mc Guire# 4) Check for missing system calls 9*8d325880SMark Rutland# 5) check atomics headers are up-to-date 10*8d325880SMark Rutland# 6) Generate constants.py (may need bounds.h) 1186feeaa8SSam Ravnborg 1239664e2fSMasahiro Yamada##### 1339664e2fSMasahiro Yamada# 1) Generate bounds.h 1439664e2fSMasahiro Yamada 1539664e2fSMasahiro Yamadabounds-file := include/generated/bounds.h 1639664e2fSMasahiro Yamada 1739664e2fSMasahiro Yamadaalways := $(bounds-file) 188a58e162SMasahiro Yamadatargets := kernel/bounds.s 1939664e2fSMasahiro Yamada 2039664e2fSMasahiro Yamada# We use internal kbuild rules to avoid the "is up to date" message from make 2139664e2fSMasahiro Yamadakernel/bounds.s: kernel/bounds.c FORCE 2239664e2fSMasahiro Yamada $(call if_changed_dep,cc_s_c) 2339664e2fSMasahiro Yamada 2470a4fd6cSMichal Marek$(obj)/$(bounds-file): kernel/bounds.s FORCE 2570a4fd6cSMichal Marek $(call filechk,offsets,__LINUX_BOUNDS_H__) 2639664e2fSMasahiro Yamada 2739664e2fSMasahiro Yamada##### 280a227985SNicholas Mc Guire# 2) Generate timeconst.h 290a227985SNicholas Mc Guire 300a227985SNicholas Mc Guiretimeconst-file := include/generated/timeconst.h 310a227985SNicholas Mc Guire 320a227985SNicholas Mc Guiretargets += $(timeconst-file) 330a227985SNicholas Mc Guire 340a227985SNicholas Mc Guirequiet_cmd_gentimeconst = GEN $@ 350a227985SNicholas Mc Guiredefine cmd_gentimeconst 360a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) > $@ 370a227985SNicholas Mc Guireendef 380a227985SNicholas Mc Guiredefine filechk_gentimeconst 390a227985SNicholas Mc Guire (echo $(CONFIG_HZ) | bc -q $< ) 400a227985SNicholas Mc Guireendef 410a227985SNicholas Mc Guire 420a227985SNicholas Mc Guire$(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE 430a227985SNicholas Mc Guire $(call filechk,gentimeconst) 440a227985SNicholas Mc Guire 450a227985SNicholas Mc Guire##### 460a227985SNicholas Mc Guire# 3) Generate asm-offsets.h 4739664e2fSMasahiro Yamada# 4839664e2fSMasahiro Yamada 4939664e2fSMasahiro Yamadaoffsets-file := include/generated/asm-offsets.h 5039664e2fSMasahiro Yamada 5139664e2fSMasahiro Yamadaalways += $(offsets-file) 5239664e2fSMasahiro Yamadatargets += arch/$(SRCARCH)/kernel/asm-offsets.s 5339664e2fSMasahiro Yamada 5486feeaa8SSam Ravnborg# We use internal kbuild rules to avoid the "is up to date" message from make 551cdf25d7SChristoph Lameterarch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \ 560a227985SNicholas Mc Guire $(obj)/$(timeconst-file) $(obj)/$(bounds-file) FORCE 5786feeaa8SSam Ravnborg $(call if_changed_dep,cc_s_c) 5886feeaa8SSam Ravnborg 5970a4fd6cSMichal Marek$(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE 6070a4fd6cSMichal Marek $(call filechk,offsets,__ASM_OFFSETS_H__) 6186feeaa8SSam Ravnborg 62c53aeca0SSam Ravnborg##### 630a227985SNicholas Mc Guire# 4) Check for missing system calls 64c53aeca0SSam Ravnborg# 65c53aeca0SSam Ravnborg 665f7efb4cSArnaud Lacombealways += missing-syscalls 675f7efb4cSArnaud Lacombetargets += missing-syscalls 685f7efb4cSArnaud Lacombe 69c53aeca0SSam Ravnborgquiet_cmd_syscalls = CALL $< 7044656fa0SDavid Daney cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags) 71c53aeca0SSam Ravnborg 725f7efb4cSArnaud Lacombemissing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE 73c53aeca0SSam Ravnborg $(call cmd,syscalls) 741cdf25d7SChristoph Lameter 75f197d75fSKieran Bingham##### 76*8d325880SMark Rutland# 5) Check atomic headers are up-to-date 77*8d325880SMark Rutland# 78*8d325880SMark Rutland 79*8d325880SMark Rutlandalways += old-atomics 80*8d325880SMark Rutlandtargets += old-atomics 81*8d325880SMark Rutland 82*8d325880SMark Rutlandquiet_cmd_atomics = CALL $< 83*8d325880SMark Rutland cmd_atomics = $(CONFIG_SHELL) scripts/atomic/check-atomics.sh 84*8d325880SMark Rutland 85*8d325880SMark Rutlandold-atomics: scripts/atomic/check-atomics.sh FORCE 86*8d325880SMark Rutland $(call cmd,atomics) 87*8d325880SMark Rutland 88*8d325880SMark Rutland##### 89*8d325880SMark Rutland# 6) Generate constants for Python GDB integration 90f197d75fSKieran Bingham# 91f197d75fSKieran Bingham 92f197d75fSKieran Binghamextra-$(CONFIG_GDB_SCRIPTS) += build_constants_py 93f197d75fSKieran Bingham 94f197d75fSKieran Binghambuild_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file) 95f197d75fSKieran Bingham @$(MAKE) $(build)=scripts/gdb/linux $@ 96f197d75fSKieran Bingham 970a227985SNicholas Mc Guire# Keep these three files during make clean 980a227985SNicholas Mc Guireno-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file) 99