Makefile 19.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#
# 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) 1994, 95, 96, 2003 by Ralf Baechle
# DECStation modifications by Paul M. Antoine, 1996
# Copyright (C) 2002, 2003, 2004  Maciej W. Rozycki
#
# This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies. Remember to do have actions
# for "archclean" cleaning up for this architecture.
#

M
Matt Redfearn 已提交
15
archscripts: scripts_basic
16
	$(Q)$(MAKE) $(build)=arch/mips/tools elf-entry
M
Matt Redfearn 已提交
17 18
	$(Q)$(MAKE) $(build)=arch/mips/boot/tools relocs

19
KBUILD_DEFCONFIG := 32r2el_defconfig
20
KBUILD_DTBS      := dtbs
A
Adrian Bunk 已提交
21

L
Linus Torvalds 已提交
22 23 24 25
#
# Select the object file format to substitute into the linker script.
#
ifdef CONFIG_CPU_LITTLE_ENDIAN
26 27
32bit-tool-archpref	= mipsel
64bit-tool-archpref	= mips64el
L
Linus Torvalds 已提交
28 29 30 31 32
32bit-bfd		= elf32-tradlittlemips
64bit-bfd		= elf64-tradlittlemips
32bit-emul		= elf32ltsmip
64bit-emul		= elf64ltsmip
else
33 34
32bit-tool-archpref	= mips
64bit-tool-archpref	= mips64
L
Linus Torvalds 已提交
35 36 37 38 39 40
32bit-bfd		= elf32-tradbigmips
64bit-bfd		= elf64-tradbigmips
32bit-emul		= elf32btsmip
64bit-emul		= elf64btsmip
endif

41
ifdef CONFIG_32BIT
42
tool-archpref		= $(32bit-tool-archpref)
L
Linus Torvalds 已提交
43 44
UTS_MACHINE		:= mips
endif
45
ifdef CONFIG_64BIT
46
tool-archpref		= $(64bit-tool-archpref)
L
Linus Torvalds 已提交
47 48 49
UTS_MACHINE		:= mips64
endif

50 51
ifneq ($(SUBARCH),$(ARCH))
  ifeq ($(CROSS_COMPILE),)
52
    CROSS_COMPILE := $(call cc-cross-prefix, $(tool-archpref)-linux-  $(tool-archpref)-linux-gnu-  $(tool-archpref)-unknown-linux-gnu-)
53
  endif
L
Linus Torvalds 已提交
54 55
endif

56 57 58 59 60 61 62
ifdef CONFIG_FUNCTION_GRAPH_TRACER
  ifndef KBUILD_MCOUNT_RA_ADDRESS
    ifeq ($(call cc-option-yn,-mmcount-ra-address), y)
      cflags-y += -mmcount-ra-address -DKBUILD_MCOUNT_RA_ADDRESS
    endif
  endif
endif
63
cflags-y += $(call cc-option, -mno-check-zero-division)
64

R
Ralf Baechle 已提交
65
ifdef CONFIG_32BIT
L
Linus Torvalds 已提交
66 67 68
ld-emul			= $(32bit-emul)
vmlinux-32		= vmlinux
vmlinux-64		= vmlinux.64
R
Ralf Baechle 已提交
69 70

cflags-y		+= -mabi=32
R
Ralf Baechle 已提交
71
endif
L
Linus Torvalds 已提交
72

R
Ralf Baechle 已提交
73 74 75 76 77
ifdef CONFIG_64BIT
ld-emul			= $(64bit-emul)
vmlinux-32		= vmlinux.32
vmlinux-64		= vmlinux

R
Ralf Baechle 已提交
78
cflags-y		+= -mabi=64
L
Linus Torvalds 已提交
79 80
endif

81 82
all-$(CONFIG_BOOT_ELF32)	:= $(vmlinux-32)
all-$(CONFIG_BOOT_ELF64)	:= $(vmlinux-64)
83
all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlinuz
R
Ralf Baechle 已提交
84

