#*---------------------------------------------------------------------*/
#*    serrano/prgm/project/bigloo/comptime1.6/Makefile ...             */
#*                                                                     */
#*    Auteur      :  Manuel SERRANO                                    */
#*    Creation    :  Tue May 14 14:21:00 1991                          */
#*    Last change :  Wed Jun  1 15:58:03 1994 (serrano)                */
#*                                                                     */
#*    Le makefile pour construire `Bigloo 1.6' ...                     */
#*    -------------------------------------------------------------    */
#*    Ce fichier peut-etre interprete soit par `make' sur les machines */
#*    Sun soit par `gmake' sur toutes les autres machines.             */
#*---------------------------------------------------------------------*/

#*---------------------------------------------------------------------*/
#*     Les flags ...                                                   */
#*---------------------------------------------------------------------*/
MACH            = `arch`
CC              = gcc
VERSION         = 1.6
BIN             = ../bin
BIGLOO          = $(BIN)/bigloo$(VERSION)
#* BIGLOO          = bigloo   */
BIGLOO_DEST     = $(BIN)/bigloo$(VERSION)
AFILE           = .afile
BEEP            = ../tools/beep
SHELL           = /bin/csh

#*---------------------------------------------------------------------*/
#*    Les flags par defauts (pour pouvoir faire make *.o)              */
#*---------------------------------------------------------------------*/
BFLAGS          = -afile $(AFILE) -g -cg -O3 -cc $(CC) +rm -fshared-data -q
CFLAGS          = 

#*---------------------------------------------------------------------*/
#*    Les sources                                                      */
#*---------------------------------------------------------------------*/
#*--- init ------------------------------------------------------------*/
INIT_OBJ_FILE	= parse-args.o setrc.o signals.o

INIT_OBJ	= $(INIT_OBJ_FILE:%=Init/%)

#*--- engine ----------------------------------------------------------*/
ENGINE_OBJ_FILE	= compiler.o engine.o param.o interp.o path.o link.o

ENGINE_OBJ	= $(ENGINE_OBJ_FILE:%=Engine/%)

#*--- write -----------------------------------------------------------*/
WRITE_OBJ_FILE	= version.o expanded.o scheme.o tree.o c.o

WRITE_OBJ	= $(WRITE_OBJ_FILE:%=Write/%)

#*--- tools -----------------------------------------------------------*/
TOOLS_OBJ_FILE	= trace.o speek.o hash.o shape.o error.o progn.o args.o \
                  file.o beta.o module.o alpha.o strings.o

TOOLS_OBJ	= $(TOOLS_OBJ_FILE:%=Tools/%)

#*--- read ------------------------------------------------------------*/
READ_OBJ_FILE	= access.o src.o include.o import.o inline.o

READ_OBJ	= $(READ_OBJ_FILE:%=Read/%)

#*--- parse -----------------------------------------------------------*/
PARSE_OBJ_FILE	= module.o include.o statexp.o with.o foreign.o         \
                  import.o top-level.o load.o

PARSE_OBJ	= $(PARSE_OBJ_FILE:%=Parse/%)

#*--- foreign ---------------------------------------------------------*/
FOREIGN_OBJ_FILE= parse.o tools.o atomic.o access.o cast.o declare.o    \
                  export.o

FOREIGN_OBJ	= $(FOREIGN_OBJ_FILE:%=Foreign/%)

#*--- var -------------------------------------------------------------*/
VAR_OBJ_FILE	= env.o variable.o declare.o pragma.o

VAR_OBJ		= $(VAR_OBJ_FILE:%=Var/%)

#*--- expand ----------------------------------------------------------*/
EXPAND_OBJ_FILE	= case.o cond.o define.o do.o garith.o                  \
                  iarith.o initial.o kwote.o lambda.o let.o macro.o     \
                  map.o struct.o try.o eps.o expander.o                 \
                  assert.o

EXPAND_OBJ	= $(EXPAND_OBJ_FILE:%=Expand/%)

#*--- type ------------------------------------------------------------*/
TYPE_OBJ_FILE	= cast.o walk.o expression.o app.o bind.o               \
                  type.o enforce.o apply.o

TYPE_OBJ	= $(TYPE_OBJ_FILE:%=Type/%)

#*--- 0cfa ------------------------------------------------------------*/
0CFA_OBJ_FILE	= walk.o 0cfa.o reduce.o tree.o app.o foreign.o         \
                  diet.o

