##########################
#
#  Main Makefile for src
#
##########################

include ../config

### Variables ##############################################################

MAKE=make 
COQMKTOP=../bin/$(ARCH)/coqmktop -srcdir .. 

### Targets ################################################################

byte: scripts images-byte
opt: scripts images-opt

scripts:
	cd launch; $(MAKE) $(COQTOOLS)

### Bytecode images

images-byte: coq.out coq_searchisos.out install

coq.out:
	cd lib/util ; $(MAKE) byte
	cd parsing ; $(MAKE) byte
	cd meta ; $(MAKE) byte
	cd constr ; $(MAKE) byte
	cd typing ; $(MAKE) byte
	cd proofs ; $(MAKE) byte
	cd env ; $(MAKE) byte
	cd tactics ; $(MAKE) byte
	$(COQMKTOP) -top -notactics -o $@

coq_searchisos.out:
	cd ../theories/ARITH; $(MAKE) g_natsyntax.cmo
	cd ../theories/ZARITH; $(MAKE) g_zsyntax.cmo
	$(COQMKTOP) -searchisos -top ../theories/ARITH/g_natsyntax.cmo ../theories/ZARITH/g_zsyntax.cmo $(ZDEBUG) -o $@

install:
	mv coq.out ../bin/$(ARCH)/coq.out
	mv coq_searchisos.out ../bin/$(ARCH)/coq_searchisos.out


### Native Code images

images-opt: coqopt.out coq_searchisos_opt.out install-coqopt

coqopt.out:
	cd lib/util ; $(MAKE) opt
	cd parsing ; $(MAKE) opt
	cd meta ; $(MAKE) opt
	cd constr ; $(MAKE) opt
	cd typing ; $(MAKE) opt 
	cd proofs ; $(MAKE) opt
	cd env ; $(MAKE) opt
	cd tactics ; $(MAKE) opt
	cd ../tactics; $(MAKE) sourceopt
	cd ../theories/ZARITH; $(MAKE) sourceopt
	cd ../theories/ARITH; $(MAKE) sourceopt
	$(COQMKTOP) -opt $(TIMEPROF) -o $@
	-$(STRIP) coqopt.out

coq_searchisos_opt.out:
	$(COQMKTOP) -searchisos -opt $(TIMEPROF) -o $@
	-$(STRIP) coq_searchisos_opt.out

install-coqopt:
	mv coqopt.out ../bin/$(ARCH)/coqopt.out
	mv coq_searchisos_opt.out ../bin/$(ARCH)/coq_searchisos_opt.out


### States

STATELIBS= -I ../states -I syntax -I ../theories/INIT -I ../tactics
COQ=../bin/$(ARCH)/coqtop $(OPT) -q -bindir ../bin/$(ARCH) -nolib \
    $(STATELIBS) -batch

barestate.coq:
	rm -f barestate.coq
	$(COQ) -nois -load-vernac-source MakeBare.v -outputstate $@

install-barestate:
	mv -f barestate.coq ../states/barestate.coq 


state.coq:
	rm -f state.coq
	$(COQ) -is barestate -load-vernac-source MakeState.v -outputstate $@

install-state:
	mv -f state.coq ../states/state.coq


tactics.coq:
	rm -f tactics.coq
	$(COQ) -is state -load-vernac-source MakeTactics.v -outputstate $@

install-tactics:
	mv -f tactics.coq ../states/tactics.coq


# Other targets

install-library:
	if test -d $(COQINSTALLPREFIX)/$(COQLIB); then : ; \
	  else $(MKDIR) $(COQINSTALLPREFIX)/$(COQLIB); fi
	$(INSTALL) launch/coq.motd.tpl $(COQLIB)/coq.motd
	cd parsing; \
	 $(INSTALL) -d pcoq.cmi coqAst.cmi q_ast.cma $(COQLIB)/src/parsing

clean:
	cd config ; $(MAKE) clean
	cd launch ; $(MAKE) clean
	cd lib/util ; $(MAKE) clean
	cd parsing ; $(MAKE) clean
	cd meta ; $(MAKE) clean
	cd constr ; $(MAKE) clean
	cd typing ; $(MAKE) clean
	cd proofs ; $(MAKE) clean
	cd env ; $(MAKE) clean
	cd tactics ; $(MAKE) clean
	rm -f coq.out coqopt.out coq_searchisos.out coq_searchisos_opt.out 
	rm -f barestate.coq state.coq tactics.coq

archclean:
	cd config ; $(MAKE) archclean
	cd launch ; $(MAKE) archclean
	cd lib/util ; $(MAKE) archclean
	cd parsing ; $(MAKE) archclean
	cd meta ; $(MAKE) archclean
	cd constr ; $(MAKE) archclean
	cd typing ; $(MAKE) archclean
	cd proofs ; $(MAKE) archclean
	cd env ; $(MAKE) archclean
	cd tactics ; $(MAKE) archclean
	rm -f coq.out coqopt.out coq_searchisos.out coq_searchisos_opt.out 

depend:
	cd config; $(MAKE) depend
	cd launch; $(MAKE) depend
	cd lib/util ; $(MAKE) depend
	cd parsing ; $(MAKE) depend
	cd meta ; $(MAKE) depend
	cd constr ; $(MAKE) depend
	cd typing ; $(MAKE) depend
	cd proofs ; $(MAKE) depend
	cd env ; $(MAKE) depend
	cd tactics ; $(MAKE) depend
