linux-imx/arch/sh/Makefile
Paul Smith 4f1933620f kbuild: change kbuild to not rely on incorrect GNU make behavior
The kbuild system takes advantage of an incorrect behavior in GNU make.
Once this behavior is fixed, all files in the kernel rebuild every time,
even if nothing has changed.  This patch ensures kbuild works with both
the incorrect and correct behaviors of GNU make.

For more details on the incorrect behavior, see:

http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html

Changes in this patch:
  - Keep all targets that are to be marked .PHONY in a variable, PHONY.
  - Add .PHONY: $(PHONY) to mark them properly.
  - Remove any $(PHONY) files from the $? list when determining whether
    targets are up-to-date or not.

Signed-off-by: Paul Smith <psmith@gnu.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
2006-03-06 00:09:51 +01:00

5.8 KiB

Id: Makefile,v 1.35 2004/04/15 03:39:20 sugioka Exp

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) 1999 Kaz Kojima

Copyright (C) 2002, 2003, 2004 Paul Mundt

Copyright (C) 2002 M. R. Brown

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

cflags-y := -mb cflags-$(CONFIG_CPU_LITTLE_ENDIAN) := -ml

isa-y := any isa-$(CONFIG_CPU_SH2) := sh2 isa-$(CONFIG_CPU_SH3) := sh3 isa-$(CONFIG_CPU_SH4) := sh4 isa-$(CONFIG_CPU_SH4A) := sh4a isa-$(CONFIG_CPU_SH2A) := sh2a

isa-$(CONFIG_SH_DSP) := $(isa-y)-dsp

ifndef CONFIG_MMU isa-y := $(isa-y)-nommu endif

ifndef CONFIG_SH_FPU isa-y := $(isa-y)-nofpu endif

cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)

cflags-$(CONFIG_CPU_SH2) += -m2 cflags-$(CONFIG_CPU_SH3) += -m3 cflags-$(CONFIG_CPU_SH4) += -m4
$(call cc-option,-mno-implicit-fp,-m4-nofpu) cflags-$(CONFIG_CPU_SH4A) += $(call cc-option,-m4a-nofpu,)

cflags-$(CONFIG_SH_DSP) += -Wa,-dsp cflags-$(CONFIG_SH_KGDB) += -g

cflags-$(CONFIG_MORE_COMPILE_OPTIONS) +=
$(shell echo $(CONFIG_COMPILE_OPTIONS) | sed -e 's/"//g')

OBJCOPYFLAGS := -O binary -R .note -R .comment -R .stab -R .stabstr -S

arch/sh/defconfig doesn't reflect any real hardware, and as such should

never be used by anyone. Use a board-specific defconfig that has a

reasonable chance of being current instead.

KBUILD_DEFCONFIG := rts7751r2d_defconfig

Choosing incompatible machines durings configuration will result in

error messages during linking.

LDFLAGS_vmlinux += -e _stext

ifdef CONFIG_CPU_LITTLE_ENDIAN LDFLAGS_vmlinux += --defsym 'jiffies=jiffies_64' LDFLAGS += -EL else LDFLAGS_vmlinux += --defsym 'jiffies=jiffies_64+4' LDFLAGS += -EB endif

CFLAGS += -pipe $(cflags-y) AFLAGS += $(cflags-y)

head-y := arch/sh/kernel/head.o arch/sh/kernel/init_task.o

LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)

core-y += arch/sh/kernel/ arch/sh/mm/

Boards

