xref: /openbmc/linux/Kbuild (revision 8d325880)
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