# This file is part of the 80386 alternative math library and is covered by
# the GNU General Public Licence

GCC=gcc
CC=cc
CFLAGS=-O -fstrength-reduce -DIEEE
LIBDIR=/usr/lib
INCDIR=/usr/include

# Where your supplied Mach library is.
MACHLIB=/usr/lib/libm.a

# if you want to use setinternal in paranoia; define PTEST
#PTEST=
PTEST=-DTEST
VERS=2.0

.s.o:
	$(GCC) -c $<

.c.o:
	$(GCC) $(CFLAGS) -c $<

all: libfpu libffpu libcfpu test ftest

#
#  We copy these .o's from Mt Xinu's libm.a
#  I'm not sure how useful they are, but X11R5 needs cbrt.o
#  The rest can't hurt, so I hang on to them.
#  -SH 3/7/92
#
MACH_KEEP=asincos.o cabs.o cbrt.o exp__E.o jn.o log__L.o trig.o
asincos.o: $(MACHLIB)
	ar x $(MACHLIB) asincos.o
cabs.o: $(MACHLIB)
	ar x $(MACHLIB) cabs.o
cbrt.o: $(MACHLIB)
	ar x $(MACHLIB) cbrt.o
exp__E.o: $(MACHLIB)
	ar x $(MACHLIB) exp__E.o
jn.o: $(MACHLIB)
	ar x $(MACHLIB) jn.o
log__L.o: $(MACHLIB)
	ar x $(MACHLIB) log__L.o
trig.o: $(MACHLIB)
	ar x $(MACHLIB) trig.o

CSRC=j0.c lgamma.c gamma.c j1.c erf.c nextafter.c

CFSRC=j0f.c lgammaf.c gammaf.c j1f.c erff.c nextafterf.c

SSRC=acos.s copysign.s drem.s fabs.s hypot.s logb.s scalb.s tan.s \
    asin.s ceil.s exp.s expm1.s finite.s log.s log1p.s \
    pow.s sin.s atan.s cos.s exp10.s floor.s log10.s rint.s sqrt.s \
    exp2.s log2.s sinh.s cosh.s tanh.s \
    asinh.s acosh.s atanh.s atan2.s fmod.s ieee_ext.s \
    infinity.s sqrtp.s ieee_values.s

SFSRC=acosf.s copysignf.s fabsf.s log10f.s sinf.s acoshf.s cosf.s \
	finitef.s log1pf.s sinhf.s asinf.s coshf.s floorf.s log2f.s \
	sqrtf.s asinhf.s dremf.s fmodf.s logbf.s sqrtpf.s atan2f.s \
	exp10f.s hypotf.s logf.s tanf.s atanf.s exp2f.s ieee_extf.s \
	powf.s tanhf.s atanhf.s expf.s ieee_valuesf.s rintf.s ceilf.s \
	expm1f.s infinityf.s scalbf.s

COMMONSRC=ieee_retro.c _getsw.s setcont.s setinternal.s

ADD=CHANGELOG COPYING COPYRIGHT Makefile PROBLEMS README TODO d2dcomb.summ

ALLSRC=$(CSRC) $(CFSRC) $(SSRC) $(SFSRC) $(COMMONSRC) $(TESTSRC) $(ADD)

LIBOBJ=acos.o atanh.o erf.o hypot.o log10.o sin.o \
       acosh.o ceil.o exp.o j0.o logb.o sinh.o \
       asin.o copysign.o exp10.o expm1.o j1.o sqrt.o \
       asinh.o cos.o fabs.o pow.o tan.o \
       atan.o cosh.o finite.o lgamma.o rint.o tanh.o \
       atan2.o drem.o floor.o log.o scalb.o log1p.o gamma.o \
       exp2.o log2.o fmod.o ieee_ext.o \
       infinity.o sqrtp.o ieee_values.o nextafter.o $(MACH_KEEP)

LIBFOBJ=acosf.o atanhf.o erff.o hypotf.o log10f.o sinf.o \
       acoshf.o ceilf.o expf.o j0f.o logbf.o sinhf.o \
       asinf.o copysignf.o exp10f.o expm1f.o j1f.o sqrtf.o \
       asinhf.o cosf.o fabsf.o powf.o tanf.o \
       atanf.o coshf.o finitef.o lgammaf.o rintf.o tanhf.o \
       atan2f.o dremf.o floorf.o logf.o scalbf.o log1pf.o gammaf.o \
       exp2f.o log2f.o fmodf.o ieee_extf.o \
       infinityf.o sqrtpf.o ieee_valuesf.o nextafterf.o 

COMMONOBJ=ieee_retro.o _getsw.o setcont.o setinternal.o

TESTSRC=paranoia.c

libfpu: $(LIBOBJ) $(COMMONOBJ)
	ar vr libfpu.a $(LIBOBJ) $(COMMONOBJ)
	ranlib libfpu.a

libffpu: $(LIBFOBJ) $(COMMONOBJ)
	ar vr libffpu.a $(LIBFOBJ) $(COMMONOBJ)
	ranlib libffpu.a

libcfpu: $(LIBOBJ) $(LIBFOBJ) $(COMMONOBJ)
	ar vr libcfpu.a $(LIBOBJ) $(LIBFOBJ) $(COMMONOBJ)
	ranlib libcfpu.a

test: libfpu $(TESTOBJ)
	$(GCC) -o paranoia $(TESTSRC) -DTEST libfpu.a

ftest: libffpu $(TESTOBJ)
	$(GCC) -o fparanoia -DTEST -DSingle $(TESTSRC) libffpu.a

paranoia: test ftest

install: libfpu libffpu libcfpu
	-cp libfpu.a $(LIBDIR)/libfpu.a
	-chown bin $(LIBDIR)/libfpu.a
	-chgrp bin $(LIBDIR)/libfpu.a
	-chmod 444 $(LIBDIR)/libfpu.a
	-cp libffpu.a $(LIBDIR)/libffpu.a
	-chown bin $(LIBDIR)/libffpu.a
	-chgrp bin $(LIBDIR)/libffpu.a
	-chmod 444 $(LIBDIR)/libffpu.a
	-cp libcfpu.a $(LIBDIR)/libcfpu.a
	-chown bin $(LIBDIR)/libcfpu.a
	-chgrp bin $(LIBDIR)/libcfpu.a
	-chmod 444 $(LIBDIR)/libcfpu.a
	-cp fpumath.h $(INCDIR)/fpumath.h

clean:
	rm -f $(LIBOBJ) $(LIBFOBJ) $(COMMONOBJ) $(TESTOBJ) core a.out

clobber:
	rm -f $(LIBOBJ) $(LIBFOBJ) $(COMMONOBJ) $(TESTOBJ) libfpu.a \
	libffpu.a libcfpu.a paranoia fparanoia core a.out mathlib.0[1-6]

shar:
	shar -c -L 55 -a -n mathlib$(VERS) -o mathlib $(ALLSRC) fpumath.h

# Dependencies generated using gcc -MM *.c
erf.o : erf.c 
gamma.o : gamma.c 
j0.o : j0.c
j1.o : j1.c
lgamma.o : lgamma.c
	$(CC) -O -c lgamma.c
ieee_retro.o : ieee_retro.c
nextafter.o : nextafter.c fpumath.h
erff.o : erff.c fpumath.h
gammaf.o : gammaf.c  fpumath.h
j0f.o : j0f.c fpumath.h
j1f.o : j1f.c fpumath.h
nextafterf.o : nextafterf.c fpumath.h
lgammaf.o : lgammaf.c fpumath.h
paranoia.o : paranoia.c 
