summaryrefslogtreecommitdiff
path: root/scripts/Makefile.vmlinux
blob: b0a6cd5b818c9fe19d20f5ddf4908eb14b888ea9 (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
# SPDX-License-Identifier: GPL-2.0-only

PHONY := __default
__default: vmlinux

include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include
include $(srctree)/scripts/Makefile.lib

targets :=

ifdef CONFIG_ARCH_VMLINUX_NEEDS_RELOCS
vmlinux-final := vmlinux.unstripped

quiet_cmd_strip_relocs = RSTRIP  $@
      cmd_strip_relocs = $(OBJCOPY) --remove-section='.rel*' $< $@

vmlinux: $(vmlinux-final) FORCE
	$(call if_changed,strip_relocs)

targets += vmlinux
else
vmlinux-final := vmlinux
endif

%.o: %.c FORCE
	$(call if_changed_rule,cc_o_c)

%.o: %.S FORCE
	$(call if_changed_rule,as_o_S)

# Built-in dtb
# ---------------------------------------------------------------------------

quiet_cmd_wrap_dtbs = WRAP    $@
      cmd_wrap_dtbs = {							\
	echo '\#include <asm-generic/vmlinux.lds.h>';			\
	echo '.section .dtb.init.rodata,"a"';				\
	while read dtb; do						\
		symbase=__dtb_$$(basename -s .dtb "$${dtb}" | tr - _);	\
		echo '.balign STRUCT_ALIGNMENT';			\
		echo ".global $${symbase}_begin";			\
		echo "$${symbase}_begin:";				\
		echo '.incbin "'$$dtb'" ';				\
		echo ".global $${symbase}_end";				\
		echo "$${symbase}_end:";				\
	done < $<;							\
	} > $@

.builtin-dtbs.S: .builtin-dtbs-list FORCE
	$(call if_changed,wrap_dtbs)

quiet_cmd_gen_dtbs_list = GEN     $@
      cmd_gen_dtbs_list = \
	$(if $(CONFIG_BUILTIN_DTB_NAME), echo "arch/$(SRCARCH)/boot/dts/$(CONFIG_BUILTIN_DTB_NAME).dtb",:) > $@

.builtin-dtbs-list: arch/$(SRCARCH)/boot/dts/dtbs-list FORCE
	$(call if_changed,$(if $(CONFIG_BUILTIN_DTB_ALL),copy,gen_dtbs_list))

targets += .builtin-dtbs-list

ifdef CONFIG_GENERIC_BUILTIN_DTB
targets += .builtin-dtbs.S .builtin-dtbs.o
$(vmlinux-final): .builtin-dtbs.o
endif

# vmlinux
# ---------------------------------------------------------------------------

ifdef CONFIG_MODULES
targets += .vmlinux.export.o
$(vmlinux-final): .vmlinux.export.o
endif

ifdef CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX
$(vmlinux-final): arch/$(SRCARCH)/tools/vmlinux.arch.o

arch/$(SRCARCH)/tools/vmlinux.arch.o: vmlinux.o FORCE
	$(Q)$(MAKE) $(build)=arch/$(SRCARCH)/tools $@
endif

ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

# Final link of vmlinux with optional arch pass after final link
cmd_link_vmlinux =							\
	$< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)" "$@";	\
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)

targets += $(vmlinux-final)
$(vmlinux-final): scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE
	+$(call if_changed_dep,link_vmlinux)
ifdef CONFIG_DEBUG_INFO_BTF
$(vmlinux-final): $(RESOLVE_BTFIDS)
endif

ifdef CONFIG_BUILDTIME_TABLE_SORT
vmlinux: scripts/sorttable
endif

# module.builtin.ranges
# ---------------------------------------------------------------------------
ifdef CONFIG_BUILTIN_MODULE_RANGES
__default: modules.builtin.ranges

quiet_cmd_modules_builtin_ranges = GEN     $@
      cmd_modules_builtin_ranges = gawk -f $(real-prereqs) > $@

targets += modules.builtin.ranges
modules.builtin.ranges: $(srctree)/scripts/generate_builtin_ranges.awk \
			modules.builtin vmlinux.map vmlinux.o.map FORCE
	$(call if_changed,modules_builtin_ranges)

vmlinux.map: $(vmlinux-final)
	@:

endif

# Add FORCE to the prerequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------

PHONY += FORCE
FORCE:

# Read all saved command lines and dependencies for the $(targets) we
# may be building above, using $(if_changed{,_dep}). As an
# optimization, we don't need to read them if the target does not
# exist, we will rebuild anyway in that case.

existing-targets := $(wildcard $(sort $(targets)))

-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)

.PHONY: $(PHONY)
020-07-28xfs: stop using q_core timers in the quota codeDarrick J. Wong 2020-07-28xfs: stop using q_core warning counters in the quota codeDarrick J. Wong 2020-07-28xfs: stop using q_core counters in the quota codeDarrick J. Wong 2020-07-28xfs: stop using q_core limits in the quota codeDarrick J. Wong 2020-07-28xfs: use a per-resource struct for incore dquot dataDarrick J. Wong 2020-07-28xfs: stop using q_core.d_id in the quota codeDarrick J. Wong 2020-07-28xfs: rename dquot incore state flagsDarrick J. Wong 2020-07-28xfs: fix inode quota reservation checksDarrick J. Wong 2020-05-27xfs: per-type quota timers and warn limitsEric Sandeen 2020-05-27xfs: switch xfs_get_defquota to take explicit typeEric Sandeen 2020-05-27xfs: pass xfs_dquot to xfs_qm_adjust_dqtimersEric Sandeen 2020-05-27xfs: always return -ENOSPC on project quota reservation failureEric Sandeen 2020-05-27xfs: group quota should return EDQUOT when prj quota enabledEric Sandeen 2020-01-06xfs: quota: move to time64_t interfacesArnd Bergmann 2019-11-18xfs: Remove kmem_zone_free() wrapperCarlos Maiolino 2019-11-13xfs: remove the xfs_qoff_logitem_t typedefPavel Reichl 2019-11-13xfs: remove the xfs_quotainfo_t typedefPavel Reichl 2019-11-13xfs: remove the xfs_disk_dquot_t and xfs_dquot_tPavel Reichl