Makefile 9.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
#
# arch/arm/Makefile
#
4 5 6
# This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies.
#
L
Linus Torvalds 已提交
7 8 9 10 11 12 13
# This file is subject to the terms and conditions of the GNU General Public
# License.  See the file "COPYING" in the main directory of this archive
# for more details.
#
# Copyright (C) 1995-2001 by Russell King

LDFLAGS_vmlinux	:=-p --no-undefined -X
14
CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
15
OBJCOPYFLAGS	:=-O binary -R .note -R .note.gnu.build-id -R .comment -S
L
Linus Torvalds 已提交
16
GZFLAGS		:=-9
17
#KBUILD_CFLAGS	+=-pipe
18
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
19
KBUILD_CFLAGS	+=$(call cc-option,-marm,)
L
Linus Torvalds 已提交
20 21 22 23 24

# Do not use arch/arm/defconfig - it's always outdated.
# Select a platform tht is kept up-to-date
KBUILD_DEFCONFIG := versatile_defconfig

25 26 27 28 29
# defines filename extension depending memory manement type.
ifeq ($(CONFIG_MMU),)
MMUEXT		:= -nommu
endif

L
Linus Torvalds 已提交
30
ifeq ($(CONFIG_FRAME_POINTER),y)
31
KBUILD_CFLAGS	+=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
L
Linus Torvalds 已提交
32 33 34
endif

ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
35
KBUILD_CPPFLAGS	+= -mbig-endian
L
Linus Torvalds 已提交
36 37 38
AS		+= -EB
LD		+= -EB
else
39
KBUILD_CPPFLAGS	+= -mlittle-endian
L
Linus Torvalds 已提交
40 41 42 43 44 45 46 47 48 49
AS		+= -EL
LD		+= -EL
endif

comma = ,

# This selects which instruction set is used.
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible.
50
arch-$(CONFIG_CPU_32v7)		:=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
L
Linus Torvalds 已提交
51
arch-$(CONFIG_CPU_32v6)		:=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
52 53 54
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7
ifeq ($(CONFIG_CPU_32v6),y)
55
arch-$(CONFIG_CPU_32v6K)	:=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
56
endif
57 58
arch-$(CONFIG_CPU_32v5)		:=-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t)
arch-$(CONFIG_CPU_32v4T)	:=-D__LINUX_ARM_ARCH__=4 -march=armv4t
L
Linus Torvalds 已提交
59 60 61 62 63 64
arch-$(CONFIG_CPU_32v4)		:=-D__LINUX_ARM_ARCH__=4 -march=armv4
arch-$(CONFIG_CPU_32v3)		:=-D__LINUX_ARM_ARCH__=3 -march=armv3

# This selects how we optimise for the processor.
tune-$(CONFIG_CPU_ARM610)	:=-mtune=arm610
tune-$(CONFIG_CPU_ARM710)	:=-mtune=arm710
65
tune-$(CONFIG_CPU_ARM7TDMI)	:=-mtune=arm7tdmi
L
Linus Torvalds 已提交
66
tune-$(CONFIG_CPU_ARM720T)	:=-mtune=arm7tdmi
67
tune-$(CONFIG_CPU_ARM740T)	:=-mtune=arm7tdmi
68
tune-$(CONFIG_CPU_ARM9TDMI)	:=-mtune=arm9tdmi
69
tune-$(CONFIG_CPU_ARM940T)	:=-mtune=arm9tdmi
70
tune-$(CONFIG_CPU_ARM946E)	:=$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
L
Linus Torvalds 已提交
71 72 73 74
tune-$(CONFIG_CPU_ARM920T)	:=-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM922T)	:=-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM925T)	:=-mtune=arm9tdmi
tune-$(CONFIG_CPU_ARM926T)	:=-mtune=arm9tdmi
P
Paulius Zaleckas 已提交
75
tune-$(CONFIG_CPU_FA526)	:=-mtune=arm9tdmi
L
Linus Torvalds 已提交
76 77 78
tune-$(CONFIG_CPU_SA110)	:=-mtune=strongarm110
tune-$(CONFIG_CPU_SA1100)	:=-mtune=strongarm1100
tune-$(CONFIG_CPU_XSCALE)	:=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
79
tune-$(CONFIG_CPU_XSC3)		:=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
80
tune-$(CONFIG_CPU_FEROCEON)	:=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
81
tune-$(CONFIG_CPU_V6)		:=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
L
Linus Torvalds 已提交
82

