##############################################################################
#
#                          occama.lib makefile
#
#                       occam2 toolset; 16-Nov-90 SRH
#
#                     This makefile is set up for UNIX.
#
#   We must be careful here since some of the routines are compiled in
# both TB and TA mode; TB can call TA, but not vice versa.
#
##############################################################################


# UNIX specific macros
SWITCH=-
DELETE=rm
RENAME=mv


# for the flexibility to pass something in from the command line 
OCCEXTRAS=

# tools and global options
PREPROCESSOR=preocc
PREOPT=$(SWITCH)d OCCAM
LIBRARIAN=ilibr
LIBOPT=
OCCAM=oc
OCCOPT=$(SWITCH)d $(SWITCH)v $(OCCEXTRAS)


TARGETLIB=occama.lib


# the files in USEUTL all #USE occamutl.lib; they are mentioned here
# for reference
USEUTL=		r64op.tah   r64operr.tah ie64op.tah  \
		r64rem.tah  r64remer.tah ie64rem.tah \
		dargred.tah \
		r64op.tax   r64operr.tax ie64op.tax  \
		r64rem.tax  r64remer.tax ie64rem.tax \
		dargred.tax


# files which must be in TB mode since they are more efficient in this
# mode, rsqrt because it uses ROUNDSN and UNPACKSN, the others because
# the source code is different for TB than for TA ( ASM is used )
TBHMODE=	r32op.tbh    r32operr.tbh r32gterr.tbh r32eqerr.tbh \
		rsqrt.tbh
TBXMODE=	r32op.tbx    r32operr.tbx r32gterr.tbx r32eqerr.tbx \
		rsqrt.tbx

# The following files contain routines which call those in TBHMODE/
# TBXMODE above and so for efficiency are compiled in TB mode
# also.  ( Actually, ABS in rabsfint.occ does not make such a call,
# but it is in the same file as FPINT which does. )
CALLTBMODE=	rscaleb.tbh  rargred.tbh  rmulby2.tbh rdivby2.tbh \
		rabsfint.tbh \
		rscaleb.tbx  rargred.tbx  rmulby2.tbx rdivby2.tbx \
		rabsfint.tbx

#TA integer files
INTTAH= 	i16add.tah   i16plus.tah  i16sub.tah   i16minus.tah \
		i16mul.tah   i16times.tah i16div.tah   i16rem.tah   \
		i16eq.tah    i16gt.tah    i16lshft.tah i16rshft.tah \
		i16band.tah  i16bor.tah   i16xor.tah   i16bnot.tah  \
		i64mul.tah   i64divrm.tah

INTTAX= 	i16add.tax   i16plus.tax  i16sub.tax   i16minus.tax \
		i16mul.tax   i16times.tax i16div.tax   i16rem.tax   \
		i16eq.tax    i16gt.tax    i16lshft.tax i16rshft.tax \
		i16band.tax  i16bor.tax   i16xor.tax   i16bnot.tax  \
		i64mul.tax   i64divrm.tax

#TA graphics files
GRAPHTAH=	draw2d.tah clip2d.tah move2d.tah
GRAPHTAX=	draw2d.tax clip2d.tax move2d.tax

#TA bit manipulation files
BITTAH= 	bitcount.tah crcword.tah crcbyte.tah brevnbit.tah brevword.tah
BITTAX= 	bitcount.tax crcword.tax crcbyte.tax brevnbit.tax brevword.tax

