Make.proto
author claus
Mon, 17 Jan 1994 14:52:06 +0100
changeset 3 04da04464d43
parent 2 353a88ada7c6
child 6 e62874de13a6
permissions -rw-r--r--
*** empty log message ***

#
# %W% %E%
#
# -------------- no need to change anything below ----------

OTHERS=-DSTATISTIC -DDEBUG
OTHERS=-DDEBUG
SUBDIRS=

CLIENTOBJS=

LIBIBASICOBJ=	$(LIBBASICDIR)/i_libbasic$(OBJNAME)
LIBICOMPOBJ=	$(LIBCOMPDIR)/i_libcomp$(OBJNAME)
LIBIVIEWOBJ=	$(LIBVIEWDIR)/i_libview$(OBJNAME)
LIBIWIDGETOBJ=	$(LIBWIDGETDIR)/i_libwidg$(OBJNAME)

LIBOBJ=	$(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBVIEWOBJ) $(LIBWIDGETOBJ) $(LIBRUN)
LIBIOBJ=$(LIBIBASICOBJ) $(LIBICOMPOBJ) $(LIBIVIEWOBJ) $(LIBIWIDGETOBJ)
LIBAR=	$(LIBBASIC) $(LIBCOMP) $(LIBVIEW) $(LIBWIDG)

FULLLIB=libwidg.a libview.a libcomp.a libbasic.a

TOP=..

STARTUP_CLASS=Smalltalk
STARTUP_SELECTOR="start"

all::       $(TARGET) abbrev.stc resources newSource bitmaps binary

allNew:     $(TARGET) abbrev.stc newResources newSource newBitmaps binary

