# Makefile fragment for building GCC for the TI PRU target.
# Copyright (C) 2012-2021 Free Software Foundation, Inc.
# Contributed by Dimitar Dimitrov <dimitar.dinux.eu>
# Based on the t-nios2
#
# This file is part of GCC.
#
# GCC 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, or (at your
# option) any later version.
#
# GCC 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/>.

# Unfortunately mabi=ti is not feature-complete enough to build newlib.
# Hence we cannot present mabi=gnu/ti as a multilib option.

pru-pragma.o: $(srcdir)/config/pru/pru-pragma.c $(RTL_H) $(TREE_H) \
		$(CONFIG_H) $(TM_H) $(srcdir)/config/pru/pru-protos.h
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

pru-passes.o: $(srcdir)/config/pru/pru-passes.c $(RTL_H) $(TREE_H) \
		$(CONFIG_H) $(TM_H) $(srcdir)/config/pru/pru-protos.h
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
