m68knommu: m5206e build fix
[safe/jmp/linux-2.6] / arch / sh / Makefile
index 50c5cc3..4067b0d 100644 (file)
-# $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.
+# arch/sh/Makefile
 #
 # Copyright (C) 1999  Kaz Kojima
-# Copyright (C) 2002, 2003, 2004  Paul Mundt
+# Copyright (C) 2002 - 2008  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
+# 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.
 #
-
-cflags-y                               := -mb
-cflags-$(CONFIG_CPU_LITTLE_ENDIAN)     := -ml
-
 isa-y                                  := any
+isa-$(CONFIG_SH_DSP)                   := sh
 isa-$(CONFIG_CPU_SH2)                  := sh2
+isa-$(CONFIG_CPU_SH2A)                 := sh2a
 isa-$(CONFIG_CPU_SH3)                  := sh3
 isa-$(CONFIG_CPU_SH4)                  := sh4
 isa-$(CONFIG_CPU_SH4A)                 := sh4a
-isa-$(CONFIG_CPU_SH2A)                 := sh2a
+isa-$(CONFIG_CPU_SH4AL_DSP)            := sh4al
+isa-$(CONFIG_CPU_SH5)                  := shmedia
 
+ifeq ($(CONFIG_SUPERH32),y)
 isa-$(CONFIG_SH_DSP)                   := $(isa-y)-dsp
-
-ifndef CONFIG_MMU
-isa-y                  := $(isa-y)-nommu
+isa-y                                  := $(isa-y)-up
 endif
 
-ifndef CONFIG_SH_FPU
-isa-y                  := $(isa-y)-nofpu
-endif
+cflags-$(CONFIG_CPU_SH2)               := $(call cc-option,-m2,)
+cflags-$(CONFIG_CPU_SH2A)              += $(call cc-option,-m2a,) \
+                                          $(call cc-option,-m2a-nofpu,)
+cflags-$(CONFIG_CPU_SH3)               := $(call cc-option,-m3,)
+cflags-$(CONFIG_CPU_SH4)               := $(call cc-option,-m4,) \
+       $(call cc-option,-mno-implicit-fp,-m4-nofpu)
+cflags-$(CONFIG_CPU_SH4A)              += $(call cc-option,-m4a,) \
+                                          $(call cc-option,-m4a-nofpu,)
+cflags-$(CONFIG_CPU_SH4AL_DSP)         += $(call cc-option,-m4al,)
+cflags-$(CONFIG_CPU_SH5)               := $(call cc-option,-m5-32media-nofpu,)
 
-cflags-y       += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
+ifeq ($(cflags-y),)
+#
+# In the case where we are stuck with a compiler that has been uselessly
+# restricted to a particular ISA, a favourite default of newer GCCs when
+# extensive multilib targets are not provided, ensure we get the best fit
+# regarding FP generation. This is intentionally stupid (albeit many
+# orders of magnitude less than GCC's default behaviour), as anything
+# with a large number of multilib targets better have been built
+# correctly for the target in mind.
+#
+cflags-y       += $(shell $(CC) $(KBUILD_CFLAGS) -print-multi-lib | \
+                    grep nofpu | sed q | sed -e 's/^/-/;s/;.*$$//')
+# At this point, anything goes.
+isaflags-y     := $(call as-option,-Wa$(comma)-isa=any,)
+else
+#
+# -Wa,-isa= tuning implies -Wa,-dsp for the versions of binutils that
+# support it, while -Wa,-dsp by itself limits the range of usable opcodes
+# on certain CPU subtypes. Try the ISA variant first, and if that fails,
+# fall back on -Wa,-dsp for the old binutils versions. Even without DSP
+# opcodes, we always want the best ISA tuning the version of binutils
+# will provide.
+#
+isaflags-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,)
+isaflags-$(CONFIG_SH_DSP)              := \
+       $(call as-option,-Wa$(comma)-isa=$(isa-y),-Wa$(comma)-dsp)
+endif
 
-cflags-$(CONFIG_SH_DSP)                        += -Wa,-dsp
-cflags-$(CONFIG_SH_KGDB)               += -g
+cflags-$(CONFIG_CPU_BIG_ENDIAN)                += -mb
+cflags-$(CONFIG_CPU_LITTLE_ENDIAN)     += -ml
+
+cflags-y       += $(call cc-option,-mno-fdpic)
+cflags-y       += $(isaflags-y) -ffreestanding
 
 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
