1 # 2 # arch/arm/Makefile 3 # 4 # This file is included by the global makefile so that you can add your own 5 # architecture-specific flags and dependencies. 6 # 7 # This file is subject to the terms and conditions of the GNU General Public 8 # License. See the file "COPYING" in the main directory of this archive 9 # for more details. 10 # 11 # Copyright (C) 1995-2001 by Russell King 12 13 LDFLAGS_vmlinux := --no-undefined -X --pic-veneer -z norelro 14 ifeq ($(CONFIG_CPU_ENDIAN_BE8),y) 15 LDFLAGS_vmlinux += --be8 16 KBUILD_LDFLAGS_MODULE += --be8 17 endif 18 19 GZFLAGS :=-9 20 #KBUILD_CFLAGS +=-pipe 21 22 # Never generate .eh_frame 23 KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) 24 25 # Disable FDPIC ABI 26 KBUILD_CFLAGS += $(call cc-option,-mno-fdpic) 27 28 # This should work on most of the modern platforms 29 KBUILD_DEFCONFIG := multi_v7_defconfig 30 31 # defines filename extension depending memory management type. 32 ifeq ($(CONFIG_MMU),) 33 MMUEXT := -nommu 34 KBUILD_CFLAGS += $(call cc-option,-mno-unaligned-access) 35 endif 36 37 ifeq ($(CONFIG_FRAME_POINTER),y) 38 KBUILD_CFLAGS +=-fno-omit-frame-pointer 39 ifeq ($(CONFIG_CC_IS_GCC),y) 40 KBUILD_CFLAGS += -mapcs -mno-sched-prolog 41 endif 42 endif 43 44 ifeq ($(CONFIG_CPU_BIG_ENDIAN),y) 45 KBUILD_CPPFLAGS += -mbig-endian 46 CHECKFLAGS += -D__ARMEB__ 47 KBUILD_LDFLAGS += -EB 48 else 49 KBUILD_CPPFLAGS += -mlittle-endian 50 CHECKFLAGS += -D__ARMEL__ 51 KBUILD_LDFLAGS += -EL 52 endif 53 54 # 55 # The Scalar Replacement of Aggregates (SRA) optimization pass in GCC 4.9 and 56 # later may result in code being generated that handles signed short and signed 57 # char struct members incorrectly. So disable it. 58 # (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932) 59 # 60 KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra) 61 62 # This selects which instruction set is used. 63 arch-$(CONFIG_CPU_32v7M) :=-march=armv7-m 64 arch-$(CONFIG_CPU_32v7) :=-march=armv7-a 65 arch-$(CONFIG_CPU_32v6) :=-march=armv6 66 # Only override the compiler option if ARMv6. The ARMv6K extensions are 67 # always available in ARMv7 68 ifeq ($(CONFIG_CPU_32v6),y) 69 arch-$(CONFIG_CPU_32v6K) :=-march=armv6k 70 endif 71 arch-$(CONFIG_CPU_32v5) :=-march=armv5te 72 arch-$(CONFIG_CPU_32v4T) :=-march=armv4t 73 arch-$(CONFIG_CPU_32v4) :=-march=armv4 74 arch-$(CONFIG_CPU_32v3) :=-march=armv3m 75 76 # Note that GCC does not numerically define an architecture version 77 # macro, but instead defines a whole series of macros which makes 78 # testing for a specific architecture or later rather impossible. 79 cpp-$(CONFIG_CPU_32v7M) :=-D__LINUX_ARM_ARCH__=7 80 cpp-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 81 cpp-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 82 # Only override the compiler option if ARMv6. The ARMv6K extensions are 83 # always available in ARMv7 84 ifeq ($(CONFIG_CPU_32v6),y) 85 cpp-$(CONFIG_CPU_32v6K) :=-D__LINUX_ARM_ARCH__=6 86 endif 87 cpp-$(CONFIG_CPU_32v5) :=-D__LINUX_ARM_ARCH__=5 88 cpp-$(CONFIG_CPU_32v4T) :=-D__LINUX_ARM_ARCH__=4 89 cpp-$(CONFIG_CPU_32v4) :=-D__LINUX_ARM_ARCH__=4 90 cpp-$(CONFIG_CPU_32v3) :=-D__LINUX_ARM_ARCH__=3 91 92 # This selects how we optimise for the processor. 93 tune-$(CONFIG_CPU_ARM7TDMI) :=-mtune=arm7tdmi 94 tune-$(CONFIG_CPU_ARM720T) :=-mtune=arm7tdmi 95 tune-$(CONFIG_CPU_ARM740T) :=-mtune=arm7tdmi 96 tune-$(CONFIG_CPU_ARM9TDMI) :=-mtune=arm9tdmi 97 tune-$(CONFIG_CPU_ARM940T) :=-mtune=arm9tdmi 98 tune-$(CONFIG_CPU_ARM946E) :=-mtune=arm9e 99 tune-$(CONFIG_CPU_ARM920T) :=-mtune=arm9tdmi 100 tune-$(CONFIG_CPU_ARM922T) :=-mtune=arm9tdmi 101 tune-$(CONFIG_CPU_ARM925T) :=-mtune=arm9tdmi 102 tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm9tdmi 103 tune-$(CONFIG_CPU_FA526) :=-mtune=arm9tdmi 104 tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110 105 tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100 106 tune-$(CONFIG_CPU_XSCALE) :=-mtune=xscale 107 tune-$(CONFIG_CPU_XSC3) :=-mtune=xscale 108 tune-$(CONFIG_CPU_FEROCEON) :=-mtune=xscale 109 tune-$(CONFIG_CPU_V6) :=-mtune=arm1136j-s 110 tune-$(CONFIG_CPU_V6K) :=-mtune=arm1136j-s 111 112 ifeq ($(CONFIG_AEABI),y) 113 CFLAGS_ABI :=-mabi=aapcs-linux -mfpu=vfp 114 else 115 CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,) 116 endif 117 118 ifeq ($(CONFIG_ARM_UNWIND),y) 119 CFLAGS_ABI +=-funwind-tables 120 endif 121 122 ifeq ($(CONFIG_CC_IS_CLANG),y) 123 CFLAGS_ABI += -meabi gnu 124 endif 125 126 ifeq ($(CONFIG_CURRENT_POINTER_IN_TPIDRURO),y) 127 KBUILD_CFLAGS += -mtp=cp15 128 endif 129 130 # Accept old syntax despite ".syntax unified" 131 AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W) 132 133 # The GCC option -ffreestanding is required in order to compile code containing 134 # ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel) 135 CC_FLAGS_FPU := -ffreestanding 136 # Enable <arm_neon.h> 137 CC_FLAGS_FPU += -isystem $(shell $(CC) -print-file-name=include) 138 CC_FLAGS_FPU += -march=armv7-a -mfloat-abi=softfp -mfpu=neon 139 140 ifeq ($(CONFIG_THUMB2_KERNEL),y) 141 CFLAGS_ISA :=-Wa,-mimplicit-it=always $(AFLAGS_NOWARN) 142 AFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb 143 CFLAGS_ISA +=-mthumb 144 else 145 CFLAGS_ISA :=$(call cc-option,-marm,) $(AFLAGS_NOWARN) 146 AFLAGS_ISA :=$(CFLAGS_ISA) 147 endif 148 149 # Need -Uarm for gcc < 3.x 150 KBUILD_CPPFLAGS +=$(cpp-y) 151 KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm 152 KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) -Wa,$(arch-y) $(tune-y) -include asm/unified.h -msoft-float 153 154 CHECKFLAGS += -D__arm__ 155 156 # Text offset. This list is sorted numerically by address in order to 157 # provide a means to avoid/resolve conflicts in multi-arch kernels. 158 # Note: the 32kB below this value is reserved for use by the kernel 159 # during boot, and this offset is critical to the functioning of 160 # kexec-tools. 161 textofs-y := 0x00008000 162 # RTD1195 has Boot ROM at start of address space 163 textofs-$(CONFIG_ARCH_REALTEK) := 0x00108000 164 # SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory 165 ifeq ($(CONFIG_ARCH_SA1100),y) 166 textofs-$(CONFIG_SA1111) := 0x00208000 167 endif 168 textofs-$(CONFIG_ARCH_QCOM_RESERVE_SMEM) := 0x00208000 169 textofs-$(CONFIG_ARCH_MESON) := 0x00208000 170 textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000 171 172 # Machine directory name. This list is sorted alphanumerically 173 # by CONFIG_* macro name. 174 machine-$(CONFIG_ARCH_ACTIONS) += actions 175 machine-$(CONFIG_ARCH_ALPINE) += alpine 176 machine-$(CONFIG_ARCH_ARTPEC) += artpec 177 machine-$(CONFIG_ARCH_ASPEED) += aspeed 178 machine-$(CONFIG_ARCH_AT91) += at91 179 machine-$(CONFIG_ARCH_AXXIA) += axxia 180 machine-$(CONFIG_ARCH_BCM) += bcm 181 machine-$(CONFIG_ARCH_BERLIN) += berlin 182 machine-$(CONFIG_ARCH_CLPS711X) += clps711x 183 machine-$(CONFIG_ARCH_DAVINCI) += davinci 184 machine-$(CONFIG_ARCH_DIGICOLOR) += digicolor 185 machine-$(CONFIG_ARCH_DOVE) += dove 186 machine-$(CONFIG_ARCH_EXYNOS) += exynos 187 machine-$(CONFIG_ARCH_FOOTBRIDGE) += footbridge 188 machine-$(CONFIG_ARCH_GEMINI) += gemini 189 machine-$(CONFIG_ARCH_HIGHBANK) += highbank 190 machine-$(CONFIG_ARCH_HISI) += hisi 191 machine-$(CONFIG_ARCH_HPE) += hpe 192 machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx 193 machine-$(CONFIG_ARCH_KEYSTONE) += keystone 194 machine-$(CONFIG_ARCH_LPC18XX) += lpc18xx 195 machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx 196 machine-$(CONFIG_ARCH_MESON) += meson 197 machine-$(CONFIG_ARCH_MMP) += mmp 198 machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 199 machine-$(CONFIG_ARCH_MVEBU) += mvebu 200 machine-$(CONFIG_ARCH_MXC) += imx 201 machine-$(CONFIG_ARCH_MEDIATEK) += mediatek 202 machine-$(CONFIG_ARCH_MILBEAUT) += milbeaut 203 machine-$(CONFIG_ARCH_MXS) += mxs 204 machine-$(CONFIG_ARCH_MSTARV7) += mstar 205 machine-$(CONFIG_ARCH_NOMADIK) += nomadik 206 machine-$(CONFIG_ARCH_NPCM) += npcm 207 machine-$(CONFIG_ARCH_OMAP1) += omap1 208 machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 209 machine-$(CONFIG_ARCH_ORION5X) += orion5x 210 machine-$(CONFIG_ARCH_PXA) += pxa 211 machine-$(CONFIG_ARCH_QCOM) += qcom 212 machine-$(CONFIG_ARCH_REALTEK) += realtek 213 machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip 214 machine-$(CONFIG_ARCH_RPC) += rpc 215 machine-$(CONFIG_PLAT_SAMSUNG) += s3c 216 machine-$(CONFIG_ARCH_S5PV210) += s5pv210 217 machine-$(CONFIG_ARCH_SA1100) += sa1100 218 machine-$(CONFIG_ARCH_RENESAS) += shmobile 219 machine-$(CONFIG_ARCH_INTEL_SOCFPGA) += socfpga 220 machine-$(CONFIG_ARCH_STI) += sti 221 machine-$(CONFIG_ARCH_STM32) += stm32 222 machine-$(CONFIG_ARCH_SUNXI) += sunxi 223 machine-$(CONFIG_ARCH_TEGRA) += tegra 224 machine-$(CONFIG_ARCH_U8500) += ux500 225 machine-$(CONFIG_ARCH_VT8500) += vt8500 226 machine-$(CONFIG_ARCH_ZYNQ) += zynq 227 machine-$(CONFIG_PLAT_VERSATILE) += versatile 228 machine-$(CONFIG_PLAT_SPEAR) += spear 229 230 # legacy platforms provide their own mach/*.h headers globally, 231 # these three are mutually exclusive 232 machdirs-$(CONFIG_ARCH_FOOTBRIDGE) += arch/arm/mach-footbridge 233 machdirs-$(CONFIG_ARCH_RPC) += arch/arm/mach-rpc 234 machdirs-$(CONFIG_ARCH_SA1100) += arch/arm/mach-sa1100 235 KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%/include,$(machdirs-y)) 236 237 # The byte offset of the kernel image in RAM from the start of RAM. 238 TEXT_OFFSET := $(textofs-y) 239 240 export TEXT_OFFSET GZFLAGS MMUEXT 241 242 # If we have a machine-specific directory, then include it in the build. 243 core-y += $(patsubst %,arch/arm/mach-%/,$(machine-y)) 244 # For cleaning 245 core- += $(patsubst %,arch/arm/mach-%/,$(machine-)) 246 247 core-$(CONFIG_PLAT_ORION) += arch/arm/plat-orion/ 248 249 libs-y := arch/arm/lib/ $(libs-y) 250 251 # Default target when executing plain make 252 boot := arch/arm/boot 253 ifeq ($(CONFIG_XIP_KERNEL),y) 254 KBUILD_IMAGE := $(boot)/xipImage 255 else 256 KBUILD_IMAGE := $(boot)/zImage 257 endif 258 259 ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y) 260 prepare: stack_protector_prepare 261 ifeq ($(CONFIG_CC_HAVE_STACKPROTECTOR_TLS),y) 262 stack_protector_prepare: prepare0 263 $(eval KBUILD_CFLAGS += \ 264 -mstack-protector-guard=tls \ 265 -mstack-protector-guard-offset=$(shell \ 266 awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}'\ 267 include/generated/asm-offsets.h)) 268 else 269 stack_protector_prepare: prepare0 270 $(eval SSP_PLUGIN_CFLAGS := \ 271 -fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \ 272 awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}'\ 273 include/generated/asm-offsets.h)) 274 $(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS)) 275 $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS)) 276 endif 277 endif 278 279 all: $(notdir $(KBUILD_IMAGE)) 280 281 282 archheaders: 283 $(Q)$(MAKE) $(build)=arch/arm/tools uapi 284 285 archprepare: 286 $(Q)$(MAKE) $(build)=arch/arm/tools kapi 287 288 # Convert bzImage to zImage 289 bzImage: zImage 290 291 BOOT_TARGETS = zImage Image xipImage bootpImage uImage 292 INSTALL_TARGETS = zinstall uinstall install 293 294 PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS) 295 296 bootpImage uImage: zImage 297 zImage: Image 298 299 $(BOOT_TARGETS): vmlinux 300 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 301 @$(kecho) ' Kernel: $(boot)/$@ is ready' 302 303 $(INSTALL_TARGETS): KBUILD_IMAGE = $(boot)/$(patsubst %install,%Image,$@) 304 $(INSTALL_TARGETS): 305 $(call cmd,install) 306 307 vdso-install-$(CONFIG_VDSO) += arch/arm/vdso/vdso.so.dbg 308 309 # My testing targets (bypasses dependencies) 310 bp:; $(Q)$(MAKE) $(build)=$(boot) $(boot)/bootpImage 311 312 include $(srctree)/scripts/Makefile.defconf 313 PHONY += multi_v7_lpae_defconfig 314 multi_v7_lpae_defconfig: 315 $(call merge_into_defconfig,multi_v7_defconfig,lpae) 316 317 define archhelp 318 echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' 319 echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' 320 echo '* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)' 321 echo ' uImage - U-Boot wrapped zImage' 322 echo ' bootpImage - Combined zImage and initial RAM disk' 323 echo ' (supply initrd image via make variable INITRD=<path>)' 324 echo ' install - Install uncompressed kernel' 325 echo ' zinstall - Install compressed kernel' 326 echo ' uinstall - Install U-Boot wrapped compressed kernel' 327 echo ' Install using (your) ~/bin/$(INSTALLKERNEL) or' 328 echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 329 echo ' install to $$(INSTALL_PATH) and run lilo' 330 echo 331 echo ' multi_v7_lpae_defconfig - multi_v7_defconfig with CONFIG_ARM_LPAE enabled' 332 endef
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.