1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# arch/arm/Makefile 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# This file is included by the global makefile so that you can add your own 5*4882a593Smuzhiyun# architecture-specific flags and dependencies. 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# This file is subject to the terms and conditions of the GNU General Public 8*4882a593Smuzhiyun# License. See the file "COPYING" in the main directory of this archive 9*4882a593Smuzhiyun# for more details. 10*4882a593Smuzhiyun# 11*4882a593Smuzhiyun# Copyright (C) 1995-2001 by Russell King 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunLDFLAGS_vmlinux := --no-undefined -X --pic-veneer 14*4882a593Smuzhiyunifeq ($(CONFIG_CPU_ENDIAN_BE8),y) 15*4882a593SmuzhiyunLDFLAGS_vmlinux += --be8 16*4882a593SmuzhiyunKBUILD_LDFLAGS_MODULE += --be8 17*4882a593Smuzhiyunendif 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunGZFLAGS :=-9 20*4882a593Smuzhiyun#KBUILD_CFLAGS +=-pipe 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# Never generate .eh_frame 23*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun# This should work on most of the modern platforms 26*4882a593SmuzhiyunKBUILD_DEFCONFIG := multi_v7_defconfig 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun# defines filename extension depending memory management type. 29*4882a593Smuzhiyunifeq ($(CONFIG_MMU),) 30*4882a593SmuzhiyunMMUEXT := -nommu 31*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-mno-unaligned-access) 32*4882a593Smuzhiyunendif 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunifeq ($(CONFIG_FRAME_POINTER),y) 35*4882a593SmuzhiyunKBUILD_CFLAGS +=-fno-omit-frame-pointer 36*4882a593Smuzhiyunifeq ($(CONFIG_CC_IS_GCC),y) 37*4882a593SmuzhiyunKBUILD_CFLAGS += -mapcs -mno-sched-prolog 38*4882a593Smuzhiyunendif 39*4882a593Smuzhiyunendif 40*4882a593Smuzhiyun 41*4882a593Smuzhiyunifeq ($(CONFIG_CPU_BIG_ENDIAN),y) 42*4882a593SmuzhiyunKBUILD_CPPFLAGS += -mbig-endian 43*4882a593SmuzhiyunCHECKFLAGS += -D__ARMEB__ 44*4882a593SmuzhiyunKBUILD_LDFLAGS += -EB 45*4882a593Smuzhiyunelse 46*4882a593SmuzhiyunKBUILD_CPPFLAGS += -mlittle-endian 47*4882a593SmuzhiyunCHECKFLAGS += -D__ARMEL__ 48*4882a593SmuzhiyunKBUILD_LDFLAGS += -EL 49*4882a593Smuzhiyunendif 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun# 52*4882a593Smuzhiyun# The Scalar Replacement of Aggregates (SRA) optimization pass in GCC 4.9 and 53*4882a593Smuzhiyun# later may result in code being generated that handles signed short and signed 54*4882a593Smuzhiyun# char struct members incorrectly. So disable it. 55*4882a593Smuzhiyun# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932) 56*4882a593Smuzhiyun# 57*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun# This selects which instruction set is used. 60*4882a593Smuzhiyun# Note that GCC does not numerically define an architecture version 61*4882a593Smuzhiyun# macro, but instead defines a whole series of macros which makes 62*4882a593Smuzhiyun# testing for a specific architecture or later rather impossible. 63*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m 64*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a 65*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6 66*4882a593Smuzhiyun# Only override the compiler option if ARMv6. The ARMv6K extensions are 67*4882a593Smuzhiyun# always available in ARMv7 68*4882a593Smuzhiyunifeq ($(CONFIG_CPU_32v6),y) 69*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k 70*4882a593Smuzhiyunendif 71*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te 72*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t 73*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4 74*4882a593Smuzhiyunarch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3m 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun# Evaluate arch cc-option calls now 77*4882a593Smuzhiyunarch-y := $(arch-y) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun# This selects how we optimise for the processor. 80*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM7TDMI) =-mtune=arm7tdmi 81*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi 82*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi 83*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi 84*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi 85*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e 86*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi 87*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi 88*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi 89*4882a593Smuzhiyuntune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi 90*4882a593Smuzhiyuntune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi 91*4882a593Smuzhiyuntune-$(CONFIG_CPU_SA110) =-mtune=strongarm110 92*4882a593Smuzhiyuntune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100 93*4882a593Smuzhiyuntune-$(CONFIG_CPU_XSCALE) =-mtune=xscale 94*4882a593Smuzhiyuntune-$(CONFIG_CPU_XSC3) =-mtune=xscale 95*4882a593Smuzhiyuntune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale 96*4882a593Smuzhiyuntune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s 97*4882a593Smuzhiyuntune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun# Evaluate tune cc-option calls now 100*4882a593Smuzhiyuntune-y := $(tune-y) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyunifeq ($(CONFIG_AEABI),y) 103*4882a593SmuzhiyunCFLAGS_ABI :=-mabi=aapcs-linux -mfpu=vfp 104*4882a593Smuzhiyunelse 105*4882a593SmuzhiyunCFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,) 106*4882a593Smuzhiyunendif 107*4882a593Smuzhiyun 108*4882a593Smuzhiyunifeq ($(CONFIG_ARM_UNWIND),y) 109*4882a593SmuzhiyunCFLAGS_ABI +=-funwind-tables 110*4882a593Smuzhiyunendif 111*4882a593Smuzhiyun 112*4882a593Smuzhiyunifeq ($(CONFIG_CC_IS_CLANG),y) 113*4882a593SmuzhiyunCFLAGS_ABI += -meabi gnu 114*4882a593Smuzhiyunendif 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun# Accept old syntax despite ".syntax unified" 117*4882a593SmuzhiyunAFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyunifeq ($(CONFIG_THUMB2_KERNEL),y) 120*4882a593SmuzhiyunCFLAGS_ISA :=-mthumb -Wa,-mimplicit-it=always $(AFLAGS_NOWARN) 121*4882a593SmuzhiyunAFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb 122*4882a593Smuzhiyunelse 123*4882a593SmuzhiyunCFLAGS_ISA :=$(call cc-option,-marm,) $(AFLAGS_NOWARN) 124*4882a593SmuzhiyunAFLAGS_ISA :=$(CFLAGS_ISA) 125*4882a593Smuzhiyunendif 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun# Need -Uarm for gcc < 3.x 128*4882a593SmuzhiyunKBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm 129*4882a593SmuzhiyunKBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float 130*4882a593Smuzhiyun 131*4882a593SmuzhiyunCHECKFLAGS += -D__arm__ 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun#Default value 134*4882a593Smuzhiyunhead-y := arch/arm/kernel/head$(MMUEXT).o 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun# Text offset. This list is sorted numerically by address in order to 137*4882a593Smuzhiyun# provide a means to avoid/resolve conflicts in multi-arch kernels. 138*4882a593Smuzhiyun# Note: the 32kB below this value is reserved for use by the kernel 139*4882a593Smuzhiyun# during boot, and this offset is critical to the functioning of 140*4882a593Smuzhiyun# kexec-tools. 141*4882a593Smuzhiyuntextofs-y := 0x00008000 142*4882a593Smuzhiyun# We don't want the htc bootloader to corrupt kernel during resume 143*4882a593Smuzhiyuntextofs-$(CONFIG_PM_H1940) := 0x00108000 144*4882a593Smuzhiyun# RTD1195 has Boot ROM at start of address space 145*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_REALTEK) := 0x00108000 146*4882a593Smuzhiyun# SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory 147*4882a593Smuzhiyunifeq ($(CONFIG_ARCH_SA1100),y) 148*4882a593Smuzhiyuntextofs-$(CONFIG_SA1111) := 0x00208000 149*4882a593Smuzhiyunendif 150*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_IPQ40XX) := 0x00208000 151*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000 152*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_MSM8960) := 0x00208000 153*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_MESON) := 0x00208000 154*4882a593Smuzhiyuntextofs-$(CONFIG_ARCH_AXXIA) := 0x00308000 155*4882a593Smuzhiyuntextofs-$(CONFIG_CPU_RK3308) := 0x00058000 156*4882a593Smuzhiyunifeq ($(CONFIG_ROCKCHIP_THUNDER_BOOT),y) 157*4882a593Smuzhiyuntextofs-$(CONFIG_CPU_RV1106) := 0x00208000 158*4882a593Smuzhiyuntextofs-$(CONFIG_CPU_RV1126) := 0x00608000 159*4882a593Smuzhiyunendif 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun# Machine directory name. This list is sorted alphanumerically 162*4882a593Smuzhiyun# by CONFIG_* macro name. 163*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ACTIONS) += actions 164*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ALPINE) += alpine 165*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ARTPEC) += artpec 166*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ASPEED) += aspeed 167*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_AT91) += at91 168*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_AXXIA) += axxia 169*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_BCM) += bcm 170*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_BERLIN) += berlin 171*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_CLPS711X) += clps711x 172*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx 173*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_DAVINCI) += davinci 174*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_DIGICOLOR) += digicolor 175*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_DOVE) += dove 176*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_EBSA110) += ebsa110 177*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_EFM32) += efm32 178*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_EP93XX) += ep93xx 179*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_EXYNOS) += exynos 180*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_FOOTBRIDGE) += footbridge 181*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_GEMINI) += gemini 182*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_HIGHBANK) += highbank 183*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_HISI) += hisi 184*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_INTEGRATOR) += integrator 185*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_IOP32X) += iop32x 186*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_IXP4XX) += ixp4xx 187*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_KEYSTONE) += keystone 188*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_LPC18XX) += lpc18xx 189*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_LPC32XX) += lpc32xx 190*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MESON) += meson 191*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MMP) += mmp 192*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MPS2) += vexpress 193*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MOXART) += moxart 194*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 195*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MVEBU) += mvebu 196*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MXC) += imx 197*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MEDIATEK) += mediatek 198*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MILBEAUT) += milbeaut 199*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MXS) += mxs 200*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_MSTARV7) += mstar 201*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_NOMADIK) += nomadik 202*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_NPCM) += npcm 203*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_NSPIRE) += nspire 204*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_OXNAS) += oxnas 205*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_OMAP1) += omap1 206*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 207*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ORION5X) += orion5x 208*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_PICOXCELL) += picoxcell 209*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_PXA) += pxa 210*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_QCOM) += qcom 211*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_RDA) += rda 212*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_REALTEK) += realtek 213*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_REALVIEW) += realview 214*4882a593Smuzhiyunifndef CONFIG_ARM_PSCI 215*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ROCKCHIP) += rockchip 216*4882a593Smuzhiyunendif 217*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_RPC) += rpc 218*4882a593Smuzhiyunmachine-$(CONFIG_PLAT_SAMSUNG) += s3c 219*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_S5PV210) += s5pv210 220*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_SA1100) += sa1100 221*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_RENESAS) += shmobile 222*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_SIRF) += prima2 223*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_SOCFPGA) += socfpga 224*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_STI) += sti 225*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_STM32) += stm32 226*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_SUNXI) += sunxi 227*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_TANGO) += tango 228*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_TEGRA) += tegra 229*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_U300) += u300 230*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_U8500) += ux500 231*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_VERSATILE) += versatile 232*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_VEXPRESS) += vexpress 233*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_VT8500) += vt8500 234*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ZX) += zx 235*4882a593Smuzhiyunmachine-$(CONFIG_ARCH_ZYNQ) += zynq 236*4882a593Smuzhiyunmachine-$(CONFIG_PLAT_SPEAR) += spear 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun# Platform directory name. This list is sorted alphanumerically 239*4882a593Smuzhiyun# by CONFIG_* macro name. 240*4882a593Smuzhiyunplat-$(CONFIG_ARCH_OMAP) += omap 241*4882a593Smuzhiyunplat-$(CONFIG_PLAT_ORION) += orion 242*4882a593Smuzhiyunplat-$(CONFIG_PLAT_PXA) += pxa 243*4882a593Smuzhiyunplat-$(CONFIG_PLAT_VERSATILE) += versatile 244*4882a593Smuzhiyun 245*4882a593Smuzhiyunifeq ($(CONFIG_ARCH_EBSA110),y) 246*4882a593Smuzhiyun# This is what happens if you forget the IOCS16 line. 247*4882a593Smuzhiyun# PCMCIA cards stop working. 248*4882a593SmuzhiyunCFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL 249*4882a593Smuzhiyunexport CFLAGS_3c589_cs.o 250*4882a593Smuzhiyunendif 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun# The byte offset of the kernel image in RAM from the start of RAM. 253*4882a593SmuzhiyunTEXT_OFFSET := $(textofs-y) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun# The first directory contains additional information for the boot setup code 256*4882a593Smuzhiyunifneq ($(machine-y),) 257*4882a593SmuzhiyunMACHINE := arch/arm/mach-$(word 1,$(machine-y))/ 258*4882a593Smuzhiyunelse 259*4882a593SmuzhiyunMACHINE := 260*4882a593Smuzhiyunendif 261*4882a593Smuzhiyunifeq ($(CONFIG_ARCH_MULTIPLATFORM),y) 262*4882a593SmuzhiyunMACHINE := 263*4882a593Smuzhiyunendif 264*4882a593Smuzhiyun 265*4882a593Smuzhiyunmachdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y)) 266*4882a593Smuzhiyunplatdirs := $(patsubst %,arch/arm/plat-%/,$(sort $(plat-y))) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyunifneq ($(CONFIG_ARCH_MULTIPLATFORM),y) 269*4882a593Smuzhiyunifneq ($(CONFIG_ARM_SINGLE_ARMV7M),y) 270*4882a593SmuzhiyunKBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs)) 271*4882a593Smuzhiyunendif 272*4882a593Smuzhiyunendif 273*4882a593Smuzhiyun 274*4882a593Smuzhiyunexport TEXT_OFFSET GZFLAGS MMUEXT 275*4882a593Smuzhiyun 276*4882a593Smuzhiyuncore-y += arch/arm/ 277*4882a593Smuzhiyun# If we have a machine-specific directory, then include it in the build. 278*4882a593Smuzhiyuncore-y += $(machdirs) $(platdirs) 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun# For cleaning 281*4882a593Smuzhiyuncore- += $(patsubst %,arch/arm/mach-%/, $(machine-)) 282*4882a593Smuzhiyuncore- += $(patsubst %,arch/arm/plat-%/, $(plat-)) 283*4882a593Smuzhiyun 284*4882a593Smuzhiyundrivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ 285*4882a593Smuzhiyun 286*4882a593Smuzhiyunlibs-y := arch/arm/lib/ $(libs-y) 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun# Default target when executing plain make 289*4882a593Smuzhiyunboot := arch/arm/boot 290*4882a593Smuzhiyunifeq ($(CONFIG_XIP_KERNEL),y) 291*4882a593SmuzhiyunKBUILD_IMAGE := $(boot)/xipImage 292*4882a593Smuzhiyunelse 293*4882a593SmuzhiyunKBUILD_IMAGE := $(boot)/zImage 294*4882a593Smuzhiyunendif 295*4882a593Smuzhiyun 296*4882a593Smuzhiyunifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y) 297*4882a593Smuzhiyunprepare: stack_protector_prepare 298*4882a593Smuzhiyunstack_protector_prepare: prepare0 299*4882a593Smuzhiyun $(eval SSP_PLUGIN_CFLAGS := \ 300*4882a593Smuzhiyun -fplugin-arg-arm_ssp_per_task_plugin-tso=$(shell \ 301*4882a593Smuzhiyun awk '{if ($$2 == "THREAD_SZ_ORDER") print $$3;}'\ 302*4882a593Smuzhiyun include/generated/asm-offsets.h) \ 303*4882a593Smuzhiyun -fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell \ 304*4882a593Smuzhiyun awk '{if ($$2 == "TI_STACK_CANARY") print $$3;}'\ 305*4882a593Smuzhiyun include/generated/asm-offsets.h)) 306*4882a593Smuzhiyun $(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS)) 307*4882a593Smuzhiyun $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS)) 308*4882a593Smuzhiyunendif 309*4882a593Smuzhiyun 310*4882a593Smuzhiyunall: $(notdir $(KBUILD_IMAGE)) 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun 313*4882a593Smuzhiyunarchheaders: 314*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/arm/tools uapi 315*4882a593Smuzhiyun 316*4882a593Smuzhiyunarchprepare: 317*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/arm/tools kapi 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun# Convert bzImage to zImage 320*4882a593SmuzhiyunbzImage: zImage 321*4882a593Smuzhiyun 322*4882a593SmuzhiyunBOOT_TARGETS = zImage Image xipImage bootpImage uImage 323*4882a593SmuzhiyunBOOT_TARGETS += Image.gz Image.lz4 324*4882a593SmuzhiyunINSTALL_TARGETS = zinstall uinstall install 325*4882a593Smuzhiyun 326*4882a593SmuzhiyunPHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS) 327*4882a593Smuzhiyun 328*4882a593SmuzhiyunbootpImage uImage: zImage 329*4882a593SmuzhiyunzImage: Image 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun$(BOOT_TARGETS): vmlinux 332*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ 333*4882a593Smuzhiyun @$(kecho) ' Kernel: $(boot)/$@ is ready' 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun$(INSTALL_TARGETS): 336*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ 337*4882a593Smuzhiyun 338*4882a593SmuzhiyunPHONY += vdso_install 339*4882a593Smuzhiyunvdso_install: 340*4882a593Smuzhiyunifeq ($(CONFIG_VDSO),y) 341*4882a593Smuzhiyun $(Q)$(MAKE) $(build)=arch/arm/vdso $@ 342*4882a593Smuzhiyunendif 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun# We use MRPROPER_FILES and CLEAN_FILES now 345*4882a593Smuzhiyunarchclean: 346*4882a593Smuzhiyun $(Q)$(MAKE) $(clean)=$(boot) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun# My testing targets (bypasses dependencies) 349*4882a593Smuzhiyunbp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun 352*4882a593Smuzhiyundefine archhelp 353*4882a593Smuzhiyun echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' 354*4882a593Smuzhiyun echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' 355*4882a593Smuzhiyun echo '* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)' 356*4882a593Smuzhiyun echo ' uImage - U-Boot wrapped zImage' 357*4882a593Smuzhiyun echo ' bootpImage - Combined zImage and initial RAM disk' 358*4882a593Smuzhiyun echo ' (supply initrd image via make variable INITRD=<path>)' 359*4882a593Smuzhiyun echo ' install - Install uncompressed kernel' 360*4882a593Smuzhiyun echo ' zinstall - Install compressed kernel' 361*4882a593Smuzhiyun echo ' uinstall - Install U-Boot wrapped compressed kernel' 362*4882a593Smuzhiyun echo ' Install using (your) ~/bin/$(INSTALLKERNEL) or' 363*4882a593Smuzhiyun echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 364*4882a593Smuzhiyun echo ' install to $$(INSTALL_PATH) and run lilo' 365*4882a593Smuzhiyun echo ' vdso_install - Install unstripped vdso.so to $$(INSTALL_MOD_PATH)/vdso' 366*4882a593Smuzhiyunendef 367*4882a593Smuzhiyun 368*4882a593SmuzhiyunMAKE_MODULES ?= y 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun%.img: 371*4882a593Smuzhiyunifeq ("$(CONFIG_MODULES)$(MAKE_MODULES)$(srctree)","yy$(objtree)") 372*4882a593Smuzhiyun $(Q)$(MAKE) $*.dtb zImage Image.gz modules 373*4882a593Smuzhiyunelse 374*4882a593Smuzhiyun $(Q)$(MAKE) $*.dtb zImage Image.gz 375*4882a593Smuzhiyunendif 376*4882a593Smuzhiyun $(Q)$(srctree)/scripts/mkimg --dtb $*.dtb 377*4882a593Smuzhiyun 378*4882a593SmuzhiyunCLEAN_DIRS += out 379*4882a593SmuzhiyunCLEAN_FILES += boot.img kernel.img resource.img zboot.img 380