+OBJCOPYFLAGS   := -O binary -R .note -R .note.gnu.build-id -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
+# Give the various platforms the opportunity to set default image types
+defaultimage-$(CONFIG_SUPERH32)                        := zImage
+defaultimage-$(CONFIG_SH_SH7785LCR)            := uImage
+defaultimage-$(CONFIG_SH_RSK)                  := uImage
+defaultimage-$(CONFIG_SH_7206_SOLUTION_ENGINE) := vmlinux
+defaultimage-$(CONFIG_SH_7619_SOLUTION_ENGINE) := vmlinux
+
+# Set some sensible Kbuild defaults
+KBUILD_DEFCONFIG       := shx3_defconfig
+KBUILD_IMAGE           := $(defaultimage-y)
 
 #
 # Choosing incompatible machines durings configuration will result in
 # error messages during linking.
 #
-LDFLAGS_vmlinux     += -e _stext
+ifdef CONFIG_SUPERH32
+UTS_MACHINE    := sh
+LDFLAGS_vmlinux        += -e _stext
+else
+UTS_MACHINE    := sh64
+LDFLAGS_vmlinux        += --defsym phys_stext=_stext-$(CONFIG_PAGE_OFFSET) \
+                  --defsym phys_stext_shmedia=phys_stext+1 \
+                  -e phys_stext_shmedia
+endif
 
 ifdef CONFIG_CPU_LITTLE_ENDIAN
 LDFLAGS_vmlinux                += --defsym 'jiffies=jiffies_64'
@@ -71,122 +109,129 @@ 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_R7780RP)                   := renesas/r7780rp
-machdir-$(CONFIG_SH_SH4202_MICRODEV)           := superh/microdev
-machdir-$(CONFIG_SH_LANDISK)                   := landisk
-machdir-$(CONFIG_SH_TITAN)                     := titan
-machdir-$(CONFIG_SH_UNKNOWN)                   := unknown
-
-incdir-y                       := $(notdir $(machdir-y))
-incdir-$(CONFIG_SH_HP6XX)                      := hp6xx
+head-y                 := arch/sh/kernel/init_task.o
+head-$(CONFIG_SUPERH32)        += arch/sh/kernel/head_32.o
+head-$(CONFIG_SUPERH64)        += arch/sh/kernel/head_64.o
+
+core-y                         += arch/sh/kernel/ arch/sh/mm/ arch/sh/boards/
+core-$(CONFIG_SH_FPU_EMU)      += arch/sh/math-emu/
+
+# Mach groups
+machdir-$(CONFIG_SOLUTION_ENGINE)              += mach-se
+machdir-$(CONFIG_SH_HP6XX)                     += mach-hp6xx
+machdir-$(CONFIG_SH_DREAMCAST)                 += mach-dreamcast
+machdir-$(CONFIG_SH_SH03)                      += mach-sh03
+machdir-$(CONFIG_SH_SECUREEDGE5410)            += mach-snapgear
+machdir-$(CONFIG_SH_RTS7751R2D)                        += mach-r2d
+machdir-$(CONFIG_SH_7751_SYSTEMH)              += mach-systemh
+machdir-$(CONFIG_SH_EDOSK7705)                 += mach-edosk7705
+machdir-$(CONFIG_SH_HIGHLANDER)                        += mach-highlander
+machdir-$(CONFIG_SH_MIGOR)                     += mach-migor
+machdir-$(CONFIG_SH_SDK7780)                   += mach-sdk7780
+machdir-$(CONFIG_SH_X3PROTO)                   += mach-x3proto
+machdir-$(CONFIG_SH_SH7763RDP)                 += mach-sh7763rdp
+machdir-$(CONFIG_SH_SH4202_MICRODEV)           += mach-microdev
+machdir-$(CONFIG_SH_LANDISK)                   += mach-landisk
+machdir-$(CONFIG_SH_TITAN)                     += mach-titan
+machdir-$(CONFIG_SH_LBOX_RE2)                  += mach-lboxre2
+machdir-$(CONFIG_SH_CAYMAN)                    += mach-cayman
+machdir-$(CONFIG_SH_RSK)                       += mach-rsk
 
 ifneq ($(machdir-y),)