L
Linus Torvalds 已提交
85 86 87 88 89 90 91 92 93 94 95
#
# GCC uses -G 0 -mabicalls -fpic as default.  We don't want PIC in the kernel
# code since it only slows down the whole thing.  At some point we might make
# use of global pointer optimizations but their use of $28 conflicts with
# the current pointer optimization.
#
# The DECStation requires an ECOFF kernel for remote booting, other MIPS
# machines may also.  Since BFD is incredibly buggy with respect to
# crossformat linking we rely on the elf2ecoff tool for format conversion.
#
cflags-y			+= -G 0 -mno-abicalls -fno-pic -pipe
R
Ralf Baechle 已提交
96
cflags-y			+= -msoft-float
T
Thiemo Seufer 已提交
97
LDFLAGS_vmlinux			+= -G 0 -static -n -nostdlib
98 99
KBUILD_AFLAGS_MODULE		+= -mlong-calls
KBUILD_CFLAGS_MODULE		+= -mlong-calls
L
Linus Torvalds 已提交
100

101 102 103 104
ifeq ($(CONFIG_RELOCATABLE),y)
LDFLAGS_vmlinux			+= --emit-relocs
endif

105 106 107 108 109 110 111 112 113
#
# pass -msoft-float to GAS if it supports it.  However on newer binutils
# (specifically newer than 2.24.51.20140728) we then also need to explicitly
# set ".set hardfloat" in all files which manipulate floating point registers.
#
ifneq ($(call as-option,-Wa$(comma)-msoft-float,),)
	cflags-y		+= -DGAS_HAS_SET_HARDFLOAT -Wa,-msoft-float
endif

114 115
cflags-y += -ffreestanding

116 117 118 119 120 121
#
# We explicitly add the endianness specifier if needed, this allows
# to compile kernels with a toolchain for the other endianness. We
# carefully avoid to add it redundantly because gcc 3.3/3.4 complains
# when fed the toolchain default!
#
L
Lucas De Marchi 已提交
122
# Certain gcc versions up to gcc 4.1.1 (probably 4.2-subversion as of
123
# 2006-10-10 don't properly change the predefined symbols if -EB / -EL
124 125 126
# are used, so we kludge that here.  A bug has been filed at
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29413.
#
127 128 129 130 131
# clang doesn't suffer from these issues and our checks against -dumpmachine
# don't work so well when cross compiling, since without providing --target
# clang's output will be based upon the build machine. So for clang we simply
# unconditionally specify -EB or -EL as appropriate.
#
132
ifdef CONFIG_CC_IS_CLANG
133 134 135
cflags-$(CONFIG_CPU_BIG_ENDIAN)		+= -EB
cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= -EL
else
136 137 138 139 140 141
undef-all += -UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__
undef-all += -UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__
predef-be += -DMIPSEB -D_MIPSEB -D__MIPSEB -D__MIPSEB__
predef-le += -DMIPSEL -D_MIPSEL -D__MIPSEL -D__MIPSEL__
cflags-$(CONFIG_CPU_BIG_ENDIAN)		+= $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' && echo -EB $(undef-all) $(predef-be))
cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= $(shell $(CC) -dumpmachine |grep -q 'mips.*el-.*' || echo -EL $(undef-all) $(predef-le))
142
endif
143

144 145
cflags-$(CONFIG_SB1XXX_CORELIS)	+= $(call cc-option,-mno-sched-prolog) \
				   -fno-omit-frame-pointer
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

# Some distribution-specific toolchains might pass the -fstack-check
# option during the build, which adds a simple stack-probe at the beginning
# of every function.  This stack probe is to ensure that there is enough
# stack space, else a SEGV is generated.  This is not desirable for MIPS
# as kernel stacks are small, placed in unmapped virtual memory, and do not
# grow when overflowed.  Especially on SGI IP27 platforms, this check will
# lead to a NULL pointer dereference in _raw_spin_lock_irq.
#
# In disassembly, this stack probe appears at the top of a function as:
#    sd		zero,<offset>(sp)
# Where <offset> is a negative value.
#
cflags-y += -fno-stack-check