machdir-$(CONFIG_SH_SOLUTION_ENGINE) := se/770x machdir-$(CONFIG_SH_7751_SOLUTION_ENGINE) := se/7751 machdir-$(CONFIG_SH_7300_SOLUTION_ENGINE) := se/7300 machdir-$(CONFIG_SH_73180_SOLUTION_ENGINE) := se/73180 machdir-$(CONFIG_SH_STB1_HARP) := harp machdir-$(CONFIG_SH_STB1_OVERDRIVE) := overdrive machdir-$(CONFIG_SH_HP6XX) := hp6xx machdir-$(CONFIG_SH_CQREEK) := cqreek machdir-$(CONFIG_SH_DMIDA) := dmida machdir-$(CONFIG_SH_EC3104) := ec3104 machdir-$(CONFIG_SH_SATURN) := saturn machdir-$(CONFIG_SH_DREAMCAST) := dreamcast machdir-$(CONFIG_SH_CAT68701) := cat68701 machdir-$(CONFIG_SH_BIGSUR) := bigsur machdir-$(CONFIG_SH_SH2000) := sh2000 machdir-$(CONFIG_SH_ADX) := adx machdir-$(CONFIG_SH_MPC1211) := mpc1211 machdir-$(CONFIG_SH_SH03) := sh03 machdir-$(CONFIG_SH_SECUREEDGE5410) := snapgear machdir-$(CONFIG_SH_HS7751RVOIP) := renesas/hs7751rvoip machdir-$(CONFIG_SH_RTS7751R2D) := renesas/rts7751r2d machdir-$(CONFIG_SH_7751_SYSTEMH) := renesas/systemh machdir-$(CONFIG_SH_EDOSK7705) := renesas/edosk7705 machdir-$(CONFIG_SH_SH4202_MICRODEV) := superh/microdev machdir-$(CONFIG_SH_UNKNOWN) := unknown

incdir-y := $(notdir $(machdir-y))

incdir-$(CONFIG_SH_SOLUTION_ENGINE) := se incdir-$(CONFIG_SH_7751_SOLUTION_ENGINE) := se7751 incdir-$(CONFIG_SH_7300_SOLUTION_ENGINE) := se7300 incdir-$(CONFIG_SH_73180_SOLUTION_ENGINE) := se73180 incdir-$(CONFIG_SH_HP600) := hp6xx

ifneq ($(machdir-y),) core-y += arch/sh/boards/$(machdir-y)/ endif

Companion chips

core-$(CONFIG_HD64461) += arch/sh/cchips/hd6446x/hd64461/ core-$(CONFIG_HD64465) += arch/sh/cchips/hd6446x/hd64465/ core-$(CONFIG_VOYAGERGX) += arch/sh/cchips/voyagergx/

cpuincdir-$(CONFIG_CPU_SH2) := cpu-sh2 cpuincdir-$(CONFIG_CPU_SH3) := cpu-sh3 cpuincdir-$(CONFIG_CPU_SH4) := cpu-sh4

libs-y := arch/sh/lib/ $(libs-y) $(LIBGCC)

drivers-y += arch/sh/drivers/ drivers-$(CONFIG_OPROFILE) += arch/sh/oprofile/

boot := arch/sh/boot

CPPFLAGS_vmlinux.lds := -traditional

ifneq ($(KBUILD_SRC),) incdir-prefix := $(srctree)/include/asm-sh/ else incdir-prefix := endif

Update machine arch and proc symlinks if something which affects

them changed. We use .arch and .mach to indicate when they were

updated last, otherwise make uses the target directory mtime.

include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) include/config/MARKER @echo ' SYMLINK include/asm-sh/cpu -> include/asm-sh/$(cpuincdir-y)' $(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi $(Q)ln -fsn $(incdir-prefix)$(cpuincdir-y) include/asm-sh/cpu @touch $@

Most boards have their own mach directories. For the ones that

don't, just reference the parent directory so the semantics are

kept roughly the same.

include/asm-sh/.mach: $(wildcard include/config/sh/*.h) include/config/MARKER @echo -n ' SYMLINK include/asm-sh/mach -> ' $(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi $(Q)if [ -d $(incdir-prefix)$(incdir-y) ]; then
echo -e 'include/asm-sh/$(incdir-y)';
ln -fsn $(incdir-prefix)$(incdir-y)
include/asm-sh/mach;
else
echo -e 'include/asm-sh';
ln -fsn $(incdir-prefix) include/asm-sh/mach;
fi @touch $@

archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach

PHONY += maketools FORCE maketools: include/linux/version.h FORCE $(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h

all: zImage

zImage: vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@

compressed: zImage

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

CLEAN_FILES += include/asm-sh/machtypes.h

define archhelp @echo ' zImage - Compressed kernel image (arch/sh/boot/zImage)' endef