#TA REAL functions
REALTAH=	r32operr.tah r32op.tah    ie32op.tah                \
		r32remer.tah r32rem.tah   ie32rem.tah               \
		r32eqerr.tah r32gterr.tah r32eq.tah    r32gt.tah    \
		r64operr.tah r64op.tah    ie64op.tah                \
		r64remer.tah r64rem.tah   ie64rem.tah               \
		r64eqerr.tah r64gterr.tah r64eq.tah    r64gt.tah    \
		r32toi32.tah i32tor32.tah                           \
		r32toi64.tah i64tor32.tah r64tor32.tah r32tor64.tah \
		r64toi32.tah i32tor64.tah r64toi64.tah i64tor64.tah \
		rcpysign.tah rnxtaftr.tah rsqrt.tah    ie32comp.tah \
		dnotfnte.tah dminusx.tah  dcpysign.tah dnxtaftr.tah \
		dsqrt.tah    ie64comp.tah                           \
		rabsfint.tah ranalyse.tah rscaleb.tah  rfunpack.tah \
		rargred.tah  rmulby2.tah  rdivby2.tah  rlogb.tah    \
		dabsfint.tah danalyse.tah dscaleb.tah  dfunpack.tah \
		dargred.tah  dmulby2.tah  ddivby2.tah  dlogb.tah    \
		unpacksn.tah roundsn.tah

REALTAX=	r32operr.tax r32op.tax    ie32op.tax                \
		r32remer.tax r32rem.tax   ie32rem.tax               \
		r32eqerr.tax r32gterr.tax r32eq.tax    r32gt.tax    \
		r64operr.tax r64op.tax    ie64op.tax                \
		r64remer.tax r64rem.tax   ie64rem.tax               \
		r64eqerr.tax r64gterr.tax r64eq.tax    r64gt.tax    \
		r32toi32.tax i32tor32.tax                           \
		r32toi64.tax i64tor32.tax r64tor32.tax r32tor64.tax \
		r64toi32.tax i32tor64.tax r64toi64.tax i64tor64.tax \
		rcpysign.tax rnxtaftr.tax rsqrt.tax    ie32comp.tax \
		dnotfnte.tax dminusx.tax  dcpysign.tax dnxtaftr.tax \
		dsqrt.tax    ie64comp.tax                           \
		rabsfint.tax ranalyse.tax rscaleb.tax  rfunpack.tax \
		rargred.tax  rmulby2.tax  rdivby2.tax  rlogb.tax    \
		dabsfint.tax danalyse.tax dscaleb.tax  dfunpack.tax \
		dargred.tax  dmulby2.tax  ddivby2.tax  dlogb.tax    \
		unpacksn.tax roundsn.tax

#----------------------------------- Rules ------------------------------------

# Force the whole library to be made
all:		$(TARGETLIB)

$(TARGETLIB): occama.lbb \
	$(INTTAH) $(GRAPHTAH) $(BITTAH) $(REALTAH) \
	$(INTTAX) $(GRAPHTAX) $(BITTAX) $(REALTAX) \
	$(TBHMODE) $(TBXMODE) $(CALLTBMODE)
	$(LIBRARIAN) $(LIBOPT) $(SWITCH)f occama.lbb $(SWITCH)O $(TARGETLIB)

# Pattern matching rules; use for TA but not TB, so we take $(SWITCH)TA
# out of PREOPT and OCCOPT so that these macros remain general.
# Some of the source code for TB modules is obtained by specifying TA
# ( yes TA ) on the preprocessor command line, so it is not safe
# to use TB pattern matching rules.
# An explicit rule is chosen in preference to a pattern matching one.
# $< is a dynamic macro meaning the name of the dependency file;
# $* is a dynamic macro meaning the base name of the current target
%.tah: %.occ
	$(PREPROCESSOR) $< $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $*.pah
	$(OCCAM) $*.pah $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $*.tah
	$(DELETE) $*.pah

%.tax: %.occ
	$(PREPROCESSOR) $< $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $*.pax
	$(OCCAM) $*.pax $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $*.tax
	$(DELETE) $*.pax


#---------------------- files with dependencies ------------------------------
#
# We are booting ourselves up here - we have to create the target library with
# what we know will be required from it by the compiler in order that the
# target file may be compiled.  We delete the target library after each use of
# it so that it is only in existence when we want it to be and ensures that
# nothing goes on behind our backs.
#
# $@ is a dynamic macro which means the current target.
# $(@:.tah=.pah) is a macro which means replace the suffix of the target
# ( .tah ) by the new suffix .pah;  we use this rather than $* because 
# $* is really only meant for use in pattern matching rules or suffix rules,
# and gives strange results in explicit rules.

