linux-imx/arch/powerpc/Makefile
Olaf Hering f48b8296b3 [PATCH] powerpc32: Set cpu explicitly in kernel compiles
Compile the 32bit kernel with -mcpu=powerpc. This reduces the imagesize
when a compiler is used that defaults to -mtune=power4. It inserts lots
of nops to please the 64bit cpu instruction scheduling. But all these nops
are not needed for 32bit kernels.

Example with SLES10 gcc 4.1.0 and arch/powerpc/configs/pmac32_defconfig:

                    vmlinux  vmlinux.strip  vmlinux.gz
 -O2                4980515     4187528      1846829
 -Os                4618801     3827084      1673333
 -O2 -mcpu=powerpc  4738851     3945868      1816253
 -Os -mcpu=powerpc  4532785     3741068      1664688

Signed-off-by: Olaf Hering <olh@suse.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-13 09:38:33 -07:00

6.1 KiB

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" and "archdep" for cleaning up and making dependencies for

this architecture.

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 by Linus Torvalds

Changes for PPC by Gary Thomas

Rewritten by Cort Dougan and Paul Mackerras

HAS_BIARCH := $(call cc-option-yn, -m32)

Set default 32 bits cross compilers for vdso and boot wrapper

CROSS32_COMPILE ?=

CROSS32CC := $(CROSS32_COMPILE)gcc CROSS32AS := $(CROSS32_COMPILE)as CROSS32LD := $(CROSS32_COMPILE)ld CROSS32OBJCOPY := $(CROSS32_COMPILE)objcopy

ifeq ($(HAS_BIARCH),y) ifeq ($(CROSS32_COMPILE),) CROSS32CC := $(CC) -m32 CROSS32AS := $(AS) -a32 CROSS32LD := $(LD) -m elf32ppc CROSS32OBJCOPY := $(OBJCOPY) endif endif

export CROSS32CC CROSS32AS CROSS32LD CROSS32OBJCOPY

KBUILD_DEFCONFIG := $(shell uname -m)_defconfig

ifeq ($(CONFIG_PPC64),y) OLDARCH := ppc64 SZ := 64

new_nm := $(shell if $(NM) --help 2>&1 | grep -- '--synthetic' > /dev/null; then echo y; else echo n; fi)

ifeq ($(new_nm),y) NM := $(NM) --synthetic endif

else OLDARCH := ppc SZ := 32 endif

UTS_MACHINE := $(OLDARCH)

ifeq ($(HAS_BIARCH),y) override AS += -a$(SZ) override LD += -m elf$(SZ)ppc override CC += -m$(SZ) endif

LDFLAGS_vmlinux := -Bstatic

The -Iarch/$(ARCH)/include is temporary while we are merging

CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -Iarch/$(ARCH)/include AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple CPPFLAGS += $(CPPFLAGS-y) AFLAGS += $(AFLAGS-y) CFLAGS += -msoft-float -pipe $(CFLAGS-y) CPP = $(CC) -E $(CFLAGS)

Temporary hack until we have migrated to asm-powerpc

LINUXINCLUDE-$(CONFIG_PPC32) := -Iarch/$(ARCH)/include LINUXINCLUDE += $(LINUXINCLUDE-y)

CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__

ifeq ($(CONFIG_PPC64),y) GCC_BROKEN_VEC := $(shell if [ $(call cc-version) -lt 0400 ] ; then echo "y"; fi)

ifeq ($(CONFIG_POWER4_ONLY),y) ifeq ($(CONFIG_ALTIVEC),y) ifeq ($(GCC_BROKEN_VEC),y) CFLAGS += $(call cc-option,-mcpu=970) else CFLAGS += $(call cc-option,-mcpu=power4) endif else CFLAGS += $(call cc-option,-mcpu=power4) endif else CFLAGS += $(call cc-option,-mtune=power4) endif endif

No AltiVec instruction when building kernel

CFLAGS += $(call cc-option,-mno-altivec)

Enable unit-at-a-time mode when possible. It shrinks the

