#################################################################################
#                                                                               #
# Makefile for "Formalizing Type Environments in weak HOAS"                     #
# Authors: Alberto Ciaffaglione and Ivan Scagnetto                              #
# Date: 31 August 2014                                                          #
#                                                                               #
#################################################################################
#                                                                               #
# Instructions to compile:                                                      #
#                                                                               #
# 1) 'make' or 'make all' compiles everything                                   #
# 2) 'make systemF' compiles the syntax of F< pure types and subtyping versions #
#                   with records                                                #
# 3) 'make records' compiles records' properties                                #
# 4) 'make challenge1B' compiles part 1B of the POPLmark challenge              #
# Note: if your system supports native code, you can add the suffix '-opt' to   #
#       the previous targets, in order to carry out a native code               #
#       compilation ('make opt' compiles the whole stuff in native code).       #
# 5) 'make clean' deletes all *.vo and *.glob files                             #
#                                                                               #
#################################################################################

.PHONY: all opt systemF systemF-opt records records-opt challenge1B challenge 1B-opt clean

all: index.vo

opt:
	make all CODE="-opt"

systemF: deep_defB.vo

systemF-opt:
	make systemF CODE="-opt"

records: records.vo

records-opt:
	make records CODE="-opt"

challenge1B: challenge_1B.vo

challenge1B-opt:
	make challenge1B CODE="-opt"

syntaxB.vo: syntaxB.v
	coqc -q $(CODE) syntaxB.v

deep_defB.vo: syntaxB.vo deep_defB.v
	coqc -q $(CODE) deep_defB.v

records.vo: deep_defB.vo records.v
	coqc -q $(CODE) records.v

ToCB.vo: syntaxB.vo ToCB.v
	coqc -q $(CODE) ToCB.v

ToC_theoryB.vo: ToCB.vo ToC_theoryB.v
	coqc -q $(CODE) ToC_theoryB.v

deep_envB.vo: ToCB.vo records.vo deep_envB.v
	coqc -q $(CODE) deep_envB.v

deep_env_propB.vo: deep_envB.vo deep_env_propB.v
	coqc -q $(CODE) deep_env_propB.v

challenge_1B.vo: ToC_theoryB.vo deep_env_propB.vo challenge_1B.v
	coqc -q $(CODE) challenge_1B.v

index.vo: challenge_1B.vo index.v
	coqc -q $(CODE) index.v

clean:
	rm -f *.vo *.glob
