#  Copyright (C) 2006 Free Software Foundation, Inc.
#
#  This file is free software; you can redistribute it and/or modify it under
#  the terms of the GNU General Public License as published by the Free
#  Software Foundation; either version 2 of the License, or (at your option) 
#  any later version.
#
#  This file is distributed in the hope that it will be useful, but WITHOUT
#  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#  for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this file; see the file COPYING.  If not, write to the Free
#  Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#  02110-1301, USA.


# Suppress building libgcc1.a
LIBGCC1 =
CROSS_LIBGCC1 =

# On SPU __word__ is TImode which is too inefficient and incomplete for
# implementing libgcc routines.
TARGET_LIBGCC2_CFLAGS = -fPIC -D__word__=SI -mwarn-reloc

LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/spu/float_unssidf.c \
			 $(srcdir)/config/spu/float_unsdidf.c

LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
   $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c

# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c

dp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/spu/t-spu-elf
	echo '#undef US_SOFTWARE_GOFAST' > dp-bit.c
	cat $(srcdir)/config/fp-bit.c >> dp-bit.c

fp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/spu/t-spu-elf
	echo '#define FLOAT' > fp-bit.c
	echo '#undef US_SOFTWARE_GOFAST' >> fp-bit.c
	cat $(srcdir)/config/fp-bit.c >> fp-bit.c

# Don't let CTOR_LIST end up in sdata section.
CRTSTUFF_T_CFLAGS =

#MULTILIB_OPTIONS=mlarge-mem/mtest-abi
#MULTILIB_DIRNAMES=large-mem test-abi
#MULTILIB_MATCHES=

# Neither gcc or newlib seem to have a standard way to generate multiple
# crt*.o files.  So we don't use the standard crt0.o name anymore.

EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

spu.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(RTL_H) $(REGS_H) hard-reg-set.h \
  real.h insn-config.h conditions.h insn-attr.h flags.h $(RECOG_H) \
  $(OBSTACK_H) $(TREE_H) $(EXPR_H) $(OPTABS_H) except.h function.h \
  output.h $(BASIC_BLOCK_H) $(INTEGRATE_H) toplev.h $(GGC_H) $(HASHTAB_H) \
  $(TM_P_H) $(TARGET_H) $(TARGET_DEF_H) langhooks.h reload.h cfglayout.h \
  $(srcdir)/config/spu/spu-protos.h \
  $(srcdir)/config/spu/spu-builtins.h \
  $(srcdir)/config/spu/spu-builtins.def 

spu-c.o: $(srcdir)/config/spu/spu-c.c \
    $(srcdir)/config/spu/spu-protos.h \
    $(srcdir)/config/spu/spu-builtins.h \
    $(srcdir)/config/spu/spu-builtins.def \
    $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(CPPLIB_H) \
    $(TM_P_H) c-pragma.h errors.h coretypes.h $(TM_H) insn-codes.h
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/spu/spu-c.c

