linux/Kbuild
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0
   2#
   3# Kbuild for top-level directory of the kernel
   4
   5# Prepare global headers and check sanity before descending into sub-directories
   6# ---------------------------------------------------------------------------
   7
   8# Generate bounds.h
   9
  10bounds-file := include/generated/bounds.h
  11
  12targets := kernel/bounds.s
  13
  14$(bounds-file): kernel/bounds.s FORCE
  15        $(call filechk,offsets,__LINUX_BOUNDS_H__)
  16
  17# Generate timeconst.h
  18
  19timeconst-file := include/generated/timeconst.h
  20
  21filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<
  22
  23$(timeconst-file): kernel/time/timeconst.bc FORCE
  24        $(call filechk,gentimeconst)
  25
  26# Generate asm-offsets.h
  27
  28offsets-file := include/generated/asm-offsets.h
  29
  30targets += arch/$(SRCARCH)/kernel/asm-offsets.s
  31
  32arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
  33
  34$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
  35        $(call filechk,offsets,__ASM_OFFSETS_H__)
  36
  37# Check for missing system calls
  38
  39quiet_cmd_syscalls = CALL    $<
  40      cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
  41
  42PHONY += missing-syscalls
  43missing-syscalls: scripts/checksyscalls.sh $(offsets-file)
  44        $(call cmd,syscalls)
  45
  46# Check the manual modification of atomic headers
  47
  48quiet_cmd_check_sha1 = CHKSHA1 $<
  49      cmd_check_sha1 = \
  50        if ! command -v sha1sum >/dev/null; then \
  51                echo "warning: cannot check the header due to sha1sum missing"; \
  52                exit 0; \
  53        fi; \
  54        if [ "$$(sed -n '$$s:// ::p' $<)" != \
  55             "$$(sed '$$d' $< | sha1sum | sed 's/ .*//')" ]; then \
  56                echo "error: $< has been modified." >&2; \
  57                exit 1; \
  58        fi; \
  59        touch $@
  60
  61atomic-checks += $(addprefix $(obj)/.checked-, \
  62          atomic-arch-fallback.h \
  63          atomic-instrumented.h \
  64          atomic-long.h)
  65
  66targets += $(atomic-checks)
  67$(atomic-checks): $(obj)/.checked-%: include/linux/atomic/%  FORCE
  68        $(call if_changed,check_sha1)
  69
  70# A phony target that depends on all the preparation targets
  71
  72PHONY += prepare
  73prepare: $(offsets-file) missing-syscalls $(atomic-checks)
  74        @:
  75
  76# Ordinary directory descending
  77# ---------------------------------------------------------------------------
  78
  79obj-y                   += init/
  80obj-y                   += usr/
  81obj-y                   += arch/$(SRCARCH)/
  82obj-y                   += $(ARCH_CORE)
  83obj-y                   += kernel/
  84obj-y                   += certs/
  85obj-y                   += mm/
  86obj-y                   += fs/
  87obj-y                   += ipc/
  88obj-y                   += security/
  89obj-y                   += crypto/
  90obj-$(CONFIG_BLOCK)     += block/
  91obj-$(CONFIG_IO_URING)  += io_uring/
  92obj-$(CONFIG_RUST)      += rust/
  93obj-y                   += $(ARCH_LIB)
  94obj-y                   += drivers/
  95obj-y                   += sound/
  96obj-$(CONFIG_SAMPLES)   += samples/
  97obj-$(CONFIG_NET)       += net/
  98obj-y                   += virt/
  99obj-y                   += $(ARCH_DRIVERS)
 100obj-$(CONFIG_DRM_HEADER_TEST)   += include/
 101