0CFA_OBJ	= $(0CFA_OBJ_FILE:%=0cfa/%)

#*--- heap ------------------------------------------------------------*/
HEAP_OBJ_FILE	= restore.o compact.o make.o abstract.o

HEAP_OBJ	= $(HEAP_OBJ_FILE:%=Heap/%)

#*--- scan ------------------------------------------------------------*/
SCAN_OBJ_FILE	= walk.o definition.o temporary.o tree.o lexical.o      \
                  app.o let.o labels.o bind.o eval.o

SCAN_OBJ	= $(SCAN_OBJ_FILE:%=Scan/%)

#*--- inline ----------------------------------------------------------*/
INLINE_OBJ_FILE	= walk.o call.o loop.o

INLINE_OBJ	= $(INLINE_OBJ_FILE:%=Inline/%)

#*--- fuse ------------------------------------------------------------*/
FUSE_OBJ_FILE	= walk.o cgraph.o

FUSE_OBJ	= $(FUSE_OBJ_FILE:%=Fuse/%)

#*--- hoist -----------------------------------------------------------*/
HOIST_OBJ_FILE	= walk.o hoist.o

HOIST_OBJ	= $(HOIST_OBJ_FILE:%=Hoist/%)

#*--- cse -------------------------------------------------------------*/
CSE_OBJ_FILE	= walk.o cse.o

CSE_OBJ		= $(CSE_OBJ_FILE:%=Cse/%)

#*--- effect ----------------------------------------------------------*/
EFFECT_OBJ_FILE	= property.o walk.o cgraph.o fix.o

EFFECT_OBJ	= $(EFFECT_OBJ_FILE:%=Effect/%)


#*--- beta ------------------------------------------------------------*/
BETA_OBJ_FILE	= walk.o beta.o vgraph.o

BETA_OBJ	= $(BETA_OBJ_FILE:%=Beta/%)

#*--- superlift -------------------------------------------------------*/
SLIFT_OBJ_FILE	= walk.o expression.o

SLIFT_OBJ	= $(SLIFT_OBJ_FILE:%=Superlift/%)

#*--- lift ------------------------------------------------------------*/
LIFT_OBJ_FILE	= walk.o definition.o cgraph.o integrate.o kapture.o   \
                  expression.o closure.o block.o labels.o init.o       \
                  fgraph.o interface.o

LIFT_OBJ	= $(LIFT_OBJ_FILE:%=Lift/%)

#*--- cnst ------------------------------------------------------------*/
CNST_OBJ_FILE	= walk.o expression.o alloc.o init.o module.o          \
                  read-exp.o read-init.o read-alloc.o

CNST_OBJ	= $(CNST_OBJ_FILE:%=Cnst/%)

#*--- integ -----------------------------------------------------------*/
INTEG_OBJ_FILE	= walk.o definition.o agraph.o kk.o cn.o kapture.o     \
                  expression.o

INTEG_OBJ	= $(INTEG_OBJ_FILE:%=Integ/%)

#*--- cgen ------------------------------------------------------------*/
CGEN_OBJ_FILE	= walk.o file.o emit.o definition.o ident.o s2c.o      \
                  emit-code.o main.o

CGEN_OBJ	= $(CGEN_OBJ_FILE:%=Cgen/%)

#*--- cc --------------------------------------------------------------*/
CC_OBJ_FILE	= cc.o indent.o ld.o

CC_OBJ		= $(CC_OBJ_FILE:%=Cc/%)

#*--- assert ----------------------------------------------------------*/
ASSERT_OBJ_FILE	= walk.o put.o get.o make.o

ASSERT_OBJ	= $(ASSERT_OBJ_FILE:%=Assert/%)

#*--- curry -----------------------------------------------------------*/
CURRY_OBJ_FILE	= walk.o exp.o let.o fiable.o

CURRY_OBJ	= $(CURRY_OBJ_FILE:%=Curry/%)

#*--- user ------------------------------------------------------------*/
USER_OBJ	=

