include $(TOP)/etc/$(MACHINE).mk
include $(TOP)/etc/libraries.mk

LOCAL_OBJ  = ablorder/sl_order.o			\
             bddorder/bdd_order.o			\
             compil/lax_param.o compil/sl_util.o	\
             compil/sl_compile.o			\
             facto/jacoX.o facto/cliqueZ.o facto/bdd2.o	\
	     facto/optim.o facto/sl_DC.o		\
	     facto/sl_facto.o facto/optimexpr.o		\
             fpgasce/act1.o fpgasce/annealing.o		\
             fpgasce/bool2act.o fpgasce/bool2xil.o	\
             fpmenu/fp_system.o				\
             fpgasce/fp_util.o fpgasce/fpga.o		\
             fpgasce/genact1.o fpgasce/genx3000.o	\
             fpgasce/lut.o fpgasce/mapp3000.o		\
             fpgasce/mappAct1.o fpgasce/x3000.o		\
	     fpgasce/x4000.o				\
             fpmenu/auvol.o fpmenu/fp_menu.o		\
	     mapping/generic.o mapping/compile.o	\
	     mapping/display.o mapping/oper.o		\
	     mapping/util.o mapping/regles.o		\
	     mapping/cout.o				\
             param/sl_param.o				\
             prepar/prep.o prepar/carac.o		\
	     prepar/bib.o prepar/compact.o		\
             proof/proof_util.o

LCA_OBJ	=    lca_vbe/lca2vbe.o				\
             lca_vbe/lex.o				\
             lca_vbe/y.tab.o

LOCAL_CFLAGS = $(CFLAGS)
LOCAL_CPPFLAGS = $(CPPFLAGS) -c

LOCAL_INC = -I$(ALLIANCE_INCLUDE) \
            -DMUT_H='<$(MUT_H)>' \
            -DMLO_H='<$(MLO_H)>' \
            -DBEH_H='<$(BEH_H)>' \
            -DLOG_H='<$(LOG_H)>' \
            -DBVL_H='<$(BVL_H)>' \
            -DBHL_H='<$(BHL_H)>' \
	    -DIAC_H='<$(IAC_H)>' \
            -DICU_H='<$(ICU_H)>' \
            -DICN_H='<$(ICN_H)>' \
            -DLOG_H='<$(LOG_H)>'


LOCAL_LIB = -L$(ALLIANCE_LIB) \
	    $(MGN_L) \
            $(MPU_L) \
            $(MLU_L) \
            $(MMG_L) \
            $(MCP_L) \
            $(MCL_L) \
            $(MAP_L) \
            $(MAL_L) \
            $(MHL_L) \
            $(MVL_L) \
            $(MSL_L) \
            $(MEL_L) \
            $(MPH_L) \
            $(MLO_L) \
            $(BVL_L) \
            $(BEH_L) \
            $(ICU_L) \
            $(ICA_L) \
            $(ICC_L) \
            $(ICN_L) \
            $(LOG_L) \
	    $(MUT_L)

LOCAL_CFLAGS = $(ALC_INC) -DALC=$(ALLIANCE_VERSION) -g

all : ../bin/alligator ../bin/lca2vbe

../bin/alligator : $(LOCAL_OBJ)
	$(CC) -o alligator $(LOCAL_CFLAGS) $(LOCAL_OBJ) $(LOCAL_LIB) -lm
	$(MV) alligator ../bin

../bin/lca2vbe : $(LCA_OBJ)
	$(CC) -o lca2vbe $(LCA_OBJ) $(LOCAL_LIB)
	$(MV) lca2vbe ../bin

ablorder/sl_order.o: ablorder/sl_order.c ablorder/sl_order.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) ablorder/sl_order.c
	$(MV) sl_order.o ablorder/

bddorder/bdd_order.o: bddorder/bdd_order.c bddorder/bdd_order.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) bddorder/bdd_order.c
	$(MV) bdd_order.o bddorder/

compil/sl_util.o: compil/sl_util.c compil/sl_util.h mapping/types.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) compil/sl_util.c
	$(MV) sl_util.o compil/

compil/lax_param.o: compil/lax_param.c compil/lax_param.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) compil/lax_param.c
	$(MV) lax_param.o compil/

compil/sl_compile.o: compil/sl_compile.c 
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) compil/sl_compile.c
	$(MV) sl_compile.o compil/

facto/bdd2.o: facto/bdd2.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/bdd2.c
	$(MV) bdd2.o facto/

facto/cliqueZ.o: facto/cliqueZ.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/cliqueZ.c
	$(MV) cliqueZ.o facto/

facto/jacoX.o: facto/jacoX.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/jacoX.c
	$(MV) jacoX.o facto/

facto/optim.o: facto/optim.c facto/optim.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/optim.c
	$(MV) optim.o facto/

facto/optimexpr.o: facto/optimexpr.c facto/optimexpr.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/optimexpr.c
	$(MV) optimexpr.o facto/

facto/sl_DC.o: facto/sl_DC.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/sl_DC.c
	$(MV) sl_DC.o facto/

facto/sl_facto.o: facto/sl_facto.c facto/sl_facto.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) facto/sl_facto.c
	$(MV) sl_facto.o facto/

fpgasce/act1.o: fpgasce/act1.c fpgasce/act1.h fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/act1.c
	$(MV) act1.o fpgasce/

