# Makefile fragment for building LIBGCC for the TI MSP430 processor.
# Copyright (C) 2011-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/>.

# Note - we have separate versions of the lib2div<mode> files
# as the functions are quite large and we do not want to pull
# in unneeded division routines.

LIB2ADD = \
	$(srcdir)/config/msp430/lib2divQI.c \
	$(srcdir)/config/msp430/lib2divHI.c \
	$(srcdir)/config/msp430/lib2divSI.c \
	$(srcdir)/config/msp430/lib2bitcountHI.c \
	$(srcdir)/config/msp430/lib2mul.c \
	$(srcdir)/config/msp430/lib2shift.c \
	$(srcdir)/config/msp430/epilogue.S \
	$(srcdir)/config/msp430/slli.S \
	$(srcdir)/config/msp430/srai.S \
	$(srcdir)/config/msp430/srli.S \
	$(srcdir)/config/msp430/cmpsi2.S \
	$(srcdir)/config/msp430/floatunhisf.c \
	$(srcdir)/config/msp430/floatunhidf.c \
	$(srcdir)/config/msp430/floathidf.c \
	$(srcdir)/config/msp430/floathisf.c \
	$(srcdir)/config/msp430/cmpd.c

# 32-bit and F5series hardware multiply have their own version of this function.
# To handle the case when there is no hardware multiply or only 16-bit hardware
# multiply, the libgcc version has been copied to lib2mul.c.
LIB2FUNCS_EXCLUDE += _muldi3

HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections -mhwmult=none

crtbegin_no_eh.o: $(srcdir)/crtstuff.c
	$(crt_compile) -U__LIBGCC_EH_FRAME_SECTION_NAME__ -c $< -DCRT_BEGIN

crtend_no_eh.o: $(srcdir)/crtstuff.c
	$(crt_compile) -U__LIBGCC_EH_FRAME_SECTION_NAME__ -c $< -DCRT_END

mpy.o: $(srcdir)/config/msp430/mpy.c
	$(gcc_compile) $< -c

lib2_mul_none.o: $(srcdir)/config/msp430/lib2mul.c
	$(gcc_compile) $< -c -DMUL_NONE

lib2_mul_16bit.o: $(srcdir)/config/msp430/lib2mul.c
	$(gcc_compile) $< -c -DMUL_16

lib2hw_mul_16.o: $(srcdir)/config/msp430/lib2hw_mul.S
	$(gcc_compile) $< -c -DMUL_16

lib2hw_mul_32.o: $(srcdir)/config/msp430/lib2hw_mul.S
	$(gcc_compile) $< -c -DMUL_32

lib2hw_mul_f5.o: $(srcdir)/config/msp430/lib2hw_mul.S
	$(gcc_compile) $< -c -DMUL_F5

libmul_none.a: lib2_mul_none.o mpy.o
	$(AR_CREATE_FOR_TARGET) $@ $(filter %.o,$^)

libmul_16.a: lib2hw_mul_16.o lib2_mul_16bit.o
	$(AR_CREATE_FOR_TARGET) $@ $(filter %.o,$^)

libmul_32.a: lib2hw_mul_32.o
	$(AR_CREATE_FOR_TARGET) $@ $(filter %.o,$^)

libmul_f5.a: lib2hw_mul_f5.o
	$(AR_CREATE_FOR_TARGET) $@ $(filter %.o,$^)

# Local Variables:
# mode: Makefile
# End:
