Makefile 9.7 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 15 16
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
LDFLAGS_vmlinux	+= --be8
endif
17
CPPFLAGS_vmlinux.lds = -DTEXT_OFFSET=$(TEXT_OFFSET)
18
OBJCOPYFLAGS	:=-O binary -R .note -R .note.gnu.build-id -R .comment -S
L
Linus Torvalds 已提交
19
GZFLAGS		:=-9
20
#KBUILD_CFLAGS	+=-pipe
21
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
22
KBUILD_CFLAGS	+=$(call cc-option,-marm,)
L
Linus Torvalds 已提交
23 24 25 26 27

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

28 29 30 31 32
# defines filename extension depending memory manement type.
ifeq ($(CONFIG_MMU),)
MMUEXT		:= -nommu
endif

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

ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
38
KBUILD_CPPFLAGS	+= -mbig-endian
L
Linus Torvalds 已提交
39 40 41
AS		+= -EB
LD		+= -EB
else
42
KBUILD_CPPFLAGS	+= -mlittle-endian
L
Linus Torvalds 已提交
43 44 45 46 47 48 49 50 51 52
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.
53
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 已提交
54
arch-$(CONFIG_CPU_32v6)		:=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
55 56 57
# Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7
ifeq ($(CONFIG_CPU_32v6),y)
58
arch-$(CONFIG_CPU_32v6K)	:=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k)
59
endif
60 61
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 已提交
62 63 64 65 66 67
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
68
tune-$(CONFIG_CPU_ARM7TDMI)	:=-mtune=arm7tdmi
L
Linus Torvalds 已提交
69
tune-$(CONFIG_CPU_ARM720T)	:=-mtune=arm7tdmi
70
tune-$(CONFIG_CPU_ARM740T)	:=-mtune=arm7tdmi
71
tune-$(CONFIG_CPU_ARM9TDMI)	:=-mtune=arm9tdmi
72
tune-$(CONFIG_CPU_ARM940T)	:=-mtune=arm9tdmi
73
tune-$(CONFIG_CPU_ARM946E)	:=$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi)
L
Linus Torvalds 已提交
74 75 76 77
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 已提交
78
tune-$(CONFIG_CPU_FA526)	:=-mtune=arm9tdmi
L
Linus Torvalds 已提交
79 80 81
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
82
tune-$(CONFIG_CPU_XSC3)		:=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
83
tune-$(CONFIG_CPU_FEROCEON)	:=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
84
tune-$(CONFIG_CPU_V6)		:=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
L
Linus Torvalds 已提交
85

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

92 93 94 95
ifeq ($(CONFIG_ARM_UNWIND),y)
CFLAGS_ABI	+=-funwind-tables
endif

96
# Need -Uarm for gcc < 3.x
97
KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
98
KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
L
Linus Torvalds 已提交
99 100 101 102

CHECKFLAGS	+= -D__arm__

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

# 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_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
R
Russell King 已提交
144
machine-$(CONFIG_ARCH_OMAP4)		:= omap2
145 146 147 148 149 150 151 152 153 154
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
155 156
machine-$(CONFIG_ARCH_STMP378X)		:= stmp378x
machine-$(CONFIG_ARCH_STMP37XX)		:= stmp37xx
157
machine-$(CONFIG_ARCH_U300)		:= u300
158 159 160 161 162 163 164 165 166 167 168 169 170
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
171
plat-$(CONFIG_ARCH_STMP3XXX)	:= stmp3xxx
L
Linus Torvalds 已提交
172 173 174 175 176 177 178 179

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

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

183
# The first directory contains additional information for the boot setup code
L
Linus Torvalds 已提交
184
ifneq ($(machine-y),)
185
MACHINE  := arch/arm/mach-$(word 1,$(machine-y))/
L
Linus Torvalds 已提交
186 187 188
else
MACHINE  :=
endif
189

190 191 192 193 194 195 196 197 198
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

199
export	TEXT_OFFSET GZFLAGS MMUEXT
L
Linus Torvalds 已提交
200 201 202 203 204 205 206 207 208

# 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/
209
core-y				+= $(machdirs) $(platdirs)
L
Linus Torvalds 已提交
210 211 212 213 214 215
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/

216
libs-y				:= arch/arm/lib/ $(libs-y)
L
Linus Torvalds 已提交
217 218 219

# Default target when executing plain make
ifeq ($(CONFIG_XIP_KERNEL),y)
220
KBUILD_IMAGE := xipImage
L
Linus Torvalds 已提交
221
else
222
KBUILD_IMAGE := zImage
L
Linus Torvalds 已提交
223 224
endif

225 226
all:	$(KBUILD_IMAGE)

L
Linus Torvalds 已提交
227 228 229 230 231 232
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.

233
archprepare: maketools
L
Linus Torvalds 已提交
234

235
PHONY += maketools FORCE
236
maketools: include/linux/version.h FORCE
L
Linus Torvalds 已提交
237 238 239 240 241 242 243 244 245 246 247
	$(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) $@

248
CLEAN_FILES += include/asm-arm/mach-types.h \
L
Linus Torvalds 已提交
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
	       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)'
264
  echo  '  uImage        - U-Boot wrapped zImage'
L
Linus Torvalds 已提交
265 266 267 268 269 270 271 272
  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