# now halt mode routines which are related to single precision reals

rabsfint.tah:	r32gterr.tah i32tor32.tah r32toi32.tah rabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r32gterr.tah i32tor32.tah r32toi32.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rargred.tah:	r32operr.tah i32tor32.tah rargred.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tah i32tor32.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rscaleb.tah:	r32operr.tah rscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rmulby2.tah:	r32operr.tah rmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rdivby2.tah:	r32operr.tah rdivby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rlogb.tah:	i32tor32.tah rlogb.occ
	$(LIBRARIAN) $(LIBOPT) i32tor32.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

ie32comp.tah:	r32gt.tah r32eq.tah ranalyse.tah ie32comp.occ
	$(LIBRARIAN) $(LIBOPT) r32gt.tah r32eq.tah ranalyse.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

r32op.tah:	ie32op.tah r32op.occ
	$(LIBRARIAN) $(LIBOPT) ie32op.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

r32operr.tah:	ie32op.tah r32operr.occ
	$(LIBRARIAN) $(LIBOPT) ie32op.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

rsqrt.tah:	unpacksn.tah roundsn.tah rsqrt.occ
	$(LIBRARIAN) $(LIBOPT) unpacksn.tah  roundsn.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

# now universal mode routines which are related to single precision reals

rabsfint.tax:	r32gterr.tax i32tor32.tax r32toi32.tax rabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r32gterr.tax i32tor32.tax r32toi32.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rargred.tax:	r32operr.tax i32tor32.tax rargred.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tax i32tor32.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rscaleb.tax:	r32operr.tax rscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rmulby2.tax:	r32operr.tax rmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rdivby2.tax:	r32operr.tax rdivby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rlogb.tax:	i32tor32.tax rlogb.occ
	$(LIBRARIAN) $(LIBOPT) i32tor32.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

ie32comp.tax:	r32gt.tax r32eq.tax ranalyse.tax ie32comp.occ
	$(LIBRARIAN) $(LIBOPT) r32gt.tax r32eq.tax ranalyse.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

r32op.tax:	ie32op.tax r32op.occ
	$(LIBRARIAN) $(LIBOPT) ie32op.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

r32operr.tax:	ie32op.tax r32operr.occ
	$(LIBRARIAN) $(LIBOPT) ie32op.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

rsqrt.tax:	unpacksn.tax roundsn.tax rsqrt.occ
	$(LIBRARIAN) $(LIBOPT) unpacksn.tax roundsn.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)


# now halt mode routines which are related to double precision reals

dabsfint.tah:	r64gterr.tah i64tor64.tah r64toi64.tah dabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r64gterr.tah i64tor64.tah r64toi64.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

# dargred.tah also depends on occamutl.lib
dargred.tah:	r64operr.tah i32tor64.tah dargred.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tah i32tor64.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

dscaleb.tah:	r64operr.tah dscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

dmulby2.tah:	r64operr.tah dmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

ddivby2.tah:	r64operr.tah ddivby2.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

dlogb.tah:	i32tor64.tah dlogb.occ
	$(LIBRARIAN) $(LIBOPT) i32tor64.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

ie64comp.tah:	r64gt.tah r64eq.tah danalyse.tah ie64comp.occ
	$(LIBRARIAN) $(LIBOPT) r64gt.tah r64eq.tah danalyse.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tah=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tah=.pah)
	$(OCCAM) $(@:.tah=.pah) $(SWITCH)h $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tah=.pah)
	$(DELETE) $(TARGETLIB)

# now universal mode routines which are related to double precision reals

dabsfint.tax:	r64gterr.tax i64tor64.tax r64toi64.tax dabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r64gterr.tax i64tor64.tax r64toi64.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

# dargred.tax also depends on occamutl.lib
dargred.tax:	r64operr.tax i32tor64.tax dargred.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tax i32tor64.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