L
Linus Torvalds 已提交
161 162 163
#
# CPU-dependent compiler/assembler options for optimization.
#
R
Ralf Baechle 已提交
164 165 166 167 168 169
cflags-$(CONFIG_CPU_R3000)	+= -march=r3000
cflags-$(CONFIG_CPU_TX39XX)	+= -march=r3900
cflags-$(CONFIG_CPU_R4300)	+= -march=r4300 -Wa,--trap
cflags-$(CONFIG_CPU_VR41XX)	+= -march=r4100 -Wa,--trap
cflags-$(CONFIG_CPU_R4X00)	+= -march=r4600 -Wa,--trap
cflags-$(CONFIG_CPU_TX49XX)	+= -march=r4600 -Wa,--trap
170 171
cflags-$(CONFIG_CPU_MIPS32_R1)	+= -march=mips32 -Wa,--trap
cflags-$(CONFIG_CPU_MIPS32_R2)	+= -march=mips32r2 -Wa,--trap
172
cflags-$(CONFIG_CPU_MIPS32_R6)	+= -march=mips32r6 -Wa,--trap -modd-spreg
173 174
cflags-$(CONFIG_CPU_MIPS64_R1)	+= -march=mips64 -Wa,--trap
cflags-$(CONFIG_CPU_MIPS64_R2)	+= -march=mips64r2 -Wa,--trap
175
cflags-$(CONFIG_CPU_MIPS64_R6)	+= -march=mips64r6 -Wa,--trap
R
Ralf Baechle 已提交
176
cflags-$(CONFIG_CPU_R5000)	+= -march=r5000 -Wa,--trap
177
cflags-$(CONFIG_CPU_R5432)	+= $(call cc-option,-march=r5400,-march=r5000) \
L
Linus Torvalds 已提交
178
			-Wa,--trap
179 180
cflags-$(CONFIG_CPU_R5500)	+= $(call cc-option,-march=r5500,-march=r5000) \
			-Wa,--trap
181
cflags-$(CONFIG_CPU_NEVADA)	+= $(call cc-option,-march=rm5200,-march=r5000) \
L
Linus Torvalds 已提交
182
			-Wa,--trap
R
Ralf Baechle 已提交
183
cflags-$(CONFIG_CPU_RM7000)	+= $(call cc-option,-march=rm7000,-march=r5000) \
L
Linus Torvalds 已提交
184
			-Wa,--trap
185
cflags-$(CONFIG_CPU_SB1)	+= $(call cc-option,-march=sb1,-march=r5000) \
L
Linus Torvalds 已提交
186
			-Wa,--trap
187 188
cflags-$(CONFIG_CPU_SB1)	+= $(call cc-option,-mno-mdmx)
cflags-$(CONFIG_CPU_SB1)	+= $(call cc-option,-mno-mips3d)
R
Ralf Baechle 已提交
189 190
cflags-$(CONFIG_CPU_R8000)	+= -march=r8000 -Wa,--trap
cflags-$(CONFIG_CPU_R10000)	+= $(call cc-option,-march=r10000,-march=r8000) \
L
Linus Torvalds 已提交
191
			-Wa,--trap
192 193 194 195
cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += $(call cc-option,-march=octeon) -Wa,--trap
ifeq (,$(findstring march=octeon, $(cflags-$(CONFIG_CPU_CAVIUM_OCTEON))))
cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon
endif
196
cflags-$(CONFIG_CAVIUM_CN63XXP1) += -Wa,-mfix-cn63xxp1
197
cflags-$(CONFIG_CPU_BMIPS)	+= -march=mips32 -Wa,-mips32 -Wa,--trap
L
Linus Torvalds 已提交
198