#*---------------------------------------------------------------------*/
#*    Tout le code ...                                                 */
#*---------------------------------------------------------------------*/
O_OBJECTS       = $(INIT_OBJ) $(ENGINE_OBJ) $(WRITE_OBJ) $(TOOLS_OBJ)   \
                  $(READ_OBJ) $(PARSE_OBJ) $(VAR_OBJ) $(TYPE_OBJ)       \
                  $(HEAP_OBJ) $(SCAN_OBJ) $(EXPAND_OBJ)                 \
                  $(INLINE_OBJ) $(HOIST_OBJ) $(CSE_OBJ)                 \
                  $(LIFT_OBJ) $(CNST_OBJ) $(CGEN_OBJ) $(CC_OBJ)         \
                  $(BETA_OBJ) $(INTEG_OBJ) $(EFFECT_OBJ) $(0CFA_OBJ)    \
                  $(FUSE_OBJ) $(FOREIGN_OBJ) $(ASSERT_OBJ) $(CURRY_OBJ) \
                  $(USER_OBJ) $(SLIFT_OBJ)

C_OBJECTS       = $(O_OBJECTS:%.o=%.c)

SOURCE_FILES	= $(O_OBJECTS:%.o=%.scm)

#*---------------------------------------------------------------------*/
#*     Les suffixes ...                                                */
#*---------------------------------------------------------------------*/
.SUFFIXES:
.SUFFIXES: .scm .c .S .o

#*---------------------------------------------------------------------*/
#*    L'executable `bigloo'                                            */
#*---------------------------------------------------------------------*/
bigloo:
#* 	@ $(MAKE) new  */
	@ $(MAKE) bigloo.exe

#*---------------------------------------------------------------------*/
#*    bigloo.new                                                       */
#*---------------------------------------------------------------------*/
new:
	@ $(MAKE) bigloo.exe                                        \
               BFLAGS="-afile $(AFILE) -g -cg -O3 -cc $(CC) +rm -q" \
               BIGLOO_DEST=$(BIN)/bigloo$(VERSION).new

#*---------------------------------------------------------------------*/
#*    dist-bigloo (les `.c' pour la distribution)                      */
#*---------------------------------------------------------------------*/
dist-bigloo:
	@ $(MAKE) dist-bigloo.exe                                 \
               BFLAGS="-afile $(AFILE) -O3 -unsafe -cc $(CC) -rm" \
               BIGLOO=$(BIN)/bigloo$(VERSION)

#*---------------------------------------------------------------------*/
#*    bigloo.exe                                                       */
#*---------------------------------------------------------------------*/
bigloo.exe: $(O_OBJECTS) maino
	@ strip $(BIGLOO_DEST) >& /dev/null
	@ echo "Bigloo Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    dist-bigloo.exe                                                  */
#*---------------------------------------------------------------------*/
dist-bigloo.exe: $(C_OBJECTS) mainc
	@ echo "Bigloo (distribution) Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    maino                                                            */
#*---------------------------------------------------------------------*/
INIT_MAIN_SCM	= Init/main.scm

maino:
	@ $(BIGLOO) $(BFLAGS) -A Tools/date.scm
	@ $(BIGLOO) $(BFLAGS) -o $(BIGLOO_DEST) $(INIT_MAIN_SCM) \
	                         +rm Tools/date.o $(O_OBJECTS)   \
                                 $(ADDITIONAL_LIBRARIES)

#*---------------------------------------------------------------------*/
#*    mainc                                                            */
#*---------------------------------------------------------------------*/
mainc:
	@ $(BIGLOO) $(BFLAGS) -C Tools/date.scm
	@ $(BIGLOO) $(BFLAGS) -C Init/main.scm -main main -mkdistrib

#*---------------------------------------------------------------------*/
#*    afile                                                            */
#*---------------------------------------------------------------------*/
afile:
	@ echo "   - .afile"
	@ ../examples/Afile/afile -o $(AFILE) $(SOURCE_FILES)
	@ echo "   - dep"
	@ $(MAKE) dep
	@ echo "   - .etags"
	@ $(MAKE) tags

#*---------------------------------------------------------------------*/
#*    tags                                                             */
#*---------------------------------------------------------------------*/
tags:
	@ etags $(SOURCE_FILES) -o .etags

#*---------------------------------------------------------------------*/
#*    dep                                                              */
#*---------------------------------------------------------------------*/
dep:
	@ - head -`grep -n \^#depend Makefile | awk -F: '{ print $$1}' -` Makefile > /tmp/Makefile.aux
	@ ../examples/Depend/depend $(SOURCE_FILES) >> /tmp/Makefile.aux
	@ mv /tmp/Makefile.aux Makefile

