#  Copyright (C) 2006-2013 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 3 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 GCC; see the file COPYING3.  If not see
#  <http://www.gnu.org/licenses/>.

# Multi-lib support.
MULTILIB_OPTIONS=mea64

spu.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(RTL_H) $(REGS_H) hard-reg-set.h dumpfile.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) $(GGC_H) $(HASHTAB_H) \
  $(TM_P_H) $(TARGET_H) $(TARGET_DEF_H) langhooks.h reload.h $(CFGLOOP_H) \
  $(srcdir)/config/spu/spu-protos.h \
  $(srcdir)/config/spu/spu-builtins.def 

spu-c.o: $(srcdir)/config/spu/spu-c.c \
    $(srcdir)/config/spu/spu-protos.h \
    $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(CPPLIB_H) \
    $(TM_P_H) $(C_COMMON_H) $(C_PRAGMA_H) coretypes.h $(TM_H) insn-codes.h
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
		$(srcdir)/config/spu/spu-c.c