199 200 201 202
cflags-$(CONFIG_CPU_R4000_WORKAROUNDS)	+= $(call cc-option,-mfix-r4000,)
cflags-$(CONFIG_CPU_R4400_WORKAROUNDS)	+= $(call cc-option,-mfix-r4400,)
cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS)	+= $(call cc-option,-mno-daddi,)

203 204 205 206 207 208 209 210 211
# For smartmips configurations, there are hundreds of warnings due to ISA overrides
# in assembly and header files. smartmips is only supported for MIPS32r1 onwards
# and there is no support for 64-bit. Various '.set mips2' or '.set mips3' or
# similar directives in the kernel will spam the build logs with the following warnings:
# Warning: the `smartmips' extension requires MIPS32 revision 1 or greater
# or
# Warning: the 64-bit MIPS architecture does not support the `smartmips' extension
# Pass -Wa,--no-warn to disable all assembler warnings until the kernel code has
# been fixed properly.
212 213 214 215 216 217 218 219 220
mips-cflags				:= $(cflags-y)
ifeq ($(CONFIG_CPU_HAS_SMARTMIPS),y)
smartmips-ase				:= $(call cc-option-yn,$(mips-cflags) -msmartmips)
cflags-$(smartmips-ase)			+= -msmartmips -Wa,--no-warn
endif
ifeq ($(CONFIG_CPU_MICROMIPS),y)
micromips-ase				:= $(call cc-option-yn,$(mips-cflags) -mmicromips)
cflags-$(micromips-ase)			+= -mmicromips
endif
221
ifeq ($(CONFIG_CPU_HAS_MSA),y)
222
toolchain-msa				:= $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$(comma)-mmsa)
223 224
cflags-$(toolchain-msa)			+= -DTOOLCHAIN_SUPPORTS_MSA
endif
225 226
toolchain-virt				:= $(call cc-option-yn,$(mips-cflags) -mvirt)
cflags-$(toolchain-virt)		+= -DTOOLCHAIN_SUPPORTS_VIRT
227 228 229 230 231 232
# For -mmicromips, use -Wa,-fatal-warnings to catch unsupported -mxpa which
# only warns
xpa-cflags-y				:= $(mips-cflags)
xpa-cflags-$(micromips-ase)		+= -mmicromips -Wa$(comma)-fatal-warnings
toolchain-xpa				:= $(call cc-option-yn,$(xpa-cflags-y) -mxpa)
cflags-$(toolchain-xpa)			+= -DTOOLCHAIN_SUPPORTS_XPA
233 234
toolchain-crc				:= $(call cc-option-yn,$(mips-cflags) -Wa$(comma)-mcrc)
cflags-$(toolchain-crc)			+= -DTOOLCHAIN_SUPPORTS_CRC
P
Paul Burton 已提交
235 236
toolchain-dsp				:= $(call cc-option-yn,$(mips-cflags) -Wa$(comma)-mdsp)
cflags-$(toolchain-dsp)			+= -DTOOLCHAIN_SUPPORTS_DSP
237 238
toolchain-ginv				:= $(call cc-option-yn,$(mips-cflags) -Wa$(comma)-mginv)
cflags-$(toolchain-ginv)		+= -DTOOLCHAIN_SUPPORTS_GINV
239

L
Linus Torvalds 已提交
240 241 242
#
# Firmware support
#
243 244 245
libs-$(CONFIG_FW_ARC)		+= arch/mips/fw/arc/
libs-$(CONFIG_FW_CFE)		+= arch/mips/fw/cfe/
libs-$(CONFIG_FW_SNIPROM)	+= arch/mips/fw/sni/
246
libs-y				+= arch/mips/fw/lib/
L
Linus Torvalds 已提交
247

248 249 250
#
# Kernel compression
#
251
ifdef CONFIG_SYS_SUPPORTS_ZBOOT
252 253 254 255 256
COMPRESSION_FNAME		= vmlinuz
else
COMPRESSION_FNAME		= vmlinux
endif

