LIB1ASMSRC = arm/lib1funcs.asm
LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
	_call_via_rX _interwork_call_via_rX \
	_lshrdi3 _ashrdi3 _ashldi3 \
	_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
	_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
	_fixsfsi _fixunssfsi _floatdidf _floatdisf

# 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

fp-bit.c: $(srcdir)/config/fp-bit.c
	echo '#ifdef __SOFTFP__' > fp-bit.c
	echo '#define FLOAT' >> fp-bit.c
	echo '#ifndef __ARMEB__' >> fp-bit.c
	echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
	echo '#endif' >> fp-bit.c
	cat $(srcdir)/config/fp-bit.c >> fp-bit.c
	echo '#endif' >> fp-bit.c

dp-bit.c: $(srcdir)/config/fp-bit.c
	echo '#ifdef __SOFTFP__' > dp-bit.c
	echo '#ifndef __ARMEB__' >> dp-bit.c
	echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
	echo '#define FLOAT_WORD_ORDER_MISMATCH' >> dp-bit.c
	echo '#endif' >> dp-bit.c
	cat $(srcdir)/config/fp-bit.c >> dp-bit.c
	echo '#endif' >> dp-bit.c

# The following multilib configurations are defined:
#   . : unixlib, soft-float, application
#   ./scl/fpu : scl, hard-float, application
#   ./scl/fpu/module : scl, hard-float, module
MULTILIB_OPTIONS = mlibscl mhard-float mmodule
MULTILIB_DIRNAMES = scl fpu module
MULTILIB_MATCHES = mhard-float=mfloat-abi?hard
MULTILIB_EXCLUSIONS = mlibscl/!mhard-float/!mmodule !mlibscl/mhard-float/!mmodule !mlibscl/!mhard-float/mmodule !mlibscl/mhard-float/mmodule mlibscl/!mhard-float/mmodule

EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crtbeginS.o crtendS.o crti.o crtn.o

# Compile crtbeginS.o and crtendS.o with pic (but not module versions
# as that causes a compile error).
ifeq (,$(findstring mmodule,$(CRTSTUFF_CFLAGS)))
CRTSTUFF_T_CFLAGS_S = -fPIC
endif

# Prevents fixincludes from clobbering our otherwise correct limits.h
# and therefore allows GCC to build successfully.
LIMITS_H_TEST = true

# Do not install GCC's limits.h
INSTALL_LIMITS_H = false

# If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here
# EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

# Do not run fixproto or fixinc
STMP_FIXINC=
STMP_FIXPROTO=

# Make local_includedir relative to EXEC_PREFIX.  We don't want the RISC OS
# compiler picking up UNIX system header files.
local_includedir=$(exec_prefix)/include

# When compiling GCC for native RISC OS, assume that C library headers are
# contained within the application.
NATIVE_SYSTEM_HEADER_DIR = $(srcdir)/../libunixlib/include
STANDARD_INCLUDE_DIR = $(srcdir)/../libunixlib/include

TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc

# Build a shared libgcc library.
SHLIB_EXT = .so
SHLIB_NAME = @shlib_base_name@.so
SHLIB_SONAME = @shlib_base_name@.so.1
SHLIB_OBJS = @shlib_objs@

SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -fPIC -shared -nodefaultlibs \
	-Wl,-soname,$(SHLIB_SONAME) \
	-o @multilib_dir@/$(SHLIB_NAME).tmp @multilib_flags@ $(SHLIB_OBJS) && \
	rm -f @multilib_dir@/$(SHLIB_SONAME) && \
	if [ -f @multilib_dir@/$(SHLIB_NAME) ]; then \
	  mv -f @multilib_dir@/$(SHLIB_NAME) @multilib_dir@/$(SHLIB_NAME).backup; \
	else true; fi && \
	mv @multilib_dir@/$(SHLIB_NAME).tmp @multilib_dir@/$(SHLIB_NAME) && \
	$(LN_S) $(SHLIB_NAME) @multilib_dir@/$(SHLIB_SONAME)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk.  We want this delayed until actual install time.
SHLIB_INSTALL = \
	$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)/@multilib_dir@; \
	$(INSTALL_DATA) @multilib_dir@/$(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/@multilib_dir@/$(SHLIB_SONAME); \
	rm -f $$(DESTDIR)$$(slibdir)/@multilib_dir@/$(SHLIB_NAME); \
	$(LN_S) $(SHLIB_SONAME) $$(DESTDIR)$$(slibdir)/@multilib_dir@/$(SHLIB_NAME)

# Assemble startup files.
$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
	-c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm

$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
	-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm

riscos.o: $(srcdir)/config/arm/riscos.c $(CONFIG_H)
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/arm/riscos.c

riscos-gcc.o: $(srcdir)/config/arm/riscos-gcc.c $(CONFIG_H)
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/arm/riscos-gcc.c
