home *** CD-ROM | disk | FTP | other *** search
- From: bothner@sevenlayer.cs.wisc.edu (Per Bothner)
- Newsgroups: alt.sources,sci.math.symbolic
- Subject: Improved Makefile for PRL Bignum package
- Message-ID: <11438@spool.cs.wisc.edu>
- Date: 10 Oct 90 23:40:45 GMT
-
- This message contains a replement Makefile for the PRL bignum package.
- It also contains the file cpp-Makefile.
-
- The Bignum package is from DEC's Paris Reserach Lab.
- You can receive it by sending a request to librarian@decprl.dec.com.
- It implements infinite-precision integer arithmetic.
- It contains portable C versions of the primitives, as well
- as tuned assembly language versions for selected machines.
-
- The main advantage of my replacement Makefile is that it automatically
- selects the correct version of the primitives. It does this by
- having /lib/cpp process cpp-Makefile, and select the correct version
- depending on pre-defined cpp macros.
-
- My Makefile also cleans up various other problems:
- * It doesn't recompile unless something is out of date.
- * Generally cleaner logic and fewer circular dependencies.
- * There is a 'clean' entry.
- * The default target is 'BigNum.a', not 'all'. (The latter compiles
- a number of test programs that are not used by BigNum *clients*.)
-
- This Makefile has been tested on both Sony-News and DECstation 3100.
- The Bnn part of the library has been used to implement a generic
- (Lisp-like) arithmetic system written in C++. The latter (which I
- may make available soon) has in turn been used as part of the
- run-time system of two different experimental programming languages.
-
- There are certainly some bugs/problems remaining, and I would
- appreciate hearing about them.
-
- ==== Makefile ====
- MAKE=make
- LIB = BigNum.a
- CC = cc
- CPP=/lib/cpp -P
- TMPMAKE=tmp-Makefile
-
- BigNum.a: $(TMPMAKE)
- $(MAKE) -f $(TMPMAKE) $@
-
- $(TMPMAKE): cpp-Makefile
- $(CPP) cpp-Makefile >$(TMPMAKE)
- clean:
- -rm -f ,* .,* *~ #*# .emacs_[0-9]* *.BAK *.CKP core a.out
- -rm -f */,* */.,* */*~ */#*# */.emacs_[0-9]* */*.BAK */*.CKP
- -rm -f o/*.o $(LIB) $(TMPMAKE)
- .DEFAULT: $(TMPMAKE)
- $(MAKE) -f $(TMPMAKE) $@
- ==== cpp-Makefile ====
- /* Added automatic version selection Mon Oct 1 1990 bothner@cs.wisc.edu */
- /*
- * Copyright Digital Equipment Corporation & INRIA 1988, 1989
- * Last modified_on Tue Sep 25 14:52:15 GMT+2:00 1990 by herve
- * modified_on Tue Apr 10 20:34:44 GMT+2:00 1990 by shand
- * modified_on Thu Nov 2 14:23:14 GMT+1:00 1989 by gangnet
- * modified_on Wed Jul 5 10:23:54 GMT+2:00 1989 by bertin
- */
-
- #ifdef __GNUC__
- CC = gcc
- #else
- CC = cc
- #endif
- LIB = BigNum.a
- KERNH = h/BigNum.h
- CFLAGS = -c `cat .Version` -I./h -O #-g -pg
- LKFLAGS = -O #-g
-
- SENDMAIL=/usr/lib/sendmail
- SENDMAILFLAGS=
-
- /* Use predefined pre-processor macros to select a version. */
- /* More machines should be added here. */
-
- #if !defined(VERSION) && defined(vax)
- #define VERSION vax
- #endif
-
- #if !defined(VERSION) && (defined(sun2) || defined(sun3))
- #define VERSION 68K
- #endif
-
- #if !defined(VERSION) && (defined(MIPSEL) || defined(MIPSEB))
- #define VERSION mips
- #define MULT /* BnnMultiply is in KerN */
- #endif
-
- #if !defined(VERSION) && defined(pyr)
- #define VERSION pyramid
- #endif
-
- #if !defined(VERSION) && defined(NeXT)
- #define VERSION 68K
- #endif
-
- #if !defined(VERSION) && defined(sony)
- /*#define VERSION 68K_mot -- Doesn't seen to work; /bin/as complains. */
- #define VERSION 68K /* Use gnu assembler */
- #ifndef AS
- #define AS gas
- #endif
- #endif
-
- #if !defined(VERSION) && defined(ns32000)
- #define VERSION ns
- #endif
-
- /* Select a default version. */
- #if !defined(VERSION)
- #define VERSION C32
- #endif
-
- #ifndef AS
- #define AS as
- #endif
-
- #ifndef MULT
- #define MULT o/bnMult.o
- #endif
-
- OBJECT = o/KerN.o o/bnInit.o MULT o/bnDivide.o o/bnCmp.o o/bzf.o o/bz.o
-
- /* extra entries:
- * all - make all the stuff
- * tidy - cleanup directories
- * scratch - start from scratch
- */
-
- /* build the BigNum library */
- $(LIB): $(OBJECT)
- -rm -f $(LIB)
- ar cr $(LIB) $(OBJECT)
- ranlib $(LIB)
-
- default:
- @echo "Usage: make <version>"
- @echo "see README for valid versions."
- @sh -c 'exit 1'
-
- all: testKerN bztest
- echo All is done !
-
- tidy:
- -rm -f ,* .,* *~ #*# .emacs_[0-9]* *.BAK *.CKP core a.out
- -rm -f */,* */.,* */*~ */#*# */.emacs_[0-9]* */*.BAK */*.CKP
-
- scratch:tidy
- cd o; rm -f *.o
-
- o/KerN.o: VERSION
-
- o/bn.o: c/bn.c
- $(CC) -c $(CFLAGS) $(DFLAG) c/bn.c
- mv bn.o o
-
- C16: c/KerN.c
- echo "-DDIGITon16BITS" >.Version
- $(CC) $(CFLAGS) c/KerN.c
- mv KerN.o o
-
- C32: c/KerN.c
- echo "-DDIGITon32BITS" >.Version
- $(CC) $(CFLAGS) c/KerN.c
- mv KerN.o o
-
- 68K: s/68KerN.s
- echo "-DDIGITon32BITS" >.Version
- AS s/68KerN.s -o o/KerN.o
-
- 68K_mot: s/68KerN_mot.s
- echo "-DDIGITon32BITS" >.Version
- AS s/68KerN_mot.s -o o/KerN.o
-
- vax: s/vaxKerN.s
- echo "-DDIGITon32BITS" >.Version
- AS s/vaxKerN.s -o o/KerN.o
-
- ns: s/nsKerN.s
- echo "-DDIGITon32BITS" >.Version
- AS s/nsKerN.s -o o/KerN.o
-
- mips: s/mipsKerN.s
- echo "-DDIGITon32BITS" >.Version
- AS -w s/mipsKerN.s -o o/KerN.o
-
- pyramid: s/pyramidKerN.s
- echo "-DDIGITon32BITS" >.Version
- AS s/pyramidKerN.s -o o/KerN.o
-
- i960: s/i960KerN.s
- echo "-DDIGITon32BITS" >.Version
- AS s/i960KerN.s -o o/KerN.o
-
- /* Construct VMS assembler from UNIX version */
-
- s/vaxKerN.mar: s/vaxKerN.s
- sed -f s/unix2vms.sed < s/vaxKerN.s > $@
-
- /* Level N */
- o/bnInit.o: c/bn/bnInit.c $(KERNH)
- $(CC) $(CFLAGS) c/bn/bnInit.c
- mv bnInit.o o
-
- o/bnMult.o: c/bn/bnMult.c $(KERNH)
- $(CC) $(CFLAGS) c/bn/bnMult.c
- mv bnMult.o o
-
- o/bnDivide.o: c/bn/bnDivide.c $(KERNH)
- $(CC) $(CFLAGS) c/bn/bnDivide.c
- mv bnDivide.o o
-
- o/bnCmp.o: c/bn/bnCmp.c $(KERNH)
- $(CC) $(CFLAGS) c/bn/bnCmp.c
- mv bnCmp.o o
-
- /* Level Z */
- o/bz.o: c/bz.c h/BigZ.h $(KERNH)
- $(CC) $(CFLAGS) c/bz.c
- mv bz.o o
-
- /* Some functions built with BigZ */
- o/bzf.o: c/bzf.c h/BigZ.h $(KERNH)
- $(CC) $(CFLAGS) c/bzf.c
- mv bzf.o o
-
- /* Tests of KerN */
- testKerN: Makefile o/testKerN.o $(LIB)
- $(CC) o/testKerN.o $(LIB) $(LKFLAGS) -o testKerN
-
- o/testKerN.o: c/testKerN.c $(KERNH) h/BntoBnn.h
- $(CC) $(CFLAGS) c/testKerN.c
- mv testKerN.o o
-
- /* Tests of BigZ */
- bztest: o/bztest.o $(LIB)
- $(CC) o/bztest.o $(LIB) $(LKFLAGS) -o bztest
-
- o/bztest.o: c/bztest.c h/BigZ.h $(KERNH)
- $(CC) $(CFLAGS) c/bztest.c
- mv bztest.o o
-
- /* documentation */
- doc: doc/bn.ps doc/bnf.ps
- docprl: doc/bnprl.ps
-
- doc/bn.dvi: doc/bn.tex doc/bnbody.tex
- cd doc;\
- latex bn;\
- makeindex bn;\
- sed -e "s/\\item Bz/\\newpage \\Bz/g" < bn.ind > bn.index;\
- mv bn.index bn.ind;\
- latex bn;\
- cd ..
-
- doc/bn.ps: doc/bn.dvi
- cd doc;\
- dvips -o bn.ps bn;\
- cd ..
-
- doc/bnf.dvi: doc/bnf.tex
- cd doc;\
- latex bnf;\
- cd ..
-
- doc/bnf.ps: doc/bnf.dvi
- cd doc;\
- dvips -o bnf.ps bnf;\
- cd ..
-
- doc/bnprl.dvi: doc/bnprl.tex doc/bnbody.tex
- cd doc;\
- latex bnprl;\
- makeindex bnprl;\
- sed -e "s/\\item Bz/\\newpage \\Bz/g" < bnprl.ind > bnprl.index;\
- mv bnprl.index bnprl.ind;\
- latex bnprl;\
- cd ..
-
- doc/bnprl.ps: doc/bnprl.dvi
- cd doc;\
- dvips -o bnprl.ps bnprl;\
- cd ..
-
- /* build shell archives */
- shar: bignum01
-
- PACKET_SIZE=90
-
- /* If you modify the list of files in the package kit, don't forget */
- /* to update README. */
-
- bignum01: README Makefile VMSmakefile\
- doc/bn.tex doc/bnbody.tex doc/bnf.tex doc/intro\
- c/KerN.c c/bn/bnInit.c c/bn/bnMult.c c/bn/bnDivide.c\
- c/bn/bnCmp.c c/bz.c c/bzf.c \
- c/bztest.c c/testKerN.c \
- h/BigNum.h h/BigZ.h h/BntoBnn.h \
- s/vaxKerN.s s/68KerN.s s/nsKerN.s s/68KerN_mot.s \
- s/mipsKerN.s s/pyramidKerN.s s/vaxKerN.mar s/unix2vms.sed \
- s/i960KerN.s \
- o/EMPTY
- makekit -s$(PACKET_SIZE)k -nbignum -t"Now do 'make'" \
- README Makefile VMSmakefile\
- doc doc/bn.tex doc/bnbody.tex doc/bnf.tex \
- doc/intro doc/makeidx.sty \
- c c/KerN.c c/bz.c c/bzf.c c/bztest.c c/testKerN.c \
- c/bn c/bn/bnInit.c c/bn/bnMult.c c/bn/bnDivide.c c/bn/bnCmp.c \
- h h/BigNum.h h/BigZ.h h/BntoBnn.h \
- s s/vaxKerN.s s/68KerN.s s/nsKerN.s s/68KerN_mot.s \
- s/mipsKerN.s s/pyramidKerN.s s/vaxKerN.mar s/unix2vms.sed \
- s/i960KerN.s \
- o o/EMPTY
-
- /* send shell archives */
- USER=nil
- FULLNAME=nil
- COPY=librarian@prl.dec.com
- mail: bignum01
- @sh -c "if [ x$(USER) = xnil -o 'x$(FULLNAME)' = xnil ]; \
- then echo must specify USER and FULLNAME; \
- echo EG make USER=herve@prl FULLNAME="'\"'"J-C Herve, Digital PRL"'\"'" mail; exit 1; \
- else :; fi"
- @touch Recipients
- @echo '' >> Recipients
- @date >> Recipients
- @echo "$(FULLNAME)" >> Recipients
- @echo '<'"$(USER)"'>' >> Recipients
- @echo "To: $(COPY)" >tosend
- @echo "Subject: BIGNUM DAEMON" >>tosend
- @echo "Madeleine and Monique, I have sent the package bignum to:" >>tosend
- @echo >>tosend
- @echo " $(FULLNAME)" >>tosend
- @echo " $(USER)" >>tosend
- @echo >>tosend
- @echo "Thanks to register this address in your distribution list." >>tosend
- @$(SENDMAIL) $(SENDMAILFLAGS) $(COPY) <tosend
- echo To: $(USER) > sendmail_header
- cp sendmail_header tosend
- echo "Subject: BigNum package from Digital PRL" >>tosend
- ls bignum[0-9][0-9] | sed -e "s/^bignum0*/ BigNum - Part /" > _flist1
- ls bignum[0-9][0-9] | sed -e "s/^/ /" > _flist2
- ls bignum[0-9][0-9] | sed -e "s/^/ \/bin\/sh /" > _flist3
- ls bignum[0-9][0-9] | sed -e "s/^/ shar -u /" > _flist4
- cc -E -Uvax -I. doc/intro >intro.tosend
- sed \
- -e "s/modified_on/modified_on/g" \
- -e "/doc\/intro/d" \
- -e "/.\/README/d" \
- -e "s/NN/"`ls bignum?? | wc -l | sed -e "s/ //g"`"/g" \
- -e "/^INCLUDE1/r _flist1" \
- -e "/^INCLUDE2/r _flist2" \
- -e "/^INCLUDE3/r _flist3" \
- -e "/^INCLUDE4/r _flist4" \
- -e "/^INCLUDE./d" \
- <intro.tosend >>tosend
- $(SENDMAIL) $(SENDMAILFLAGS) $(USER) <tosend
- for i in `ls bignum[0-9][0-9]`; \
- do cp sendmail_header tosend; \
- echo $$i | sed -e "s/^bignum0*/Subject: BigNum - Part /" >>tosend; \
- echo "# Remove all text above and including this line." >>tosend; \
- sed -e "s/modified_on/modified_on/g" <$$i >>tosend; \
- $(SENDMAIL) $(SENDMAILFLAGS) $(USER) <tosend; \
- done
- rm -f sendmail_header tosend _flist[1-9] bignum[0-9][0-9] intro.tosend
- --
- --Per Bothner
- bothner@cs.wisc.edu Computer Sciences Dept, U. of Wisconsin-Madison
-