-core-y                         += arch/sh/boards/$(machdir-y)/
+core-y += $(addprefix arch/sh/boards/, \
+            $(filter-out ., $(patsubst %,%/,$(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/
+# Common machine type headers. Not part of the arch/sh/boards/ hierarchy.
+machdir-y      += mach-common
 
-cpuincdir-$(CONFIG_CPU_SH2)    := cpu-sh2
-cpuincdir-$(CONFIG_CPU_SH3)    := cpu-sh3
-cpuincdir-$(CONFIG_CPU_SH4)    := cpu-sh4
+# Companion chips
+core-$(CONFIG_HD6446X_SERIES)  += arch/sh/cchips/hd6446x/
 
-libs-y                         := arch/sh/lib/ $(libs-y) $(LIBGCC)
+#
+# CPU header paths
+#
+# These are ordered by optimization level. A CPU family that is a subset
+# of another (ie, SH-2A / SH-2), is picked up first, with increasing
+# levels of genericness if nothing more suitable is situated in the
+# hierarchy.
+#
+# As an example, in order of preference, SH-2A > SH-2 > common definitions.
+#
+cpuincdir-$(CONFIG_CPU_SH2A)   += cpu-sh2a
+cpuincdir-$(CONFIG_CPU_SH2)    += cpu-sh2
+cpuincdir-$(CONFIG_CPU_SH3)    += cpu-sh3
+cpuincdir-$(CONFIG_CPU_SH4)    += cpu-sh4
+cpuincdir-$(CONFIG_CPU_SH5)    += cpu-sh5
+cpuincdir-y                    += cpu-common   # Must be last
 
 drivers-y                      += arch/sh/drivers/
 drivers-$(CONFIG_OPROFILE)     += arch/sh/oprofile/
 
 boot := arch/sh/boot
 
-CPPFLAGS_vmlinux.lds := -traditional
+cflags-y       += $(foreach d, $(cpuincdir-y), -Iarch/sh/include/$(d)) \
+                  $(foreach d, $(machdir-y), -Iarch/sh/include/$(d))
 
-ifneq ($(KBUILD_SRC),)
-incdir-prefix  := $(srctree)/include/asm-sh/
-else
-incdir-prefix  :=
-endif
+KBUILD_CFLAGS          += -pipe $(cflags-y)
+KBUILD_CPPFLAGS                += $(cflags-y)
+KBUILD_AFLAGS          += $(cflags-y)
 
-#      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/auto.conf
-       @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/auto.conf
-       @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
+libs-$(CONFIG_SUPERH32)                := arch/sh/lib/ $(libs-y)
+libs-$(CONFIG_SUPERH64)                := arch/sh/lib64/ $(libs-y)
 
 PHONY += maketools FORCE
+
 maketools:  include/linux/version.h FORCE
        $(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
 
-all: zImage
+all: $(KBUILD_IMAGE)
 
-zImage: vmlinux
+zImage uImage uImage.srec vmlinux.srec: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
 compressed: zImage
 
+archprepare: maketools arch/sh/lib64/syscalltab.h
+
 archclean:
        $(Q)$(MAKE) $(clean)=$(boot)
 
-CLEAN_FILES += include/asm-sh/machtypes.h
-
 define archhelp
-       @echo '  zImage                    - Compressed kernel image (arch/sh/boot/zImage)'
+       @echo '* zImage                    - Compressed kernel image'
+       @echo '  vmlinux.srec              - Create an ELF S-record'
+       @echo '  uImage                    - Create a bootable image for U-Boot'
+       @echo '  uImage.srec               - Create an S-record for U-Boot'
 endef
 
+define filechk_gen-syscalltab
+       (set -e; \
+       echo "/*"; \
+       echo " * DO NOT MODIFY."; \
+       echo " *"; \
+       echo " * This file was generated by arch/sh/Makefile"; \
+       echo " * Any changes will be reverted at build time."; \
+       echo " */"; \
+       echo ""; \
+       echo "#ifndef __SYSCALLTAB_H"; \
+       echo "#define __SYSCALLTAB_H"; \
+       echo ""; \
+       echo "#include <linux/kernel.h>"; \
+       echo ""; \
+       echo "struct syscall_info {"; \
+       echo "  const char *name;"; \
+       echo "} syscall_info_table[] = {"; \
+       sed -e '/^.*\.long /!d;s//      { "/;s/\(\([^/]*\)\/\)\{1\}.*/\2/; \
+               s/[ \t]*$$//g;s/$$/" },/;s/\("\)sys_/\1/g'; \
+       echo "};"; \
+       echo ""; \
+       echo "#define NUM_SYSCALL_INFO_ENTRIES ARRAY_SIZE(syscall_info_table)";\
+       echo ""; \
+       echo "#endif /* __SYSCALLTAB_H */" )
+endef
+
+arch/sh/lib64/syscalltab.h: arch/sh/kernel/syscalls_64.S
+       $(call filechk,gen-syscalltab)
+
+CLEAN_FILES += arch/sh/lib64/syscalltab.h \
+              include/asm-sh/machtypes.h