L
Linus Torvalds 已提交
257 258 259
#
# Board-dependent options and extra files
#
260
include arch/mips/Kbuild.platforms
261

262
ifdef CONFIG_PHYSICAL_START
R
Ralf Baechle 已提交
263
load-y					= $(CONFIG_PHYSICAL_START)
264
endif
265

266
entry-y				= $(shell $(objtree)/arch/mips/tools/elf-entry vmlinux)
267
cflags-y			+= -I$(srctree)/arch/mips/include/asm/mach-generic
L
Linus Torvalds 已提交
268 269
drivers-$(CONFIG_PCI)		+= arch/mips/pci/

270 271 272 273
#
# Automatically detect the build format. By default we choose
# the elf format according to the load address.
# We can always force a build with a 64-bits symbol format by
274
# passing 'KBUILD_SYM32=no' option to the make's command line.
275 276
#
ifdef CONFIG_64BIT
277
  ifndef KBUILD_SYM32
278
    ifeq ($(shell expr $(load-y) \< 0xffffffff80000000), 0)
279
      KBUILD_SYM32 = y
280 281 282
    endif
  endif

283 284 285 286 287
  ifeq ($(KBUILD_SYM32)$(call cc-option-yn,-msym32), yy)
    cflags-y += -msym32 -DKBUILD_64BIT_SYM32
  else
    ifeq ($(CONFIG_CPU_DADDI_WORKAROUNDS), y)
      $(error CONFIG_CPU_DADDI_WORKAROUNDS unsupported without -msym32)
288
    endif
289 290 291
  endif
endif

292
KBUILD_AFLAGS	+= $(cflags-y)
293
KBUILD_CFLAGS	+= $(cflags-y)
294 295
KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y)
KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)
L
Linus Torvalds 已提交
296

297
bootvars-y	= VMLINUX_LOAD_ADDRESS=$(load-y) \
298
		  VMLINUX_ENTRY_ADDRESS=$(entry-y) \
299 300
		  PLATFORM="$(platform-y)" \
		  ITS_INPUTS="$(its-y)"
301 302 303 304 305 306
ifdef CONFIG_32BIT
bootvars-y	+= ADDR_BITS=32
endif
ifdef CONFIG_64BIT
bootvars-y	+= ADDR_BITS=64
endif
307

308 309 310 311
# This is required to get dwarf unwinding tables into .debug_frame
# instead of .eh_frame so we don't discard them.
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables

312
KBUILD_LDFLAGS		+= -m $(ld-emul)
L
Linus Torvalds 已提交
313

R
Ralf Baechle 已提交
314
ifdef CONFIG_MIPS
J
Jean Delvare 已提交
315
CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
316
	egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \
317
	sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
R
Ralf Baechle 已提交
318 319
endif

L
Linus Torvalds 已提交
320 321
OBJCOPYFLAGS		+= --remove-section=.reginfo

T
Thomas Gleixner 已提交
322
head-y := arch/mips/kernel/head.o
L
Linus Torvalds 已提交
323 324

libs-y			+= arch/mips/lib/
325
libs-$(CONFIG_MIPS_FP_SUPPORT) += arch/mips/math-emu/
L
Linus Torvalds 已提交
326

S
Sam Ravnborg 已提交
327 328
# See arch/mips/Kbuild for content of core part of the kernel
core-y += arch/mips/
L
Linus Torvalds 已提交
329

330
drivers-$(CONFIG_MIPS_CRC_SUPPORT) += arch/mips/crypto/
L
Linus Torvalds 已提交
331 332
drivers-$(CONFIG_OPROFILE)	+= arch/mips/oprofile/

W
Wu Zhangjin 已提交
333 334 335
# suspend and hibernation support
drivers-$(CONFIG_PM)	+= arch/mips/power/

