# Makefile fragment for building GCC for the TI MSP430 target.
# Copyright (C) 2012-2021 Free Software Foundation, Inc.
# Contributed by Red Hat.
#
# 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/>.

driver-msp430.o: $(srcdir)/config/msp430/driver-msp430.c \
  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

msp430-devices.o: $(srcdir)/config/msp430/msp430-devices.c \
	$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) -DTARGET_SUBDIR=$(target_subdir) $(INCLUDES) $<

# Enable multilibs:

MULTILIB_OPTIONS    = mcpu=msp430 mlarge  mdata-region=none fno-exceptions
MULTILIB_DIRNAMES   = 430	   large  full-memory-range no-exceptions

# Match -mcpu=430
MULTILIB_MATCHES    = mcpu?msp430=mcpu?430
# These options are equivalent in terms of the multilib required for them
MULTILIB_MATCHES   += mdata-region?none=mdata-region?upper
MULTILIB_MATCHES   += mdata-region?none=mdata-region?either

# The correct multilib for a given mmcu is selected without the need for
# hard-coded data here, because DRIVER_SELF_SPECS will place the correct
# -mcpu option for a given mcu onto the command line.

MULTILIB_REQUIRED =		    mcpu=msp430		       mlarge
MULTILIB_REQUIRED += fno-exceptions mcpu=msp430/fno-exceptions mlarge/fno-exceptions
MULTILIB_REQUIRED += mlarge/mdata-region=none
MULTILIB_REQUIRED += mlarge/mdata-region=none/fno-exceptions


MULTILIB_EXTRA_OPTS =

msp430-c.o: $(srcdir)/config/msp430/msp430-c.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