kernel considerably.

CFLAGS += $(call cc-option,-funit-at-a-time)

ifndef CONFIG_FSL_BOOKE CFLAGS += -mstring endif

ifeq ($(CONFIG_6xx),y) CFLAGS += -mcpu=powerpc endif

cpu-as-$(CONFIG_PPC64BRIDGE) += -Wa,-mppc64bridge cpu-as-$(CONFIG_4xx) += -Wa,-m405 cpu-as-$(CONFIG_6xx) += -Wa,-maltivec cpu-as-$(CONFIG_POWER4) += -Wa,-maltivec cpu-as-$(CONFIG_E500) += -Wa,-me500 cpu-as-$(CONFIG_E200) += -Wa,-me200

AFLAGS += $(cpu-as-y) CFLAGS += $(cpu-as-y)

head-y := arch/powerpc/kernel/head_32.o head-$(CONFIG_PPC64) := arch/powerpc/kernel/head_64.o head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o head-$(CONFIG_4xx) := arch/powerpc/kernel/head_4xx.o head-$(CONFIG_44x) := arch/powerpc/kernel/head_44x.o head-$(CONFIG_FSL_BOOKE) := arch/powerpc/kernel/head_fsl_booke.o

head-$(CONFIG_PPC64) += arch/powerpc/kernel/entry_64.o head-$(CONFIG_PPC_FPU) += arch/powerpc/kernel/fpu.o

core-y += arch/powerpc/kernel/
arch/powerpc/mm/
arch/powerpc/lib/
arch/powerpc/sysdev/
arch/powerpc/platforms/ core-$(CONFIG_MATH_EMULATION) += arch/powerpc/math-emu/ core-$(CONFIG_XMON) += arch/powerpc/xmon/

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

Default to zImage, override when needed

defaultimage-y := zImage defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage KBUILD_IMAGE := $(defaultimage-y) all: $(KBUILD_IMAGE)

CPPFLAGS_vmlinux.lds := -Upowerpc

BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm uImage vmlinux.bin

PHONY += $(BOOT_TARGETS)

boot := arch/$(ARCH)/boot

$(BOOT_TARGETS): vmlinux $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)

define archhelp @echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)' @echo ' install - Install kernel using' @echo ' (your) ~/bin/installkernel or' @echo ' (distribution) /sbin/installkernel or' @echo ' install to $$(INSTALL_PATH) and run lilo' @echo ' *_defconfig - Select default config from arch/$(ARCH)/configs' endef

archclean: $(Q)$(MAKE) $(clean)=$(boot)

archmrproper: $(Q)rm -rf arch/$(ARCH)/include

archprepare: checkbin

ifeq ($(CONFIG_PPC32),y)

Temporary hack until we have migrated to asm-powerpc

include/asm: arch/$(ARCH)/include/asm arch/$(ARCH)/include/asm: FORCE $(Q)if [ ! -d arch/$(ARCH)/include ]; then mkdir -p arch/$(ARCH)/include; fi $(Q)ln -fsn $(srctree)/include/asm-$(OLDARCH) arch/$(ARCH)/include/asm endif

Use the file '.tmp_gas_check' for binutils tests, as gas won't output

to stdout and these checks are run even on install targets.

TOUT := .tmp_gas_check

Ensure this is binutils 2.12.1 (or 2.12.90.0.7) or later for altivec

instructions.

gcc-3.4 and binutils-2.14 are a fatal combination.

checkbin: @if test "$(call cc-version)" = "0304" ; then
if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build ';
echo 'correctly with gcc-3.4 and your version of binutils.';
echo '*** Please upgrade your binutils or downgrade your gcc';
false;
fi ;
fi @if ! /bin/echo dssall | $(AS) -many -o $(TOUT) >/dev/null 2>&1 ; then
echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build ' ;
echo 'correctly with old versions of binutils.' ;
echo '*** Please upgrade your binutils to 2.12.1 or newer' ;
false ;
fi

CLEAN_FILES += $(TOUT)