# Name of assembly file containing libgcc1 functions.
# This entry must be present, but it can be empty if the target does
# not need any assembler functions to support its code generation.
#
# Alternatively if assembler functions *are* needed then define the
# entries below:
CROSS_LIBGCC1	= libgcc1-asm.a
LIB1ASMSRC	= frv/lib1funcs.asm
LIB1ASMFUNCS	= _cmpll _cmpf _cmpd _addll _subll _andll _orll _xorll _notll _cmov
LIB2FUNCS_EXTRA	= cmovh.c cmovw.c cmovd.c modi.c umodi.c uitof.c uitod.c ulltof.c ulltod.c

# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c

# If any special flags are necessary when building libgcc2 put them here.
TARGET_LIBGCC2_CFLAGS =

fp-bit.c: $(srcdir)/config/fp-bit.c
	echo '#define FLOAT' > fp-bit.c
	echo '#include "config/frv/frv-abi.h"' >> fp-bit.c
	cat $(srcdir)/config/fp-bit.c >> fp-bit.c

dp-bit.c: $(srcdir)/config/fp-bit.c
	echo '#include "config/frv/frv-abi.h"' > dp-bit.c
	cat $(srcdir)/config/fp-bit.c >> dp-bit.c

cmovh.c: $(srcdir)/config/frv/cmovh.c
	$(LN_S) $(srcdir)/config/frv/cmovh.c .

cmovw.c: $(srcdir)/config/frv/cmovw.c
	$(LN_S) $(srcdir)/config/frv/cmovw.c .

cmovd.c: $(srcdir)/config/frv/cmovd.c
	$(LN_S) $(srcdir)/config/frv/cmovd.c .

modi.c: $(srcdir)/config/frv/modi.c
	$(LN_S) $(srcdir)/config/frv/modi.c .

umodi.c: $(srcdir)/config/frv/umodi.c
	$(LN_S) $(srcdir)/config/frv/umodi.c .

uitof.c: $(srcdir)/config/frv/uitof.c
	$(LN_S) $(srcdir)/config/frv/uitof.c .

uitod.c: $(srcdir)/config/frv/uitod.c
	$(LN_S) $(srcdir)/config/frv/uitod.c .

ulltof.c: $(srcdir)/config/frv/ulltof.c
	$(LN_S) $(srcdir)/config/frv/ulltof.c .

ulltod.c: $(srcdir)/config/frv/ulltod.c
	$(LN_S) $(srcdir)/config/frv/ulltod.c .

# Build frvbegin.o and frvend.o
EXTRA_MULTILIB_PARTS=frvbegin.o frvend.o

# Compile two additional files that are linked with every program
# linked using GCC on systems using COFF or ELF, for the sake of C++
# constructors.

FRVSTUFF_CFLAGS = $(TARGET_LIBGCC2_CFLAGS)

$(T)frvbegin$(objext): $(srcdir)/config/frv/frvbegin.c $(GCC_PASSES) \
  $(CONFIG_H) defaults.h unwind-dw2-fde.h gbl-ctors.h
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) $(FRVSTUFF_CFLAGS) \
	  -c $(srcdir)/config/frv/frvbegin.c -o $(T)frvbegin$(objext)

$(T)frvend$(objext): $(srcdir)/config/frv/frvend.c $(GCC_PASSES) \
  $(CONFIG_H) defaults.h unwind-dw2-fde.h gbl-ctors.h
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) $(FRVSTUFF_CFLAGS) \
	  -c $(srcdir)/config/frv/frvend.c -o $(T)frvend$(objext)

# Enable the following if multilibs are needed.
# See gcc/genmultilib, gcc/gcc.texi and gcc/tm.texi for a
# description of the options and their values.
#
#MULTILIB_OPTIONS	= mcpu=fr500/mcpu=tomcat/mcpu=simple/mcpu=frv msoft-float mdword/mno-dword
#MULTILIB_DIRNAMES	= fr500 tomcat simple frv nof dw no-dw
#MULTILIB_MATCHES	= mcpu?simple=mcpu?fr300 mno-double=mcpu?fr500 mcpu?frv=mdouble
#MULTILIB_EXCEPTIONS	= *mcpu=simple/*msoft-float* *mcpu=frv/*msoft-float*
#MULTILIB_EXTRA_OPTS	= mlibrary-pic

MULTILIB_OPTIONS	= mcpu=fr400/mcpu=fr550 mno-pack mlibrary-pic/mfdpic
MULTILIB_DIRNAMES	= fr400 fr550 unpacked pic fdpic
MULTILIB_MATCHES	= mcpu?simple=mcpu?fr300 \
			  mlibrary-pic=multilib-library-pic \
			  mcpu?fr400=mcpu?fr405 mcpu?fr400=mcpu?fr450
MULTILIB_EXCEPTIONS	= mcpu=frv/mno-pack* mcpu=simple/mno-pack*

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

EXTRA_HEADERS = $(srcdir)/config/frv/frv-asm.h