#*---------------------------------------------------------------------*/
#*     clean ...                                                       */
#*---------------------------------------------------------------------*/
clean:
	@ echo "removing .o files"
	@ find . \( -name '*.o' -o -name '*.c' \) -exec \rm {} \;
	@ echo "cleanup done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*     touchall ...                                                    */
#*---------------------------------------------------------------------*/
touchall:
	@ touch $(SOURCE_FILES)
	@ echo "touchall done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*     .scm --> .o                                                     */
#*---------------------------------------------------------------------*/
.scm.o:
	@ $(BIGLOO) $(BFLAGS) -A $*.scm -o $*.o
	
#*---------------------------------------------------------------------*/
#*     .scm --> .c                                                     */
#*---------------------------------------------------------------------*/
.scm.c:
	@ $(BIGLOO) $(BFLAGS) -C $*.scm -o $*.o

#*---------------------------------------------------------------------*/
#*    Les dependances                                                  */
#*---------------------------------------------------------------------*/
#depend
Superlift/expression.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Curry/fiable.o: Var/variable.sch
Curry/let.o: Curry/curry.sch Var/variable.sch
Curry/exp.o: Curry/curry.sch Var/variable.sch
Curry/walk.o: Var/variable.sch Curry/curry.sch
Assert/make.o: Assert/assert.sch Var/variable.sch Tools/trace.sch Foreign/type.sch
Assert/get.o: Assert/assert.sch Tools/trace.sch Var/variable.sch
Assert/put.o: Assert/assert.sch Var/variable.sch Tools/trace.sch
Assert/walk.o: Var/variable.sch
Foreign/export.o: Var/variable.sch Expand/expander.sch Foreign/type.sch
Foreign/declare.o: Foreign/type.sch
Foreign/cast.o: Foreign/type.sch Tools/trace.sch
Foreign/access.o: Foreign/type.sch
Foreign/atomic.o: Foreign/type.sch
Foreign/tools.o: Foreign/type.sch
Fuse/cgraph.o: Var/variable.sch
Fuse/walk.o: Var/variable.sch
0cfa/diet.o: Var/variable.sch Tools/trace.sch 0cfa/0cfa.sch 0cfa/app.sch
0cfa/foreign.o: Var/variable.sch Tools/trace.sch 0cfa/0cfa.sch 0cfa/app.sch Foreign/type.sch
0cfa/app.o: Var/variable.sch Tools/trace.sch 0cfa/0cfa.sch 0cfa/app.sch
0cfa/tree.o: 0cfa/app.sch Tools/trace.sch Var/variable.sch 0cfa/0cfa.sch
0cfa/reduce.o: Var/variable.sch Tools/trace.sch 0cfa/0cfa.sch 0cfa/app.sch
0cfa/0cfa.o: Var/variable.sch Tools/trace.sch 0cfa/0cfa.sch 0cfa/app.sch
0cfa/walk.o: Var/variable.sch Tools/trace.sch
Effect/fix.o: Var/variable.sch Effect/temp.sch Effect/effect.sch Tools/trace.sch
Effect/cgraph.o: Var/variable.sch Effect/temp.sch Tools/trace.sch
Effect/walk.o: Var/variable.sch Tools/trace.sch
Effect/property.o: Var/variable.sch Tools/trace.sch Effect/effect.sch
Integ/expression.o: Var/variable.sch Tools/trace.sch Integ/integ.sch
Integ/kapture.o: Tools/trace.sch Var/variable.sch Integ/integ.sch
Integ/cn.o: Integ/integ.sch Var/variable.sch Tools/trace.sch
Integ/kk.o: Var/variable.sch Tools/trace.sch Integ/integ.sch
Integ/agraph.o: Var/variable.sch Tools/trace.sch Integ/integ.sch
Integ/definition.o: Tools/trace.sch Var/variable.sch Integ/integ.sch
Integ/walk.o: Var/variable.sch
Beta/vgraph.o: Var/variable.sch Tools/trace.sch Beta/beta.sch
Beta/beta.o: Var/variable.sch Tools/trace.sch Beta/beta.sch
Beta/walk.o: Var/variable.sch
Cc/ld.o: Tools/trace.sch
Cc/cc.o: Tools/trace.sch
Cgen/main.o: Var/variable.sch
Cgen/emit-code.o: Var/variable.sch Cgen/cgen.sch Tools/trace.sch
Cgen/s2c.o: Var/variable.sch Cgen/cgen.sch Lift/lift.sch Integ/integ.sch Tools/trace.sch Foreign/type.sch
Cgen/ident.o: Var/variable.sch
Cgen/definition.o: Cgen/cgen.sch Var/variable.sch Tools/trace.sch
Cgen/emit.o: Var/variable.sch Cgen/cgen.sch Foreign/type.sch Tools/trace.sch
Cgen/file.o: Tools/trace.sch
Cgen/walk.o: Cgen/cgen.sch Var/variable.sch
Cnst/read-alloc.o: Var/variable.sch Tools/trace.sch
Cnst/read-init.o: Var/variable.sch
Cnst/read-exp.o: Tools/trace.sch Var/variable.sch
Cnst/module.o: Var/variable.sch Tools/trace.sch
Cnst/init.o: Var/variable.sch
Cnst/alloc.o: Var/variable.sch Tools/trace.sch
Cnst/expression.o: Tools/trace.sch Var/variable.sch
Cnst/walk.o: Var/variable.sch
Lift/fgraph.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/init.o: Var/variable.sch
Lift/labels.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/block.o: Var/variable.sch Lift/lift.sch
Lift/closure.o: Var/variable.sch Lift/lift.sch
Lift/expression.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/kapture.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/integrate.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/cgraph.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Lift/definition.o: Var/variable.sch Lift/lift.sch Tools/trace.sch
Cse/cse.o: Var/variable.sch Tools/trace.sch
Cse/walk.o: Var/variable.sch
Hoist/hoist.o: Tools/trace.sch
Hoist/walk.o: Var/variable.sch
Inline/loop.o: Var/variable.sch Tools/trace.sch
Inline/call.o: Var/variable.sch Tools/trace.sch
Inline/walk.o: Tools/trace.sch Var/variable.sch
Expand/expander.o: Expand/expander.sch
Expand/eps.o: Var/variable.sch Expand/expander.sch Tools/trace.sch
Expand/define.o: Var/variable.sch Expand/expander.sch Tools/trace.sch
Scan/eval.o: Var/variable.sch Tools/trace.sch
Scan/bind.o: Var/variable.sch
Scan/labels.o: Var/variable.sch
Scan/let.o: Var/variable.sch Tools/trace.sch
Scan/lexical.o: Var/variable.sch
Scan/tree.o: Var/variable.sch Scan/temporary.sch Tools/trace.sch
Scan/temporary.o: Scan/temporary.sch Var/variable.sch
Scan/definition.o: Var/variable.sch Scan/temporary.sch
Scan/walk.o: Var/variable.sch Tools/trace.sch
Heap/abstract.o: Var/variable.sch
Heap/make.o: Var/variable.sch
Heap/compact.o: Var/variable.sch Foreign/type.sch
Heap/restore.o: Var/variable.sch
Type/apply.o: Var/variable.sch Tools/trace.sch
Type/enforce.o: Tools/trace.sch Var/variable.sch
Type/type.o: Var/variable.sch Foreign/type.sch
Type/bind.o: Var/variable.sch Tools/trace.sch
Type/app.o: Var/variable.sch Tools/trace.sch Foreign/type.sch
Type/expression.o: Tools/trace.sch Var/variable.sch Foreign/type.sch
Type/walk.o: Var/variable.sch
Type/cast.o: Tools/trace.sch Foreign/type.sch
Var/pragma.o: Var/variable.sch
Var/declare.o: Var/variable.sch Expand/expander.sch
Var/variable.o: Var/variable.sch Foreign/type.sch
Var/env.o: Var/variable.sch Expand/expander.sch
Parse/foreign.o: Foreign/type.sch
Parse/statexp.o: Var/variable.sch
Parse/module.o: Tools/trace.sch
Read/inline.o: Var/variable.sch Tools/trace.sch
Read/src.o: Tools/trace.sch
Tools/alpha.o: Tools/trace.sch Var/variable.sch
Tools/beta.o: Tools/trace.sch
Tools/shape.o: Var/variable.sch 0cfa/app.sch Foreign/type.sch
Write/tree.o: Var/variable.sch
Write/expanded.o: Var/variable.sch 0cfa/app.sch Foreign/type.sch