336 337 338 339
# boot image targets (arch/mips/boot/)
boot-y			:= vmlinux.bin
boot-y			+= vmlinux.ecoff
boot-y			+= vmlinux.srec
J
James Hogan 已提交
340 341
ifeq ($(shell expr $(load-y) \< 0xffffffff80000000 2> /dev/null), 0)
boot-y			+= uImage
342 343
boot-y			+= uImage.bin
boot-y			+= uImage.bz2
J
James Hogan 已提交
344
boot-y			+= uImage.gz
345 346
boot-y			+= uImage.lzma
boot-y			+= uImage.lzo
J
James Hogan 已提交
347
endif
348 349 350 351 352
boot-y			+= vmlinux.itb
boot-y			+= vmlinux.gz.itb
boot-y			+= vmlinux.bz2.itb
boot-y			+= vmlinux.lzma.itb
boot-y			+= vmlinux.lzo.itb
353 354 355 356 357 358

# compressed boot image targets (arch/mips/boot/compressed/)
bootz-y			:= vmlinuz
bootz-y			+= vmlinuz.bin
bootz-y			+= vmlinuz.ecoff
bootz-y			+= vmlinuz.srec
359 360 361
ifeq ($(shell expr $(zload-y) \< 0xffffffff80000000 2> /dev/null), 0)
bootz-y			+= uzImage.bin
endif
362

363 364
ifdef CONFIG_LASAT
rom.bin rom.sw: vmlinux
365 366
	$(Q)$(MAKE) $(build)=arch/mips/lasat/image \
		$(bootvars-y) $@
367 368
endif

L
Linus Torvalds 已提交
369 370 371 372 373
#
# Some machines like the Indy need 32-bit ELF binaries for booting purposes.
# Other need ECOFF, so we build a 32-bit ELF binary for them which we then
# convert to ECOFF using elf2ecoff.
#
374 375
quiet_cmd_32 = OBJCOPY $@
	cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
L
Linus Torvalds 已提交
376
vmlinux.32: vmlinux
377
	$(call cmd,32)
L
Linus Torvalds 已提交
378 379 380 381 382

#
# The 64-bit ELF tools are pretty broken so at this time we generate 64-bit
# ELF files from 32-bit files by conversion.
#
383 384
quiet_cmd_64 = OBJCOPY $@
	cmd_64 = $(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@
L
Linus Torvalds 已提交
385
vmlinux.64: vmlinux
386
	$(call cmd,64)
L
Linus Torvalds 已提交
387

388
all:	$(all-y) $(KBUILD_DTBS)
L
Linus Torvalds 已提交
389

390
# boot
391
$(boot-y): $(vmlinux-32) FORCE
392 393
	$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) \
		$(bootvars-y) arch/mips/boot/$@
L
Linus Torvalds 已提交
394

395
ifdef CONFIG_SYS_SUPPORTS_ZBOOT
396
# boot/compressed
397
$(bootz-y): $(vmlinux-32) FORCE
398
	$(Q)$(MAKE) $(build)=arch/mips/boot/compressed \
399
		$(bootvars-y) 32bit-bfd=$(32bit-bfd) $@
400 401 402 403 404
else
vmlinuz: FORCE
	@echo '   CONFIG_SYS_SUPPORTS_ZBOOT is not enabled'
	/bin/false
endif
405 406


S
Sam Ravnborg 已提交
407
CLEAN_FILES += vmlinux.32 vmlinux.64
L
Linus Torvalds 已提交
408

409
# device-trees
410
core-y += arch/mips/boot/dts/
411

412 413
archprepare:
ifdef CONFIG_MIPS32_N32
A
Arnd Bergmann 已提交
414
	@$(kecho) '  Checking missing-syscalls for N32'
415
	$(Q)$(MAKE) $(build)=. missing-syscalls missing_syscalls_flags="-mabi=n32"
416 417
endif
ifdef CONFIG_MIPS32_O32
A
Arnd Bergmann 已提交
418
	@$(kecho) '  Checking missing-syscalls for O32'