83
ifeq ($(CONFIG_AEABI),y)
84
CFLAGS_ABI	:=-mabi=aapcs-linux -mno-thumb-interwork
85
else
86
CFLAGS_ABI	:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
87 88
endif

89 90 91 92
ifeq ($(CONFIG_ARM_UNWIND),y)
CFLAGS_ABI	+=-funwind-tables
endif

93
# Need -Uarm for gcc < 3.x
94
KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
95
KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
L
Linus Torvalds 已提交
96 97 98 99

CHECKFLAGS	+= -D__arm__

#Default value
H
Hyok S. Choi 已提交
100
head-y		:= arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
101
textofs-y	:= 0x00008000
102
textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000
L
Linus Torvalds 已提交
103
# SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory
104 105
ifeq ($(CONFIG_ARCH_SA1100),y)
textofs-$(CONFIG_SA1111) := 0x00208000
L
Linus Torvalds 已提交
106
endif
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 160 161 162 163 164

# Machine directory name.  This list is sorted alphanumerically
# by CONFIG_* macro name.
machine-$(CONFIG_ARCH_AAEC2000)		:= aaec2000
machine-$(CONFIG_ARCH_AT91)		:= at91
machine-$(CONFIG_ARCH_CLPS711X)		:= clps711x
machine-$(CONFIG_ARCH_DAVINCI)		:= davinci
machine-$(CONFIG_ARCH_EBSA110)		:= ebsa110
machine-$(CONFIG_ARCH_EP93XX)		:= ep93xx
machine-$(CONFIG_ARCH_GEMINI)		:= gemini
machine-$(CONFIG_ARCH_H720X)		:= h720x
machine-$(CONFIG_ARCH_IMX)		:= imx
machine-$(CONFIG_ARCH_INTEGRATOR)	:= integrator
machine-$(CONFIG_ARCH_IOP13XX)		:= iop13xx
machine-$(CONFIG_ARCH_IOP32X)		:= iop32x
machine-$(CONFIG_ARCH_IOP33X)		:= iop33x
machine-$(CONFIG_ARCH_IXP2000)		:= ixp2000
machine-$(CONFIG_ARCH_IXP23XX)		:= ixp23xx
machine-$(CONFIG_ARCH_IXP4XX)		:= ixp4xx
machine-$(CONFIG_ARCH_KIRKWOOD)		:= kirkwood
machine-$(CONFIG_ARCH_KS8695)		:= ks8695
machine-$(CONFIG_ARCH_L7200)		:= l7200
machine-$(CONFIG_ARCH_LH7A40X)		:= lh7a40x
machine-$(CONFIG_ARCH_LOKI) 		:= loki
machine-$(CONFIG_ARCH_MMP)		:= mmp
machine-$(CONFIG_ARCH_MSM)		:= msm
machine-$(CONFIG_ARCH_MV78XX0)		:= mv78xx0
machine-$(CONFIG_ARCH_MX1)		:= mx1
machine-$(CONFIG_ARCH_MX2)		:= mx2
machine-$(CONFIG_ARCH_MX3)		:= mx3
machine-$(CONFIG_ARCH_NETX)		:= netx
machine-$(CONFIG_ARCH_NS9XXX)		:= ns9xxx
machine-$(CONFIG_ARCH_OMAP1)		:= omap1
machine-$(CONFIG_ARCH_OMAP2)		:= omap2
machine-$(CONFIG_ARCH_OMAP3)		:= omap2
machine-$(CONFIG_ARCH_ORION5X)		:= orion5x
machine-$(CONFIG_ARCH_PNX4008)		:= pnx4008
machine-$(CONFIG_ARCH_PXA)		:= pxa
machine-$(CONFIG_ARCH_REALVIEW)		:= realview
machine-$(CONFIG_ARCH_RPC)		:= rpc
machine-$(CONFIG_ARCH_S3C2410)		:= s3c2410 s3c2400 s3c2412 s3c2440 s3c2442 s3c2443
machine-$(CONFIG_ARCH_S3C24A0)		:= s3c24a0
machine-$(CONFIG_ARCH_S3C64XX)		:= s3c6400 s3c6410
machine-$(CONFIG_ARCH_SA1100)		:= sa1100
machine-$(CONFIG_ARCH_SHARK)		:= shark
machine-$(CONFIG_ARCH_VERSATILE)	:= versatile
machine-$(CONFIG_ARCH_W90X900)		:= w90x900
machine-$(CONFIG_FOOTBRIDGE)		:= footbridge

