# Double precision Cephes library
# Makefile for unix or GCC
# IMPORTANT: select desired assmbly language utilities for your machine type.

CC = gcc
#CC = /a/gnu/linux/gcc/xgcc -B/a/gnu/linux/gcc/ -I/a/gnu/linux/gcc/include
#CFLAGS = -g -O2 -Wall -fno-builtin # -ffloat-store
CFLAGS = -g -O2 -Wall -fno-builtin
AR = ar
RANLIB = ranlib
INCS = mconf.h
AS = as

OBJS = acosh.o airy.o asin.o asinh.o atan.o atanh.o bdtr.o beta.o \
btdtr.o cbrt.o chbevl.o chdtr.o clog.o cmplx.o const.o \
cosh.o dawsn.o drand.o ei.o ellie.o ellik.o ellpe.o ellpj.o ellpk.o \
exp.o exp10.o exp2.o expn.o expx2.o fabs.o fac.o fdtr.o \
fresnl.o gamma.o gdtr.o hyp2f1.o hyperg.o i0.o i1.o igami.o incbet.o \
incbi.o igam.o isnan.o iv.o j0.o j1.o jn.o jv.o k0.o k1.o kn.o kolmogorov.o \
log.o log2.o log10.o lrand.o nbdtr.o ndtr.o ndtri.o pdtr.o planck.o \
polevl.o polmisc.o polylog.o polyn.o pow.o powi.o psi.o rgamma.o round.o \
shichi.o sici.o sin.o sindg.o sinh.o spence.o stdtr.o struve.o \
tan.o tandg.o tanh.o unity.o yn.o zeta.o zetac.o \
sqrt.o floor.o setprec.o mtherr.o

all: libmd.a mtst dtestvec monot dcalc paranoia # stamp-timing

stamp-timing: libmd.a mtst time-it
	time-it "mtst > /dev/null"
	touch stamp-timing

time-it: time-it.o
	$(CC) -o time-it time-it.o

time-it.o: time-it.c
	$(CC) -O2 -c time-it.c

dcalc: dcalc.o libmd.a
	$(CC) -o dcalc dcalc.o libmd.a
#	aout2exe mtst

mtst: mtst.o libmd.a
	$(CC) -v -o mtst mtst.o libmd.a
#	gcc -Wl,-verbose -b i486-linuxaout -v -o mtst mtst.o libmd.a
#	coff2exe mtst

mtst.o: mtst.c
	$(CC) -O2 -Wall -c mtst.c

dtestvec: dtestvec.o libmd.a
	$(CC) -o dtestvec dtestvec.o libmd.a

dtestvec.o: dtestvec.c
	$(CC) -g -c dtestvec.c

monot: monot.o libmd.a
	$(CC) -o monot monot.o libmd.a

monot.o: monot.c
	$(CC) -g -c monot.c

paranoia: paranoia.o setprec.o libmd.a
	$(CC) -o paranoia paranoia.o setprec.o libmd.a

paranoia.o: paranoia.c
	$(CC) -Wno-implicit -c paranoia.c

libmd.a: $(OBJS) $(INCS)
# for real Unix:
	$(AR) rv libmd.a $(OBJS)
# for djgcc MSDOS:
#	>libmd.rf -rv libmd.a $(OBJS)
#	$(AR) @libmd.rf
	$(RANLIB) libmd.a

# Assembly language utilities.
# If the following are all commented out, the C versions
# will be used by default.

# IBM PC:
#sqrt.o: sqrt.387
#	$(AS) -o sqrt.o sqrt.387
#
#floor.o: floor.387
#	$(AS) -o floor.o floor.387
#
#setprec.o: setprec.387
#	$(AS) -o setprec.o setprec.387

# ELF versions for linux (no underscores)

#sqrt.o: sqrtelf.387
#	$(AS) -o sqrt.o sqrtelf.387

#floor.o: floorelf.387
#	$(AS) -o floor.o floorelf.387

#setprec.o: setprelf.387
#	$(AS) -o setprec.o setprelf.387

sqrt.o: sqrtelf.amd64
	$(AS) -o sqrt.o sqrtelf.amd64

setprec.o: setprelf.amd64
	$(AS) -o setprec.o setprelf.amd64

# Motorola 68881. Caution, subroutine return conventions vary.
#sqrt.o: sqrt.688
#	$(AS) -o sqrt.o sqrt.688
#
#setprec.o: setprec.688
#	$(AS) -o setprec.o setprec.688

# SPARC:
#sqrt.o: sqrt.spa
#	$(AS) -o sqrt.o sqrt.spa

clean:
	rm -f *.o
	rm -f mtst
	rm -f paranoia
	rm -f dcalc
	rm -f dtestvec
	rm -f monot
	rm -f libmd.a
	rm -f time-it
	rm -f dtestvec

