112e364b9f08aa335dc7716ce74113e834c993765Ken Cox#
212e364b9f08aa335dc7716ce74113e834c993765Ken Cox# Kbuild for top-level directory of the kernel
3f6d0c1e62b111bef3be279e4bf1bc2a6d560e205Benjamin Romer# This file takes care of the following:
412e364b9f08aa335dc7716ce74113e834c993765Ken Cox# 1) Generate bounds.h
512e364b9f08aa335dc7716ce74113e834c993765Ken Cox# 2) Generate asm-offsets.h (may need bounds.h)
612e364b9f08aa335dc7716ce74113e834c993765Ken Cox# 3) Check for missing system calls
712e364b9f08aa335dc7716ce74113e834c993765Ken Cox
812e364b9f08aa335dc7716ce74113e834c993765Ken Cox#####
912e364b9f08aa335dc7716ce74113e834c993765Ken Cox# 1) Generate bounds.h
1012e364b9f08aa335dc7716ce74113e834c993765Ken Cox
1112e364b9f08aa335dc7716ce74113e834c993765Ken Coxbounds-file := include/generated/bounds.h
1212e364b9f08aa335dc7716ce74113e834c993765Ken Cox
1312e364b9f08aa335dc7716ce74113e834c993765Ken Coxalways  := $(bounds-file)
1412e364b9f08aa335dc7716ce74113e834c993765Ken Coxtargets := $(bounds-file) kernel/bounds.s
1512e364b9f08aa335dc7716ce74113e834c993765Ken Cox
1612e364b9f08aa335dc7716ce74113e834c993765Ken Coxquiet_cmd_bounds = GEN     $@
1712e364b9f08aa335dc7716ce74113e834c993765Ken Coxdefine cmd_bounds
1812e364b9f08aa335dc7716ce74113e834c993765Ken Cox	(set -e; \
1912e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#ifndef __LINUX_BOUNDS_H__"; \
2012e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#define __LINUX_BOUNDS_H__"; \
2112e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "/*"; \
2212e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " * DO NOT MODIFY."; \
2312e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " *"; \
2412e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " * This file was generated by Kbuild"; \
2512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " *"; \
2612e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " */"; \
2712e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo ""; \
2812e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 sed -ne $(sed-y) $<; \
2912e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo ""; \
3012e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#endif" ) > $@
3190addb0218d47a886c846a22d75979fe5bf3471bBenjamin Romerendef
3212e364b9f08aa335dc7716ce74113e834c993765Ken Cox
3312e364b9f08aa335dc7716ce74113e834c993765Ken Cox# We use internal kbuild rules to avoid the "is up to date" message from make
3412e364b9f08aa335dc7716ce74113e834c993765Ken Coxkernel/bounds.s: kernel/bounds.c FORCE
3512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(Q)mkdir -p $(dir $@)
3612e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(call if_changed_dep,cc_s_c)
3712e364b9f08aa335dc7716ce74113e834c993765Ken Cox
388504ff6cab9cc43591999e542e437445db5cfd92Ken Cox$(obj)/$(bounds-file): kernel/bounds.s Kbuild
3912e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(Q)mkdir -p $(dir $@)
4012e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(call cmd,bounds)
4112e364b9f08aa335dc7716ce74113e834c993765Ken Cox
425fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romer#####
435fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romer# 2) Generate asm-offsets.h
445fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romer#
455fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romer
465fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romeroffsets-file := include/generated/asm-offsets.h
475fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romer
485fc0229ae5e68b8b20552b3b1944255583476c35Benjamin Romeralways  += $(offsets-file)
4912e364b9f08aa335dc7716ce74113e834c993765Ken Coxtargets += $(offsets-file)
5012e364b9f08aa335dc7716ce74113e834c993765Ken Coxtargets += arch/$(SRCARCH)/kernel/asm-offsets.s
51833c7255cebceefe3208290c4a06456ad743fa59Benjamin Romer
52833c7255cebceefe3208290c4a06456ad743fa59Benjamin Romer
5312e364b9f08aa335dc7716ce74113e834c993765Ken Cox# Default sed regexp - multiline due to syntax constraints
5412e364b9f08aa335dc7716ce74113e834c993765Ken Coxdefine sed-y
5512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	"/^->/{s:->#\(.*\):/* \1 */:; \
5682dd8152efc4bd8e8cce27df23ef033b24148616Benjamin Romer	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
5782dd8152efc4bd8e8cce27df23ef033b24148616Benjamin Romer	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
5812e364b9f08aa335dc7716ce74113e834c993765Ken Cox	s:->::; p;}"
5912e364b9f08aa335dc7716ce74113e834c993765Ken Coxendef
6012e364b9f08aa335dc7716ce74113e834c993765Ken Cox
6112e364b9f08aa335dc7716ce74113e834c993765Ken Coxquiet_cmd_offsets = GEN     $@
6212e364b9f08aa335dc7716ce74113e834c993765Ken Coxdefine cmd_offsets
6312e364b9f08aa335dc7716ce74113e834c993765Ken Cox	(set -e; \
6412e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#ifndef __ASM_OFFSETS_H__"; \
6512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#define __ASM_OFFSETS_H__"; \
6612e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "/*"; \
6712e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " * DO NOT MODIFY."; \
6812e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " *"; \
6912e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " * This file was generated by Kbuild"; \
7012e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " *"; \
7112e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo " */"; \
7212e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo ""; \
7312e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 sed -ne $(sed-y) $<; \
7412e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo ""; \
7512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	 echo "#endif" ) > $@
7612e364b9f08aa335dc7716ce74113e834c993765Ken Coxendef
7712e364b9f08aa335dc7716ce74113e834c993765Ken Cox
7812e364b9f08aa335dc7716ce74113e834c993765Ken Cox# We use internal kbuild rules to avoid the "is up to date" message from make
7917f5e49167cfca5c2c0d04863b8373736448238bBenjamin Romerarch/$(SRCARCH)/kernel/asm-offsets.s: arch/$(SRCARCH)/kernel/asm-offsets.c \
8017f5e49167cfca5c2c0d04863b8373736448238bBenjamin Romer                                      $(obj)/$(bounds-file) FORCE
8117f5e49167cfca5c2c0d04863b8373736448238bBenjamin Romer	$(Q)mkdir -p $(dir $@)
8217f5e49167cfca5c2c0d04863b8373736448238bBenjamin Romer	$(call if_changed_dep,cc_s_c)
8312e364b9f08aa335dc7716ce74113e834c993765Ken Cox
8412e364b9f08aa335dc7716ce74113e834c993765Ken Cox$(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s Kbuild
8512e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(call cmd,offsets)
8612e364b9f08aa335dc7716ce74113e834c993765Ken Cox
8712e364b9f08aa335dc7716ce74113e834c993765Ken Cox#####
8821f8c6b845e4dda0f456a0ec159455540f5376c7Benjamin Romer# 3) Check for missing system calls
8921f8c6b845e4dda0f456a0ec159455540f5376c7Benjamin Romer#
9012e364b9f08aa335dc7716ce74113e834c993765Ken Cox
9121f8c6b845e4dda0f456a0ec159455540f5376c7Benjamin Romeralways += missing-syscalls
9212e364b9f08aa335dc7716ce74113e834c993765Ken Coxtargets += missing-syscalls
9312e364b9f08aa335dc7716ce74113e834c993765Ken Cox
9412e364b9f08aa335dc7716ce74113e834c993765Ken Coxquiet_cmd_syscalls = CALL    $<
9512e364b9f08aa335dc7716ce74113e834c993765Ken Cox      cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
9612e364b9f08aa335dc7716ce74113e834c993765Ken Cox
9712e364b9f08aa335dc7716ce74113e834c993765Ken Coxmissing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
9812e364b9f08aa335dc7716ce74113e834c993765Ken Cox	$(call cmd,syscalls)
9912e364b9f08aa335dc7716ce74113e834c993765Ken Cox
10012e364b9f08aa335dc7716ce74113e834c993765Ken Cox# Keep these two files during make clean
10112e364b9f08aa335dc7716ce74113e834c993765Ken Coxno-clean-files := $(bounds-file) $(offsets-file)
10212e364b9f08aa335dc7716ce74113e834c993765Ken Cox