dscaleb.tax:	r64operr.tax dscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

dmulby2.tax:	r64operr.tax dmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

ddivby2.tax:	r64operr.tax ddivby2.occ
	$(LIBRARIAN) $(LIBOPT) r64operr.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

dlogb.tax:	i32tor64.tax dlogb.occ
	$(LIBRARIAN) $(LIBOPT) i32tor64.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)

ie64comp.tax:	r64gt.tax r64eq.tax danalyse.tax ie64comp.occ
	$(LIBRARIAN) $(LIBOPT) r64gt.tax r64eq.tax danalyse.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tax=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tax=.pax)
	$(OCCAM) $(@:.tax=.pax) $(SWITCH)x $(SWITCH)ta $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tax=.pax)
	$(DELETE) $(TARGETLIB)


# now for the TB stuff

# halt mode

r32op.tbh:	r32op.occ
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)

r32operr.tbh:	r32operr.occ
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)

r32gterr.tbh:	r32gterr.occ
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)

r32eqerr.tbh:	r32eqerr.occ
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)

# note how we use the TA source code for SQRT
rsqrt.tbh:	rsqrt.occ
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)

# universal mode

r32op.tbx:	r32op.occ
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)

r32operr.tbx:	r32operr.occ
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)

r32gterr.tbx:	r32gterr.occ
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)

r32eqerr.tbx:	r32eqerr.occ
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TB $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)

# note how we use the TA source code for SQRT
rsqrt.tbx:	rsqrt.occ
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)


# now for the TB stuff that calls the more primitive ones; note how we define
# TA on the preprocessor command line

# halt mode

rabsfint.tbh:	r32gterr.tbh i32tor32.tah r32toi32.tah rabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r32gterr.tbh i32tor32.tah r32toi32.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)
	$(DELETE) $(TARGETLIB)

rscaleb.tbh:	r32operr.tbh rscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbh $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)
	$(DELETE) $(TARGETLIB)

rargred.tbh:	r32operr.tbh i32tor32.tah rargred.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbh i32tor32.tah $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)
	$(DELETE) $(TARGETLIB)

rmulby2.tbh:	r32operr.tbh rmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbh $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)
	$(DELETE) $(TARGETLIB)

rdivby2.tbh:	r32operr.tbh rdivby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbh $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbh=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d HALT $(SWITCH)o $(@:.tbh=.pbh)
	$(OCCAM) $(@:.tbh=.pbh) $(SWITCH)h $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbh=.pbh)
	$(DELETE) $(TARGETLIB)

# universal mode

rabsfint.tbx:	r32gterr.tbx i32tor32.tax r32toi32.tax rabsfint.occ
	$(LIBRARIAN) $(LIBOPT) r32gterr.tbx i32tor32.tax r32toi32.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)
	$(DELETE) $(TARGETLIB)

rscaleb.tbx:	r32operr.tbx rscaleb.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbx $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)
	$(DELETE) $(TARGETLIB)

rargred.tbx:	r32operr.tbx i32tor32.tax rargred.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbx i32tor32.tax $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)
	$(DELETE) $(TARGETLIB)

rmulby2.tbx:	r32operr.tbx rmulby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbx $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)
	$(DELETE) $(TARGETLIB)

rdivby2.tbx:	r32operr.tbx rdivby2.occ
	$(LIBRARIAN) $(LIBOPT) r32operr.tbx $(SWITCH)o $(TARGETLIB)
	$(PREPROCESSOR) $(@:.tbx=.occ) $(PREOPT) $(SWITCH)d TA $(SWITCH)d UNISTOP $(SWITCH)o $(@:.tbx=.pbx)
	$(OCCAM) $(@:.tbx=.pbx) $(SWITCH)x $(SWITCH)tb $(OCCOPT) $(SWITCH)o $@
	$(DELETE) $(@:.tbx=.pbx)
	$(DELETE) $(TARGETLIB)
