blob: 611499d0edd6461cee2c261f8d17950e6cc7b93a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2026 Richard Qin
#
# scripts/Kbuild.include — shared Make helpers for LumeOS.
#
# Mirrors a small, useful subset of Linux's scripts/Kbuild.include.
# Provides:
#
# - Q / KBUILD_VERBOSE : `make V=1` shows full commands,
# default V=0 prints a one-line summary
# - $(call cmd,<name>) : echo a quiet summary, then run cmd_<name>
# - $(call if_changed,<name>) : rebuild when inputs or the command change.
#
# Naming convention adopted from Linux: each command has both a
# `quiet_cmd_<name>` (single-line summary) and a `cmd_<name>` (full
# command line). $(quiet) selects which prefix to display:
# V=0 -> quiet := quiet_ -> echoes " CC foo.c"
# V=1 -> quiet := -> echoes the full $(CC) $(CFLAGS) ...
# ----------------------------------------------------------------------
# --- Verbosity ---------------------------------------------------------
# Override at the command line: `make V=1`. Default V=0 = quiet.
KBUILD_VERBOSE ?= $(V)
KBUILD_VERBOSE ?= 0
ifeq ($(KBUILD_VERBOSE),1)
Q :=
quiet :=
else
Q := @
quiet := quiet_
endif
# --- echo-cmd / cmd / if_changed ---------------------------------------
#
# echo-cmd prints the recipe's one-line summary (when quiet) or its full
# command line (when verbose). Implementation uses $($(quiet)cmd_<name>)
# so the right form is picked up automatically.
#
# cmd is the workhorse: print summary, then execute the real command.
echo-cmd = $(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))';)
cmd = @$(echo-cmd) $(cmd_$(1))
# Record a checksum of the exact argv next to each output. FORCE makes Make
# reconsider the action; run-if-changed executes it only for a changed input or
# command signature.
if_changed = @scripts/build/run-if-changed.sh \
$(dir $@).$(notdir $@).cmd $@ '$($(quiet)cmd_$(1))' $^ -- $(cmd_$(1))
# --- Standard quiet_cmd_* / cmd_* templates ---------------------------
#
# Subdir Makefiles and the top-level Makefile can reference these by
# name via $(call cmd,<name>). Add new pairs here as new recipe shapes
# show up (e.g., cmd_lz / cmd_gz / cmd_zstd for compressed Image targets).
quiet_cmd_cc_o_c = CC $(PRIVATE_SOURCE)
cmd_cc_o_c = $(CC) $(CFLAGS_LIBC) $(PRIVATE_INCLUDES) $(PRIVATE_DEFINES) $(PRIVATE_CFLAGS) -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_cxx_o_cc = CXX $(PRIVATE_SOURCE)
cmd_cxx_o_cc = $(CXX) $(CXXFLAGS) $(PRIVATE_INCLUDES) $(PRIVATE_DEFINES) $(PRIVATE_CXXFLAGS) -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_as_o_S = AS $(PRIVATE_SOURCE)
cmd_as_o_S = $(CC) $(ASFLAGS) $(PRIVATE_INCLUDES) $(PRIVATE_DEFINES) $(PRIVATE_ASFLAGS) -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_cc_s_c = CC -S $<
cmd_cc_s_c = $(CC) $(CFLAGS_LIBC) -S $(PRIVATE_SOURCE) -o $@
quiet_cmd_gen_asm_offsets = GEN $@
cmd_gen_asm_offsets = scripts/build/generate-asm-offsets.sh $@ \
$(ASM_OFFSETS_S) $(ASM_OFFSETS_SED) $(ASM_OFFSETS_C)
quiet_cmd_autoconf = GEN $@
cmd_autoconf = scripts/build/generate-autoconf.sh $@ \
CONFIG_NR_CPUS $(CONFIG_NR_CPUS) value \
CONFIG_HZ $(CONFIG_HZ) value \
CONFIG_NR_PRIORITIES $(CONFIG_NR_PRIORITIES) value \
CONFIG_DEFAULT_PRIORITY $(CONFIG_DEFAULT_PRIORITY) value \
CONFIG_IDLE_PRIORITY $(CONFIG_IDLE_PRIORITY) value \
CONFIG_DEFAULT_TIMESLICE $(CONFIG_DEFAULT_TIMESLICE) value \
CONFIG_PAGE_SIZE $(CONFIG_PAGE_SIZE) value \
CONFIG_MAX_ORDER $(CONFIG_MAX_ORDER) value \
CONFIG_KERNEL_STACK_SIZE $(CONFIG_KERNEL_STACK_SIZE) value \
CONFIG_KASLR $(CONFIG_KASLR) bool \
CONFIG_KASLR_POLICY_ID $(CONFIG_KASLR_POLICY_ID) value \
CONFIG_KASLR_LOG_LEVEL $(CONFIG_KASLR_LOG_LEVEL) value \
CONFIG_STACK_CANARY $(CONFIG_STACK_CANARY) bool \
CONFIG_DEBUG $(CONFIG_DEBUG) bool \
CONFIG_DEBUG_LOCKS $(CONFIG_DEBUG_LOCKS) bool \
CONFIG_SELFTEST $(CONFIG_SELFTEST) bool \
CONFIG_KLOG $(CONFIG_KLOG) bool \
CONFIG_KERNEL_COMPRESSED $(CONFIG_KERNEL_COMPRESSED) bool
quiet_cmd_linker_script = LDS $@
cmd_linker_script = $(CC) -E -P -x c $(INCLUDES) $(PRIVATE_SOURCE) -o $@
quiet_cmd_initramfs = INITRAMFS $(INITRAMFS_SOURCE)
cmd_initramfs = scripts/build/generate-initramfs.sh $(GEN_INIT_CPIO) \
./scripts/gen_initramfs.sh $@ \
$(CONFIG_INITRAMFS_ROOT_UID) $(CONFIG_INITRAMFS_ROOT_GID) \
$(INITRAMFS_SOURCE)
quiet_cmd_initramfs_obj = AS $@ (initramfs)
cmd_initramfs_obj = $(CC) $(ASFLAGS) \
-DINITRAMFS_IMAGE='"$(INITRAMFS_CPIO)"' \
-c $(PRIVATE_SOURCE) -o $@
quiet_cmd_objcopy_bin = OBJCOPY $@
cmd_objcopy_bin = $(OBJCOPY) -O binary $< $@
quiet_cmd_archive = AR $@
cmd_archive = scripts/build/archive.sh $@ $(AR) $(PRIVATE_ARCHIVE_OBJECTS)
quiet_cmd_host_tool = HOSTCC $@
cmd_host_tool = $(HOSTCC) $(HOSTCFLAGS) $(PRIVATE_HOST_CFLAGS) \
-o $@ $(PRIVATE_HOST_SOURCE)
quiet_cmd_host_cc_o_c = HOSTCC $(PRIVATE_SOURCE)
cmd_host_cc_o_c = $(HOSTCC) $(HOSTCFLAGS) -MMD -MP -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_host_cxx_o_cc = HOSTCXX $(PRIVATE_SOURCE)
cmd_host_cxx_o_cc = $(HOSTCXX) $(HOSTCXXFLAGS) -MMD -MP -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_host_archive = HOSTAR $@
cmd_host_archive = scripts/build/archive.sh $@ $(HOSTAR) $(PRIVATE_ARCHIVE_OBJECTS)
quiet_cmd_host_link = HOSTLD $@
cmd_host_link = $(HOSTCXX) $(HOSTCXXFLAGS) -o $@ \
$(PRIVATE_HOST_OBJECTS) $(PRIVATE_HOST_LIBS)
quiet_cmd_toolchain_probe = PROBE toolchain
cmd_toolchain_probe = scripts/build/probe-toolchain.sh $@ \
$(CC) $(CXX) $(LD) $(COMPILER_FAMILY) $(TARGET_TRIPLE) \
'$(GCC_TOOLCHAIN)' '$(GCC_SYSROOT)' \
'$(KTL_INCLUDE)' '$(KTL_AFTER_INCLUDE)' \
'$(KERNEL_LIBC_INCLUDE)' '$(KERNEL_LIBC_AFTER_INCLUDE)' \
'$(LIBCXX_INCLUDE)' '$(COMPILER_RESOURCE_INCLUDE)'
quiet_cmd_phys_cc_o_c = PHYSCC $(PRIVATE_SOURCE)
cmd_phys_cc_o_c = $(CC) $(PHYS_CFLAGS) -MMD -MP -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_phys_cxx_o_cc = PHYSCXX $(PRIVATE_SOURCE)
cmd_phys_cxx_o_cc = $(CXX) $(PHYS_CXXFLAGS) -MMD -MP -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_phys_as_o_S = PHYSAS $(PRIVATE_SOURCE)
cmd_phys_as_o_S = $(CC) $(PHYS_ASFLAGS) -MMD -MP -c $(PRIVATE_SOURCE) -o $@
quiet_cmd_link_vmlume = LD $@
cmd_link_vmlume = scripts/build/link-kernel.sh $@ $(SIZE) \
$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ \
$(KERNEL_LINK_INPUTS) $(INITRAMFS_OBJ)
# Objcopy with custom flags via per-target OBJCOPYFLAGS variable —
# used by the .pi.o post-processing rule (--prefix-symbols=__pi_ etc.).
quiet_cmd_objcopy = OBJCOPY $@
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
quiet_cmd_ld_kernel = LD $@
cmd_ld_kernel = $(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ $^
|