fpgasce/annealing.o: fpgasce/annealing.c fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/annealing.c
	$(MV) annealing.o fpgasce/

fpgasce/bool2act.o: fpgasce/bool2act.c fpgasce/bool2act.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/bool2act.c
	$(MV) bool2act.o fpgasce/

fpgasce/bool2xil.o: fpgasce/bool2xil.c fpgasce/bool2xil.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/bool2xil.c
	$(MV) bool2xil.o fpgasce/

fpgasce/fp_util.o: fpgasce/fp_util.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/fp_util.c
	$(MV) fp_util.o fpgasce/

fpgasce/fpga.o: fpgasce/fpga.c fpgasce/fpga.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/fpga.c
	$(MV) fpga.o fpgasce/

fpgasce/genact1.o: fpgasce/genact1.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/genact1.c
	$(MV) genact1.o fpgasce/

fpgasce/genx3000.o: fpgasce/genx3000.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/genx3000.c
	$(MV) genx3000.o fpgasce/

fpgasce/lut.o: fpgasce/lut.c fpgasce/fpga.h fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/lut.c
	$(MV) lut.o fpgasce/

fpgasce/mapp3000.o: fpgasce/mapp3000.c fpgasce/mapp3000.h fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/mapp3000.c
	$(MV) mapp3000.o fpgasce/

fpgasce/mappAct1.o: fpgasce/mappAct1.c fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/mappAct1.c
	$(MV) mappAct1.o fpgasce/

fpgasce/x3000.o: fpgasce/x3000.c fpgasce/fpga.h fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/x3000.c
	$(MV) x3000.o fpgasce/

fpgasce/x4000.o: fpgasce/x4000.c fpgasce/fpga.h fpgasce/fp_type.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpgasce/x4000.c
	$(MV) x4000.o fpgasce/

fpmenu/auvol.o: fpmenu/auvol.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpmenu/auvol.c
	$(MV) auvol.o fpmenu/

fpmenu/fp_menu.o: fpmenu/fp_menu.c fpmenu/fp_menu.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) fpmenu/fp_menu.c
	$(MV) fp_menu.o fpmenu/

fpmenu/fp_system.o: fpmenu/fp_system.c
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) -DALLIANCE_VERSION=$(ALLIANCE_VERSION) fpmenu/fp_system.c
	$(MV) fp_system.o fpmenu/

mapping/compile.o: mapping/compile.c mapping/compile.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/compile.c
	$(MV) compile.o mapping/

mapping/cout.o: mapping/cout.c mapping/cout.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/cout.c
	$(MV) cout.o mapping/

mapping/display.o: mapping/display.c mapping/display.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/display.c
	$(MV) display.o mapping/

mapping/generic.o: mapping/generic.c mapping/generic.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/generic.c
	$(MV) generic.o mapping/

mapping/oper.o: mapping/oper.c mapping/oper.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/oper.c
	$(MV) oper.o mapping/

mapping/regles.o: mapping/regles.c mapping/regles.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/regles.c
	$(MV) regles.o mapping/

mapping/util.o: mapping/util.c mapping/util.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) mapping/util.c
	$(MV) util.o mapping/

param/sl_param.o: param/sl_param.c param/sl_param.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) param/sl_param.c
	$(MV) sl_param.o param/

prepar/bib.o: prepar/bib.c prepar/bib.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) prepar/bib.c
	$(MV) bib.o prepar/

prepar/carac.o: prepar/carac.c prepar/carac.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) prepar/carac.c
	$(MV) carac.o prepar/

prepar/compact.o: prepar/compact.c 
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) prepar/compact.c
	$(MV) compact.o prepar/

prepar/prep.o: prepar/prep.c 
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) prepar/prep.c
	$(MV) prep.o prepar/

proof/proof_util.o: proof/proof_util.c proof/proof.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) proof/proof_util.c
	$(MV) proof_util.o proof/

lca_vbe/lca2vbe.o: lca_vbe/lca2vbe.c lca_vbe/lca2vbe.h 
	$(CC) -g $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) lca_vbe/lca2vbe.c
	$(MV) lca2vbe.o lca_vbe/

lca_vbe/lex.o : lca_vbe/lex.c lca_vbe/lex.h lca_vbe/y.tab.h
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) -c lca_vbe/lex.c
	$(MV) lex.o lca_vbe/

lca_vbe/y.tab.o lca_vbe/y.tab.h : lca_vbe/abl.y 
	$(YACC) $(YACCFLAGS) -d lca_vbe/abl.y
	$(CC) $(LOCAL_CPPFLAGS) $(LOCAL_INC) $(LOCAL_CFLAGS) -c lca_vbe/y.tab.c
	$(MV) y.tab.o lca_vbe/

distrib : ../bin/alligator ../bin/lca2vbe
	@$(TOUCH) distrib
	@if [ -f ../../bin/INSTALLED ] ; then $(RM) ../../bin/INSTALLED ; else exit 0 ; fi

clean :
	-@$(RM) -f $(LOCAL_OBJ) > /dev/null 2>&1
	-@$(RM) -f distrib > /dev/null 2>&1
	-@$(RM) -f ../bin/alligator ../bin/lca2vbe > /dev/null 2>&1