419
	$(Q)$(MAKE) $(build)=. missing-syscalls missing_syscalls_flags="-mabi=32"
420 421
endif

422 423
install:
	$(Q)install -D -m 755 vmlinux $(INSTALL_PATH)/vmlinux-$(KERNELRELEASE)
424
ifdef CONFIG_SYS_SUPPORTS_ZBOOT
425
	$(Q)install -D -m 755 vmlinuz $(INSTALL_PATH)/vmlinuz-$(KERNELRELEASE)
426
endif
427 428 429
	$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
	$(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)

L
Linus Torvalds 已提交
430
archclean:
S
Sam Ravnborg 已提交
431 432
	$(Q)$(MAKE) $(clean)=arch/mips/boot
	$(Q)$(MAKE) $(clean)=arch/mips/boot/compressed
M
Matt Redfearn 已提交
433
	$(Q)$(MAKE) $(clean)=arch/mips/boot/tools
S
Sam Ravnborg 已提交
434
	$(Q)$(MAKE) $(clean)=arch/mips/lasat
L
Linus Torvalds 已提交
435

436 437 438
archheaders:
	$(Q)$(MAKE) $(build)=arch/mips/kernel/syscalls all

R
Ralf Baechle 已提交
439
define archhelp
440
	echo '  install              - install kernel into $(INSTALL_PATH)'
R
Ralf Baechle 已提交
441 442 443
	echo '  vmlinux.ecoff        - ECOFF boot image'
	echo '  vmlinux.bin          - Raw binary boot image'
	echo '  vmlinux.srec         - SREC boot image'
444
	echo '  vmlinux.32           - 64-bit boot image wrapped in 32bits (IP22/IP32)'
445 446 447 448
	echo '  vmlinuz              - Compressed boot(zboot) image'
	echo '  vmlinuz.ecoff        - ECOFF zboot image'
	echo '  vmlinuz.bin          - Raw binary zboot image'
	echo '  vmlinuz.srec         - SREC zboot image'
J
James Hogan 已提交
449
	echo '  uImage               - U-Boot image'
450 451
	echo '  uImage.bin           - U-Boot image (uncompressed)'
	echo '  uImage.bz2           - U-Boot image (bz2)'
J
James Hogan 已提交
452
	echo '  uImage.gz            - U-Boot image (gzip)'
453 454
	echo '  uImage.lzma          - U-Boot image (lzma)'
	echo '  uImage.lzo           - U-Boot image (lzo)'
455
	echo '  uzImage.bin          - U-Boot image (self-extracting)'
R
Ralf Baechle 已提交
456
	echo
L
Lucas De Marchi 已提交
457
	echo '  These will be default as appropriate for a configured platform.'
458 459 460 461 462 463
	echo
	echo '  If you are targeting a system supported by generic kernels you may'
	echo '  configure the kernel for a given architecture target like so:'
	echo
	echo '  {micro32,32,64}{r1,r2,r6}{el,}_defconfig <BOARDS="list of boards">'
	echo
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
	echo '  Where BOARDS is some subset of the following:'
	for board in $(sort $(BOARDS)); do echo "    $${board}"; done
	echo
	echo '  Specifically the following generic default configurations are'
	echo '  supported:'
	echo
	$(foreach cfg,$(generic_defconfigs),
	  printf "  %-24s - Build generic kernel for $(call describe_generic_defconfig,$(cfg))\n" $(cfg);)
	echo
	echo '  The following legacy default configurations have been converted to'
	echo '  generic and can still be used:'
	echo
	$(foreach cfg,$(sort $(legacy_defconfigs)),
	  printf "  %-24s - Build $($(cfg)-y)\n" $(cfg);)
	echo
479
	echo '  Otherwise, the following default configurations are available:'
R
Ralf Baechle 已提交
480
endef
481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512

generic_config_dir = $(srctree)/arch/$(ARCH)/configs/generic
generic_defconfigs :=