# Platform directory name.  This list is sorted alphanumerically
# by CONFIG_* macro name.
plat-$(CONFIG_ARCH_MXC)		:= mxc
plat-$(CONFIG_ARCH_OMAP)	:= omap
plat-$(CONFIG_PLAT_IOP)		:= iop
plat-$(CONFIG_PLAT_ORION)	:= orion
plat-$(CONFIG_PLAT_PXA)		:= pxa
plat-$(CONFIG_PLAT_S3C24XX)	:= s3c24xx s3c
plat-$(CONFIG_PLAT_S3C64XX)	:= s3c64xx s3c
L
Linus Torvalds 已提交
165 166 167 168 169 170 171 172

ifeq ($(CONFIG_ARCH_EBSA110),y)
# This is what happens if you forget the IOCS16 line.
# PCMCIA cards stop working.
CFLAGS_3c589_cs.o :=-DISA_SIXTEEN_BIT_PERIPHERAL
export CFLAGS_3c589_cs.o
endif

173 174
# The byte offset of the kernel image in RAM from the start of RAM.
TEXT_OFFSET := $(textofs-y)
L
Linus Torvalds 已提交
175

176
# The first directory contains additional information for the boot setup code
L
Linus Torvalds 已提交
177
ifneq ($(machine-y),)
178
MACHINE  := arch/arm/mach-$(word 1,$(machine-y))/
L
Linus Torvalds 已提交
179 180 181
else
MACHINE  :=
endif
182

183 184 185 186 187 188 189 190 191
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y))

ifeq ($(KBUILD_SRC),)
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs))
else
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs))
endif

192
export	TEXT_OFFSET GZFLAGS MMUEXT
L
Linus Torvalds 已提交
193 194 195 196 197 198 199 200 201

# Do we have FASTFPE?
FASTFPE		:=arch/arm/fastfpe
ifeq ($(FASTFPE),$(wildcard $(FASTFPE)))
FASTFPE_OBJ	:=$(FASTFPE)/
endif

# If we have a machine-specific directory, then include it in the build.
core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
202
core-y				+= $(machdirs) $(platdirs)
L
Linus Torvalds 已提交
203 204 205 206 207 208
core-$(CONFIG_FPE_NWFPE)	+= arch/arm/nwfpe/
core-$(CONFIG_FPE_FASTFPE)	+= $(FASTFPE_OBJ)
core-$(CONFIG_VFP)		+= arch/arm/vfp/

drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/

209
libs-y				:= arch/arm/lib/ $(libs-y)
L
Linus Torvalds 已提交
210 211 212

# Default target when executing plain make
ifeq ($(CONFIG_XIP_KERNEL),y)
213
KBUILD_IMAGE := xipImage
L
Linus Torvalds 已提交
214
else
215
KBUILD_IMAGE := zImage
L
Linus Torvalds 已提交
216 217
endif

218 219
all:	$(KBUILD_IMAGE)

L
Linus Torvalds 已提交
220 221 222 223 224 225
boot := arch/arm/boot

#	Update machine arch and proc symlinks if something which affects
#	them changed.  We use .arch to indicate when they were updated
#	last, otherwise make uses the target directory mtime.

226
archprepare: maketools
L
Linus Torvalds 已提交
227

228
PHONY += maketools FORCE
229
maketools: include/linux/version.h FORCE
L
Linus Torvalds 已提交
230 231 232 233 234 235 236 237 238 239 240
	$(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h

# Convert bzImage to zImage
bzImage: zImage

zImage Image xipImage bootpImage uImage: vmlinux
	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

zinstall install: vmlinux
	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@

241
CLEAN_FILES += include/asm-arm/mach-types.h \
L
Linus Torvalds 已提交
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
	       include/asm-arm/arch include/asm-arm/.arch

# We use MRPROPER_FILES and CLEAN_FILES now
archclean:
	$(Q)$(MAKE) $(clean)=$(boot)

# My testing targets (bypasses dependencies)
bp:;	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
i zi:;	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@


define archhelp
  echo  '* zImage        - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
  echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
  echo  '* xipImage      - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)'
257
  echo  '  uImage        - U-Boot wrapped zImage'
L
Linus Torvalds 已提交
258 259 260 261 262 263 264 265
  echo  '  bootpImage    - Combined zImage and initial RAM disk' 
  echo  '                  (supply initrd image via make variable INITRD=<path>)'
  echo  '  install       - Install uncompressed kernel'
  echo  '  zinstall      - Install compressed kernel'
  echo  '                  Install using (your) ~/bin/installkernel or'
  echo  '                  (distribution) /sbin/installkernel or'
  echo  '                  install to $$(INSTALL_PATH) and run lilo'
endef