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