#
# If the user generates a generic kernel configuration without specifying a
# list of boards to include the config fragments for, default to including all
# available board config fragments.
#
ifeq ($(BOARDS),)
BOARDS = $(patsubst board-%.config,%,$(notdir $(wildcard $(generic_config_dir)/board-*.config)))
endif

#
# Generic kernel configurations which merge generic_defconfig with the
# appropriate config fragments from arch/mips/configs/generic/, resulting in
# the ability to easily configure the kernel for a given architecture,
# endianness & set of boards without duplicating the needed configuration in
# hundreds of defconfig files.
#
define gen_generic_defconfigs
$(foreach bits,$(1),$(foreach rev,$(2),$(foreach endian,$(3),
target := $(bits)$(rev)$(filter el,$(endian))_defconfig
generic_defconfigs += $$(target)
$$(target): $(generic_config_dir)/$(bits)$(rev).config
$$(target): $(generic_config_dir)/$(endian).config
)))
endef

$(eval $(call gen_generic_defconfigs,32 64,r1 r2 r6,eb el))
$(eval $(call gen_generic_defconfigs,micro32,r2,eb el))

513 514 515 516
define describe_generic_defconfig
$(subst 32r,MIPS32 r,$(subst 64r,MIPS64 r,$(subst el, little endian,$(patsubst %_defconfig,%,$(1)))))
endef

517 518 519
.PHONY: $(generic_defconfigs)
$(generic_defconfigs):
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh \
520 521 522 523 524 525 526 527
		-m -O $(objtree) $(srctree)/arch/$(ARCH)/configs/generic_defconfig $^ | \
		grep -Ev '^#'
	$(Q)cp $(KCONFIG_CONFIG) $(objtree)/.config.$@
	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig \
		KCONFIG_CONFIG=$(objtree)/.config.$@ >/dev/null
	$(Q)$(CONFIG_SHELL) $(srctree)/arch/$(ARCH)/tools/generic-board-config.sh \
		$(srctree) $(objtree) $(objtree)/.config.$@ $(KCONFIG_CONFIG) \
		"$(origin BOARDS)" $(BOARDS)
528
	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
529 530 531 532 533

#
# Prevent generic merge_config rules attempting to merge single fragments
#
$(generic_config_dir)/%.config: ;
534

535 536 537 538 539 540 541 542 543 544 545 546 547
#
# Prevent direct use of generic_defconfig, which is intended to be used as the
# basis of the various ISA-specific targets generated above.
#
.PHONY: generic_defconfig
generic_defconfig:
	$(Q)echo "generic_defconfig is not intended for direct use, but should instead be"
	$(Q)echo "used via an ISA-specific target from the following list:"
	$(Q)echo
	$(Q)for cfg in $(generic_defconfigs); do echo "  $${cfg}"; done
	$(Q)echo
	$(Q)false

548 549 550 551 552
#
# Legacy defconfig compatibility - these targets used to be real defconfigs but
# now that the boards have been converted to use the generic kernel they are
# wrappers around the generic rules above.
#
553 554 555
legacy_defconfigs		+= ocelot_defconfig
ocelot_defconfig-y		:= 32r2el_defconfig BOARDS=ocelot

J
James Hogan 已提交
556 557
legacy_defconfigs		+= sead3_defconfig
sead3_defconfig-y		:= 32r2el_defconfig BOARDS=sead-3
558

J
James Hogan 已提交
559 560
legacy_defconfigs		+= sead3micro_defconfig
sead3micro_defconfig-y		:= micro32r2el_defconfig BOARDS=sead-3
561

J
James Hogan 已提交
562 563 564 565 566 567
legacy_defconfigs		+= xilfpga_defconfig
xilfpga_defconfig-y		:= 32r2el_defconfig BOARDS=xilfpga

.PHONY: $(legacy_defconfigs)
$(legacy_defconfigs):
	$(Q)$(MAKE) -f $(srctree)/Makefile $($@-y)