]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | # SPDX-License-Identifier: GPL-2.0 |
1da177e4 LT |
2 | # |
3 | # linux/arch/arm/boot/compressed/Makefile | |
4 | # | |
5 | # create a compressed vmlinuz image from the original vmlinux | |
6 | # | |
7 | ||
f45b1149 SH |
8 | OBJS = |
9 | ||
e69edc79 | 10 | AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET) |
1da177e4 | 11 | HEAD = head.o |
f45b1149 | 12 | OBJS += misc.o decompress.o |
3b4af9bc SG |
13 | ifeq ($(CONFIG_DEBUG_UNCOMPRESS),y) |
14 | OBJS += debug.o | |
15 | endif | |
ee89bd6b | 16 | FONTC = $(srctree)/lib/fonts/font_acorn_8x8.c |
1da177e4 | 17 | |
df4879fa NP |
18 | # string library code (-Os is enforced to keep it much smaller) |
19 | OBJS += string.o | |
20 | CFLAGS_string.o := -Os | |
21 | ||
424e5994 DM |
22 | ifeq ($(CONFIG_ARM_VIRT_EXT),y) |
23 | OBJS += hyp-stub.o | |
24 | endif | |
25 | ||
75c34906 VS |
26 | GCOV_PROFILE := n |
27 | ||
1da177e4 LT |
28 | # |
29 | # Architecture dependencies | |
30 | # | |
31 | ifeq ($(CONFIG_ARCH_ACORN),y) | |
4486b863 | 32 | OBJS += ll_char_wr.o font.o |
1da177e4 LT |
33 | endif |
34 | ||
1da177e4 LT |
35 | ifeq ($(CONFIG_ARCH_SA1100),y) |
36 | OBJS += head-sa1100.o | |
37 | endif | |
38 | ||
39 | ifeq ($(CONFIG_CPU_XSCALE),y) | |
40 | OBJS += head-xscale.o | |
41 | endif | |
42 | ||
9c3fca2e | 43 | ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y) |
1da177e4 LT |
44 | OBJS += head-sharpsl.o |
45 | endif | |
46 | ||
26584853 | 47 | ifeq ($(CONFIG_CPU_ENDIAN_BE32),y) |
f12d0d7c | 48 | ifeq ($(CONFIG_CPU_CP15),y) |
1da177e4 | 49 | OBJS += big-endian.o |
f12d0d7c HC |
50 | else |
51 | # The endian should be set by h/w design. | |
52 | endif | |
1da177e4 LT |
53 | endif |
54 | ||
55 | # | |
56 | # We now have a PIC decompressor implementation. Decompressors running | |
57 | # from RAM should not define ZTEXTADDR. Decompressors running directly | |
58 | # from ROM or Flash must define ZTEXTADDR (preferably via the config) | |
59 | # FIXME: Previous assignment to ztextaddr-y is lost here. See SHARK | |
60 | ifeq ($(CONFIG_ZBOOT_ROM),y) | |
61 | ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT) | |
62 | ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS) | |
63 | else | |
64 | ZTEXTADDR := 0 | |
3bd2cbb9 | 65 | ZBSSADDR := ALIGN(8) |
1da177e4 LT |
66 | endif |
67 | ||
c79bf928 | 68 | CPPFLAGS_vmlinux.lds := -DTEXT_START="$(ZTEXTADDR)" -DBSS_START="$(ZBSSADDR)" |
1da177e4 | 69 | |
f57deb0b MY |
70 | compress-$(CONFIG_KERNEL_GZIP) = gzip |
71 | compress-$(CONFIG_KERNEL_LZO) = lzo | |
72 | compress-$(CONFIG_KERNEL_LZMA) = lzma | |
73 | compress-$(CONFIG_KERNEL_XZ) = xzkern | |
74 | compress-$(CONFIG_KERNEL_LZ4) = lz4 | |
e7db7b42 | 75 | |
b90b9a38 NP |
76 | # Borrowed libfdt files for the ATAG compatibility mode |
77 | ||
78 | libfdt := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c | |
79 | libfdt_hdrs := fdt.h libfdt.h libfdt_internal.h | |
80 | ||
81 | libfdt_objs := $(addsuffix .o, $(basename $(libfdt))) | |
82 | ||
83 | $(addprefix $(obj)/,$(libfdt) $(libfdt_hdrs)): $(obj)/%: $(srctree)/scripts/dtc/libfdt/% | |
84 | $(call cmd,shipped) | |
85 | ||
86 | $(addprefix $(obj)/,$(libfdt_objs) atags_to_fdt.o): \ | |
87 | $(addprefix $(obj)/,$(libfdt_hdrs)) | |
88 | ||
89 | ifeq ($(CONFIG_ARM_ATAG_DTB_COMPAT),y) | |
90 | OBJS += $(libfdt_objs) atags_to_fdt.o | |
91 | endif | |
92 | ||
53f67545 | 93 | targets := vmlinux vmlinux.lds piggy_data piggy.o \ |
b44c72de | 94 | lib1funcs.o ashldi3.o bswapsdi2.o \ |
684c1201 | 95 | head.o $(OBJS) |
014c257c | 96 | |
53f67545 MY |
97 | clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S \ |
98 | $(libfdt) $(libfdt_hdrs) hyp-stub.S | |
f1b957d3 | 99 | |
8c36a757 AB |
100 | KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING |
101 | ||
606576ce | 102 | ifeq ($(CONFIG_FUNCTION_TRACER),y) |
014c257c AS |
103 | ORIG_CFLAGS := $(KBUILD_CFLAGS) |
104 | KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) | |
105 | endif | |
106 | ||
7f66cd3f KC |
107 | # -fstack-protector-strong triggers protection checks in this code, |
108 | # but it is being used too early to link to meaningful stack_chk logic. | |
109 | nossp_flags := $(call cc-option, -fno-stack-protector) | |
110 | CFLAGS_atags_to_fdt.o := $(nossp_flags) | |
111 | CFLAGS_fdt.o := $(nossp_flags) | |
112 | CFLAGS_fdt_ro.o := $(nossp_flags) | |
113 | CFLAGS_fdt_rw.o := $(nossp_flags) | |
114 | CFLAGS_fdt_wip.o := $(nossp_flags) | |
115 | ||
b8083f86 | 116 | ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj) |
da94a829 | 117 | asflags-y := -DZIMAGE |
1da177e4 | 118 | |
5ffb04f6 | 119 | # Supply kernel BSS size to the decompressor via a linker symbol. |
1ec332a3 JK |
120 | KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \ |
121 | awk 'END{print $$3}') | |
5ffb04f6 | 122 | LDFLAGS_vmlinux = --defsym _kernel_bss_size=$(KBSS_SZ) |
9e84ed63 RK |
123 | # Supply ZRELADDR to the decompressor via a linker symbol. |
124 | ifneq ($(CONFIG_AUTO_ZRELADDR),y) | |
d239b1dc | 125 | LDFLAGS_vmlinux += --defsym zreladdr=$(ZRELADDR) |
9e84ed63 | 126 | endif |
26584853 CM |
127 | ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) |
128 | LDFLAGS_vmlinux += --be8 | |
129 | endif | |
e7db7b42 AT |
130 | # ? |
131 | LDFLAGS_vmlinux += -p | |
132 | # Report unresolved symbol references | |
133 | LDFLAGS_vmlinux += --no-undefined | |
134 | # Delete all temporary local symbols | |
135 | LDFLAGS_vmlinux += -X | |
136 | # Next argument is a linker script | |
137 | LDFLAGS_vmlinux += -T | |
138 | ||
139 | # For __aeabi_uidivmod | |
140 | lib1funcs = $(obj)/lib1funcs.o | |
141 | ||
63d15148 | 142 | $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S |
e7db7b42 | 143 | $(call cmd,shipped) |
1da177e4 | 144 | |
a7f464f3 IK |
145 | # For __aeabi_llsl |
146 | ashldi3 = $(obj)/ashldi3.o | |
147 | ||
148 | $(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S | |
149 | $(call cmd,shipped) | |
150 | ||
017f161a KP |
151 | # For __bswapsi2, __bswapdi2 |
152 | bswapsdi2 = $(obj)/bswapsdi2.o | |
153 | ||
154 | $(obj)/bswapsdi2.S: $(srctree)/arch/$(SRCARCH)/lib/bswapsdi2.S | |
155 | $(call cmd,shipped) | |
156 | ||
8d7e4cc2 NP |
157 | # We need to prevent any GOTOFF relocs being used with references |
158 | # to symbols in the .bss section since we cannot relocate them | |
159 | # independently from the rest at run time. This can be achieved by | |
160 | # ensuring that no private .bss symbols exist, as global symbols | |
161 | # always have a GOT entry which is what we need. | |
162 | # The .data section is already discarded by the linker script so no need | |
163 | # to bother about it here. | |
164 | check_for_bad_syms = \ | |
165 | bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \ | |
166 | [ -z "$$bad_syms" ] || \ | |
167 | ( echo "following symbols must have non local/private scope:" >&2; \ | |
168 | echo "$$bad_syms" >&2; rm -f $@; false ) | |
169 | ||
60aac932 | 170 | check_for_multiple_zreladdr = \ |
4bdad983 | 171 | if [ $(words $(ZRELADDR)) -gt 1 -a "$(CONFIG_AUTO_ZRELADDR)" = "" ]; then \ |
60aac932 SH |
172 | echo 'multiple zreladdrs: $(ZRELADDR)'; \ |
173 | echo 'This needs CONFIG_AUTO_ZRELADDR to be set'; \ | |
174 | false; \ | |
175 | fi | |
176 | ||
81a0bc39 RF |
177 | efi-obj-$(CONFIG_EFI_STUB) := $(objtree)/drivers/firmware/efi/libstub/lib.a |
178 | ||
53f67545 | 179 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \ |
017f161a | 180 | $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) \ |
81a0bc39 | 181 | $(bswapsdi2) $(efi-obj-y) FORCE |
60aac932 | 182 | @$(check_for_multiple_zreladdr) |
1da177e4 | 183 | $(call if_changed,ld) |
8d7e4cc2 | 184 | @$(check_for_bad_syms) |
1da177e4 | 185 | |
53f67545 | 186 | $(obj)/piggy_data: $(obj)/../Image FORCE |
f57deb0b | 187 | $(call if_changed,$(compress-y)) |
1da177e4 | 188 | |
53f67545 | 189 | $(obj)/piggy.o: $(obj)/piggy_data |
1da177e4 | 190 | |
4486b863 RK |
191 | CFLAGS_font.o := -Dstatic= |
192 | ||
193 | $(obj)/font.c: $(FONTC) | |
194 | $(call cmd,shipped) | |
1da177e4 | 195 | |
c7edd7f9 JPB |
196 | AFLAGS_hyp-stub.o := -Wa,-march=armv7-a |
197 | ||
424e5994 DM |
198 | $(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S |
199 | $(call cmd,shipped) |