# Makefile fragment for building LIBGCC for the Renesas RX target.
# Copyright (C) 2008-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/>.


# Add functions required by the RX ABI which are not part of
# the normal libgcc sources:

LIB2ADD = $(srcdir)/config/rx/rx-abi-functions.c


# We need special handling of the floating point conversion
# routines, to allow for the varying size of a double:

FPBIT = true
ifeq ($(double_type_size),64)
DPBIT = true
endif