smalltalk:  main.$(O) classList.$(O) $(LIBOBJS) $(LIBRUN) $(EXTRA_LIBS)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
		  $(CRT0) main.$(O) classList.$(O) \
		  $(LIBOBJS) $(EXTRA_OBJ) $(CLIENTOBJS) \
		  ../goodies/Persistency/libdbase$(OBJNAME) \
		  $(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
		  $(DBLIB) \
		  $(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)

fulltalk:  main.$(O) fclassList.$(O) $(LIBOBJS) $(LIBRUN) $(EXTRA_LIBS)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
		  $(CRT0) main.$(O) fclassList.$(O) \
		  $(LIBOBJS) $(EXTRA_OBJ) $(CLIENTOBJS) \
		  ../goodies/Persistency/libdbase$(OBJNAME) \
		  ../goodies/Benchmarks/DeltaBlue/libDeltaBlue$(OBJNAME) \
		  ../goodies/Benchmarks/Richards/libRichards$(OBJNAME) \
		  ../goodies/Benchmarks/Self/libSelfBench$(OBJNAME) \
		  ../goodies/Benchmarks/Dhrystones/dhrystones$(OBJNAME) \
		  ../goodies/Benchmarks/misc/libPDBench$(OBJNAME) \
		  $(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
		  $(DBLIB) \
		  $(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)

minitalk:   main.$(O) miniList.$(O) $(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBRUN)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o minitalk$(EXE) \
		  $(CRT0) main.$(O) miniList.$(O) \
		  $(LIBBASICDIR)/libbasic$(OBJNAME) \
		  $(LIBCOMPDIR)/libcomp$(OBJNAME) \
		  $(LIBRUNDIR)/hidata.$(O) \
		  $(LIBRUN) $(SYSLIBS) $(MATHLIB) $(CRTN)

tinytalk:   main.$(O) tinyList.$(O) $(LIBRUN) $(FULLLIB)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o tinytalk$(EXE) \
		  $(CRT0) main.$(O) tinyList.$(O) \
		  $(FULLLIB) \
		  $(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
		  $(MATHLIB) $(SYSLIBS) $(CRTN)

nxtalk:     main.$(O) nxclassList $(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBRUN)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o nxtalk$(EXE) \
		  $(CRT0) main.$(O) nxclassList.$(O) \
		  $(LIBBASICDIR)/libbasic$(OBJNAME) \
		  $(LIBCOMPDIR)/libcomp$(OBJNAME) \
		  $(LIBVIEWDIR)/libview$(OBJNAME) \
		  $(LIBRUNDIR)/hidata.$(O) \
		  $(LIBRUN) $(MATHLIB) $(SYSLIBS) $(CRTN)

smalltalk_8mb:  main.$(O) classList.$(O) $(LIBOBJS) $(LIBIOBJ) $(LIBRUN)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
		  $(CRT0) main.$(O) classList.$(O) \
		  $(LIBIOBJS) \
		  $(LIBRUNDIR)/hidata.$(O) \
		  $(LIBOBJS) $(LIBRUN)  \
		  $(MATHLIB) $(SYSLIBS) $(CRTN)

bigtalk:  main.$(O) bigList.$(O) $(LIBOBJS) $(CLIENTSOBJS) $(LIBRUN) $(EXTRA_LIBS)
	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
		  $(CRT0) main.$(O) bigList.$(O) \
		  $(LIBOBJS) \
		  $(CLIENTOBJS) \
		  $(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
		  $(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)

#
# the following stuff is for transputer (inmos ctools)
#
# I had a minitalk running once, but did not update -
# so it may not work anymore
#
centry.lku: globals.$(O) main.$(O) classlist.lnk
	    ilink -KB 500 -I -f /usr/local/inmos/lib/startup.lnk \
		main.$(O) globals.$(O) \
		-f classlist.lnk \
		$(LIBRUNDIR)/hidata.$(O) \
		$(LIBRUN) $(MATHLIB) $(SYSLIBS) $(CRTN)
		
puter:	    centry.lku
	    -cp /usr/local/inmos/lib/linkboot.lib .
	    -cp /usr/local/inmos/lib/sysproc.lib .
	    icollect -T centry.lku 
	    mv centry.btl smalltalk.btl
	    -rm linkboot.lib sysproc.lib

classlist.lnk:
	    ls ../libbasic/*.tco > classlist.lnk
	    ls ../libcomp/*.tco >> classlist.lnk

globals.c:
	    echo "#include \"stc.h\" " > globals.c
	    cat $(LIBRUNDIR)/globalData.c \
	        $(LIBBASICDIR)/globalData.c \
		$(LIBCOMPDIR)/globalData.c | sort | uniq >> globals.c

#
# end of transputer special
#

classList: classList.c
	    $(CC) $(_C) $(CFLAGS) classList.c
	    rm -f classList.c

fclassList: fclassList.c
	    $(CC) $(_C) $(CFLAGS) fclassList.c
	    rm -f fclassList.c

nxclassList: nxclassList.c
	    $(CC) $(_C) $(CFLAGS) nxclassList.c
	    rm -f nxclassList.c

miniList: miniList.c
	    $(CC) $(_C) $(CFLAGS) miniList.c
	    rm -f miniList.c

tinyList: tinyList.c
	    $(CC) $(_C) $(CFLAGS) tinyList.c
	    rm -f tinyList.c

bigList: bigList.c
	    $(CC) $(_C) $(CFLAGS) bigList.c
	    rm -f bigList.c

fclassList.c: fclassList.stc
	    $(MAKE) fclassList.stc
	    $(MAKE) classListEdit CLASSLIST=fclassList

miniList.c: miniList.stc
	    $(MAKE) miniList.stc
	    $(MAKE) classListEdit CLASSLIST=miniList

nxclassList.c: nxclassList.stc
	    $(MAKE) nxclassList.stc
	    $(MAKE) classListEdit CLASSLIST=nxclassList

tinyList.c: tinyList.stc
	    $(MAKE) tinyList.stc
	    $(MAKE) classListEdit CLASSLIST=tinyList

bigList.c: bigList.stc
	    $(MAKE) bigList.stc
	    $(MAKE) classListEdit CLASSLIST=bigList

#
# this creates the class archives
#
libbasic.a:
	    $(AR) rv libbasic.a  $(LIBBASICDIR)/[A-Z]*.o
	    $(RANLIB) libbasic.a

libcomp.a:
	    $(AR) rv libcomp.a $(LIBCOMPDIR)/[A-Z]*.o
	    $(RANLIB) libcomp.a

libview.a:
	    $(AR) rv libview.a $(LIBVIEWDIR)/[A-Z]*.o
	    $(RANLIB) libview.a

libwidg.a:
	    $(AR) rv libwidg.a $(LIBWIDGETDIR)/[A-Z]*.o
	    $(RANLIB) libwidg.a

#
# make list of classes for a standard smalltalk
# (includes basic, view & widgets and Persistency)
#
classList.stc: $(LIBBASICDIR)/classList.stc $(LIBCOMPDIR)/classList.stc  \
	       $(LIBVIEWDIR)/classList.stc $(LIBWIDGETDIR)/classList.stc \
	       $(TOP)/goodies/Persistency/classList.stc \
	       $(EXTRACLASSLISTS) $(CLIENTCLASSLISTS)
	    -cat $(LIBBASICDIR)/classList.stc \
		 $(LIBCOMPDIR)/classList.stc \
		 $(LIBVIEWDIR)/classList.stc \
		 $(LIBWIDGETDIR)/classList.stc \
	         $(TOP)/goodies/Persistency/classList.stc \
		 $(EXTRACLASSLISTS)            \
		 $(CLIENTCLASSLISTS)          > classList.stc
	    -if [ "$(EXTRA_CLASSES)"X != X ]; then 			\
	        for i in $(EXTRA_CLASSES); do 		\
	            echo $$i 		      >> classList.stc; \
	        done;						\
	     fi

#
# make list of classes for a standard smalltalk using NeXTStep
#
nxclassList.stc:
	    rm -f classList.stc
	    $(MAKE) miniList.stc EXTRA_CLASSES='NeXTWorkstation'
	    -cat ../libview/classList.stc >> classList.stc

#
# make list of classes for a full smalltalk 
# (like standard smalltalk, but adds Benchmarks)
#
fclassList.stc: $(TOP)/libbasic/classList.stc \
	        $(TOP)/libcomp/classList.stc \
	        $(TOP)/libview/classList.stc \
	        $(TOP)/libwidg/classList.stc \
	        $(EXTRACLASSLISTS) $(CLIENTCLASSLISTS) \
	        $(TOP)/goodies/Persistency/classList.stc \
		$(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc \
		$(TOP)/goodies/Benchmarks/Richards/classList.stc \
		$(TOP)/goodies/Benchmarks/Dhrystones/classList.stc
	    -cat $(TOP)/libbasic/classList.stc \
		 $(TOP)/libcomp/classList.stc \
		 $(TOP)/libview/classList.stc \
		 $(TOP)/libwidg/classList.stc \
		 $(EXTRACLASSLISTS)            \
		 $(CLIENTCLASSLISTS)          > fclassList.stc
	    -if [ "$(EXTRA_CLASSES)"X != X ]; then 			\
	        for i in $(EXTRA_CLASSES); do 		\
	            echo $$i 		      >> fclassList.stc; \
	        done;						\
	     fi
	    -cat $(TOP)/goodies/Persistency/classList.stc >> fclassList.stc
	    -cat $(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc >> fclassList.stc
	    -cat $(TOP)/goodies/Benchmarks/Richards/classList.stc >> fclassList.stc
	    -cat $(TOP)/goodies/Benchmarks/Dhrystones/classList.stc >> fclassList.stc
	    -cat $(TOP)/goodies/Benchmarks/Self/classList.stc >> fclassList.stc
	    -cat $(TOP)/goodies/Benchmarks/misc/classList.stc >> fclassList.stc

#
# make list of classes for a big smalltalk
# (like standard smalltalk, but adds Benchmarks and all clients)
#
bigList.stc: $(TOP)/libbasic/classList.stc \
	        $(TOP)/libcomp/classList.stc \
	        $(TOP)/libview/classList.stc \
	        $(TOP)/libwidg/classList.stc \
	        $(EXTRACLASSLISTS) $(CLIENTCLASSLISTS) \
	        $(TOP)/goodies/Persistency/classList.stc \
	        $(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc \
	        $(TOP)/goodies/Benchmarks/Richards/classList.stc \
	        $(TOP)/goodies/Benchmarks/Dhrystones/classList.stc
	        $(TOP)/clients/*/classList.stc
	    -cat $(TOP)/libbasic/classList.stc \
	         $(TOP)/libcomp/classList.stc \
	         $(TOP)/libview/classList.stc \
	         $(TOP)/libwidg/classList.stc \
	         $(EXTRACLASSLISTS)            \
	         $(TOP)/clients/*/classList.stc > bigList.stc
	    -if [ "$(EXTRA_CLASSES)"X != X ]; then                      \
	        for i in $(EXTRA_CLASSES); do           \
	            echo $$i                  >> bigList.stc; \
	        done;                                           \
	     fi
	    -cat $(TOP)/goodies/Persistency/classList.stc >> bigList.stc
	    -cat $(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc >> bigList.stc
	    -cat $(TOP)/goodies/Benchmarks/Richards/classList.stc >> bigList.stc
	    -cat $(TOP)/goodies/Benchmarks/Dhrystones/classList.stc >> bigList.stc
	    -cat $(TOP)/goodies/Benchmarks/Self/classList.stc >> bigList.stc
	    -cat $(TOP)/goodies/Benchmarks/misc/classList.stc >> bigList.stc

#
# make list of classes for a mini smalltalk 
# (no GUI, line-by-line interface only)
#
miniList.stc:
	    -cat $(TOP)/libbasic/classList.stc > miniList.stc
	    -cat $(TOP)/libcomp/classList.stc >> miniList.stc
	    -if [ "$(EXTRA_CLASSES)"X != X ]; then 			\
	        for i in $(EXTRA_CLASSES); do 		\
	            echo $$i 		      >> classList.stc; \
	        done;						\
	     fi

#
# make list of classes for a tiny smalltalk 
# (minimum classes compiled, loads in rest as interpreted byte code)
# this is done by creating a classList and removing all we dont want
#
EXCLUDE=
tinyList.stc:
	    $(MAKE) miniList.stc
	    mv miniList.stc tinyList.stc
	    -cat $(TOP)/libview/classList.stc >> tinyList.stc

#tinyList.stc:
#	    -rm classList.stc
#	    $(MAKE) classList.stc
#	    sh ../rules/removeFrom.sh classList.stc excludeList.stc > tinyList.stc
#	    -rm classList.stc

#
# make a new source subdirectory
#
newSource:
	    -rm -rf source
	    $(MAKE) sourceLink

Source:     source

source:	    
	    $(MAKE) sourceLink

sourceLink:
	    -mkdir source
	    -(cd source; $(LNS) ../$(LIBBASICDIR)/*.st .)
	    -(cd source; $(LNS) ../$(LIBCOMPDIR)/*.st .)
	    -(cd source; $(LNS) ../$(LIBVIEWDIR)/*.st .)
	    -(cd source; $(LNS) ../$(LIBWIDGETDIR)/*.st .)
	    -(cd source; $(LNS) ../$(CLIENTDIR)/[A-Z]*/*.st .)
	    -(cd source; $(LNS) ../../fileIn/*.st .)
	    -(cd source; $(LNS) ../../goodies/*.st .)
	    -(cd source; $(LNS) ../../goodies/*/*.st .)
	    -(cd source; $(LNS) ../../goodies/*/*/*.st .)

#
# make a new binary subdirectory
# (this is only useful on systems that support dynamic loading;
#  autoloaded classes will then be loaded from machine code files
#  instead of source)
#
newBinary:
	    -rm -rf binary
	    $(MAKE) binaryLink

binary:
	    $(MAKE) binaryLink

binaryLink:
	    -mkdir binary
	    -if [ "`echo $(CLIENTDIR)/[A-Z]*/*.o`" != '$(CLIENTDIR)/[A-Z]*/*.o' ]; then 	\
	        (cd binary; $(LNS) ../$(CLIENTDIR)/[A-Z]*/*.o .); 				\
	     fi
	    -if [ "`echo ../goodies/*.o`" != '../goodies/*.o' ]; then 				\
	        (cd binary; $(LNS) ../../goodies/*.o .) ; 					\
	     fi
	    -if [ "`echo ../goodies/*/*.o`" != '../goodies/*/*.o' ]; then 			\
	        (cd binary; $(LNS) ../../goodies/*/*.o .) ;					\
	     fi
	    -if [ "`echo ../goodies/*/*/*.o`" != '../goodies/*/*/*.o' ]; then 			\
	        (cd binary; $(LNS) ../../goodies/*/*/*.o .) ;					\
	    fi

#
# make a new bitmaps subdirectory
# (simply collect the contents of all bitmap directories)
#
newBitmaps:
	    -rm -rf bitmaps
	    $(MAKE) bitmaps

Bitmaps:    bitmaps

bitmaps:
	    -mkdir bitmaps
	    -(cd bitmaps; $(LNS) ../$(LIBVIEWDIR)/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(LIBWIDGETDIR)/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(CLIENTDIR)/A*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(CLIENTDIR)/[B-C]*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(CLIENTDIR)/D[a-q]*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(CLIENTDIR)/D[r-z]*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../$(CLIENTDIR)/[E-Z]*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../../fileIn/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../../fileIn/*/bitmaps/* .)
	    -(cd bitmaps; $(LNS) ../../goodies/bitmaps/* .)

#
# clean out intermediate chunk
#
cleanjunk::
	    -rm -f a.out changes SymbolTable ttt main.c

#
# clean out all that is not needed to run smalltalk
#
clean::
	    -rm -f a.out changes SymbolTable ttt main.c
	    -rm -f classList.stc classList.c
	    -rm -f fclassList.stc fclassList.c
	    -rm -f nxclassList.stc nxclassList.c
	    -rm -f miniList.stc miniList.c
	    -rm -f tinyList.stc tinyList.c

#
# clean out all that can be regenerated
#
clobber::
	    -rm -rf resources source bitmaps changes
	    -rm -f smalltalk minitalk tinytalk abbrev.stc st.img
	    -rm -f main.o

#
# make a new resources subdirectory
#
newResources:
	    rm -rf resources
	    $(MAKE) resources

resources: 
	    -mkdir resources
	    cp $(LIBWIDGETDIR)/resources/*.rs resources
	    cp $(LIBVIEWDIR)/resources/*.rs resources
	    cp ../fileIn/resources/*.rs resources
	    cp $(CLIENTDIR)/*/resources/*.rs resources

#
# make an abbreviation file by collecting all existing ones
#
abbrev.stc: $(LIBBASICDIR)/abbrev.stc $(LIBCOMPDIR)/abbrev.stc \
	    $(LIBVIEWDIR)/abbrev.stc $(LIBWIDGETDIR)/abbrev.stc \
	    ../fileIn/abbrev.stc ../clients/MailTool/abbrev.stc \
	    ../clients/DrawTool/abbrev.stc ../clients/DocTool/abbrev.stc \
	    ../clients/DirView/abbrev.stc
	    cat $(LIBBASICDIR)/abbrev.stc > abbrev.stc
	    cat $(LIBCOMPDIR)/abbrev.stc >> abbrev.stc
	    cat $(LIBVIEWDIR)/abbrev.stc >> abbrev.stc
	    cat $(LIBWIDGETDIR)/abbrev.stc >> abbrev.stc
	    cat $(CLIENTDIR)/*/abbrev.stc >> abbrev.stc
	    cat ../fileIn/abbrev.stc >> abbrev.stc
	    cat ../goodies/*/abbrev.stc >> abbrev.stc

$(TARGET):  $(INCLUDE)/stc.h $(INCLUDE)/stcIntern.h 

installDemo: install
	-rm $(DESTLIBDIR)/source/BCompiler.st
	-rm $(DESTLIBDIR)/source/ObjectView.st
	-strip $(DESTBINDIR)/smalltalk

binInstall::
	-mkdir $(DESTLIBDIR)
	-mkdir $(DESTBINDIR)
	 $(INSTALL) smalltalk $(DESTBINDIR)
	-strip $(DESTBINDIR)/smalltalk

install:: installThis

#
# notice the [x-y]* patterns; some unixes (at&t) dont like too many arguments ...
#
installThis::
	-mkdir $(DESTLIBDIR)
	-mkdir $(DESTBINDIR)
	 $(INSTALL) smalltalk $(DESTBINDIR)
	-strip $(DESTBINDIR)/smalltalk
	-mkdir $(DESTLIBDIR)/source
	-chmod a+rx $(DESTLIBDIR)/source
	-cp source/[A-G]* $(DESTLIBDIR)/source
	-cp source/[H-P]* $(DESTLIBDIR)/source
	-cp source/[Q-Z]* $(DESTLIBDIR)/source
	-chmod a+r $(DESTLIBDIR)/source/[A-G]*
	-chmod a+r $(DESTLIBDIR)/source/[H-P]*
	-chmod a+r $(DESTLIBDIR)/source/[Q-Z]*
	-mkdir $(DESTLIBDIR)/bitmaps
	-chmod a+rx $(DESTLIBDIR)/bitmaps
	-cp bitmaps/[A-I]* $(DESTLIBDIR)/bitmaps
	-cp bitmaps/[J-Z]* $(DESTLIBDIR)/bitmaps
	-cp bitmaps/[a-i]* $(DESTLIBDIR)/bitmaps
	-cp bitmaps/[j-z]* $(DESTLIBDIR)/bitmaps
	-chmod a+r $(DESTLIBDIR)/bitmaps/[A-I]*
	-chmod a+r $(DESTLIBDIR)/bitmaps/[J-Z]*
	-chmod a+r $(DESTLIBDIR)/bitmaps/[a-i]*
	-chmod a+r $(DESTLIBDIR)/bitmaps/[j-z]*
	-chmod a+rx $(DESTLIBDIR)/resources
	-mkdir $(DESTLIBDIR)/resources
	-cp resources/* $(DESTLIBDIR)/resources
	-chmod a+r $(DESTLIBDIR)/resources/*.rs
	-cp *.rc *.stc patches $(DESTLIBDIR)
	-chmod a+r $(DESTLIBDIR)/*.rc $(DESTLIBDIR)/*.stc $(DESTLIBDIR)/patches

qinstall:: installThis