#
# 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) 2000, 2001  Paolo Alberelli
# Copyright (C) 2003, 2004  Paul Mundt
#
# 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
#

cpu-y				:= -mb
cpu-$(CONFIG_LITTLE_ENDIAN)	:= -ml

cpu-$(CONFIG_CPU_SH5)		+= -m5-32media-nofpu

ifdef CONFIG_LITTLE_ENDIAN
LDFLAGS_vmlinux		+= --defsym 'jiffies=jiffies_64'
LDFLAGS			+= -EL  -mshlelf32_linux
else
LDFLAGS_vmlinux		+= --defsym 'jiffies=jiffies_64+4'
LDFLAGS			+= -EB  -mshelf32_linux
endif

# No requirements for endianess support from AFLAGS, 'as' always run through gcc
CFLAGS		+= $(cpu-y)

LDFLAGS_vmlinux	+= --defsym phys_stext=_stext-$(CONFIG_CACHED_MEMORY_OFFSET) \
		  --defsym phys_stext_shmedia=phys_stext+1 \
		  -e phys_stext_shmedia

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

#
# arch/sh64/defconfig never had any hope of being
# frequently updated, so use one that does
#
KBUILD_DEFCONFIG	:= cayman_defconfig

ifdef LOADADDR
LINKFLAGS     += -Ttext $(word 1,$(LOADADDR))
endif

machine-$(CONFIG_SH_CAYMAN)	:= cayman
machine-$(CONFIG_SH_SIMULATOR)	:= sim
machine-$(CONFIG_SH_HARP)	:= harp
machine-$(CONFIG_SH_ROMRAM)	:= romram

head-y := arch/$(ARCH)/kernel/head.o arch/$(ARCH)/kernel/init_task.o

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

ifneq ($(machine-y),)
core-y	+= arch/sh64/mach-$(machine-y)/
endif

LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
libs-y	+= arch/$(ARCH)/lib/ $(LIBGCC)

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

boot := arch/$(ARCH)/boot

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

compressed: zImage

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

archprepare: arch/$(ARCH)/lib/syscalltab.h

define filechk_gen-syscalltab
       (set -e; \
	echo "/*"; \
	echo " * DO NOT MODIFY."; \
	echo " *"; \
	echo " * This file was generated by arch/$(ARCH)/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/$(ARCH)/lib/syscalltab.h: arch/sh64/kernel/syscalls.S
	$(call filechk,gen-syscalltab)

CLEAN_FILES += arch/$(ARCH)/lib/syscalltab.h

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

