ligo/src/Makefile

349 lines
12 KiB
Makefile
Raw Normal View History

2016-09-08 21:13:10 +04:00
TZPROTOCOLPACKER:=../tezos-protocol-packer
TZCOMPILER:=../tezos-protocol-compiler
TZNODE:=../tezos-node
TZCLIENT:=../tezos-client
all: ${TZCOMPILER} ${TZNODE} ${TZCLIENT}
2017-01-02 17:02:55 +04:00
-include Makefile.local
2016-09-08 21:13:10 +04:00
include Makefile.config
2017-04-05 20:24:26 +04:00
include Makefile.files
2016-09-08 21:13:10 +04:00
2017-02-27 19:44:20 +04:00
NODEPS :=
2016-09-08 21:13:10 +04:00
############################################################################
## Protocol environment
############################################################################
.INTERMEDIATE: ${SIGS_PACKER}
.SECONDARY: ${PACKED_SIGS_V1}.ml
2016-09-08 21:13:10 +04:00
ENVIRONMENT_OBJS := ${PACKED_SIGS_V1}.cmi ${PACKED_SIGS_V1}.cmx
${ENVIRONMENT_OBJS}: PACKAGES=
${ENVIRONMENT_OBJS}: SOURCE_DIRECTORIES=${ENVIRONMENT_DIRECTORIES}
${ENVIRONMENT_OBJS}: TARGET="(tezos_protocol_environment_sigs_v1.cmx)"
${ENVIRONMENT_OBJS}: OPENED_MODULES=
${SIGS_PACKER}: ${SIGS_PACKER}.ml
2016-09-08 21:13:10 +04:00
@echo LINK $(notdir $@)
@$(OCAMLOPT) -o $@ $^
${PACKED_SIGS_V1}.ml: \
${SIGS_PACKER} $(PROTOCOL_ENV_INTFS)
2016-09-08 21:13:10 +04:00
@echo GENERATING $(notdir $@)
@${SIGS_PACKER} $(PROTOCOL_ENV_INTFS) > $@
2016-09-08 21:13:10 +04:00
${PACKED_SIGS_V1}.cmi: ${PACKED_SIGS_V1}.cmx
${PACKED_SIGS_V1}.cmx: EXTRA_OCAMLFLAGS = -nopervasives
partial-clean::
rm -f ${SIGS_PACKER}
rm -f ${PACKED_SIGS_V1}.ml
2016-09-08 21:13:10 +04:00
############################################################################
## Protocol packer
2016-09-08 21:13:10 +04:00
############################################################################
PACKER_OBJS := \
${PACKER_LIB_IMPLS:.ml=.cmx} ${PACKER_LIB_IMPLS:.ml=.ml.deps} \
${PACKER_LIB_INTFS:.mli=.cmi} ${PACKER_LIB_INTFS:.mli=.mli.deps} \
${PACKER_IMPLS:.ml=.cmx} ${PACKER_IMPLS:.ml=.ml.deps} \
2016-09-08 21:13:10 +04:00
${PACKER_OBJS}: PACKAGES=
${PACKER_OBJS}: SOURCE_DIRECTORIES=${PACKER_DIRECTORIES}
${PACKER_OBJS}: TARGET="(packer.cmxa)"
${PACKER_OBJS}: OPENED_MODULES=
packer.cmxa: ${PACKER_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
${TZPROTOCOLPACKER}: packer.cmxa ${PACKER_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@$(OCAMLOPT) -o $@ $^
clean::
rm -rf ${TZPROTOCOLPACKER}
############################################################################
## Protocol compiler (also embedded in the node)
############################################################################
2016-09-08 21:13:10 +04:00
COMPILER_OBJS := \
${COMPILER_IMPLS:.ml=.cmx} ${COMPILER_IMPLS:.ml=.ml.deps} \
${COMPILER_LIB_IMPLS:.ml=.cmx} ${COMPILER_LIB_IMPLS:.ml=.ml.deps} \
${COMPILER_LIB_INTFS:.mli=.cmi} ${COMPILER_LIB_INTFS:.mli=.mli.deps} \
${TZCOMPILER}
${COMPILER_OBJS}: PACKAGES=${COMPILER_PACKAGES}
${COMPILER_OBJS}: SOURCE_DIRECTORIES=${COMPILER_SOURCE_DIRECTORIES}
${COMPILER_OBJS}: TARGET="(compiler.cmxa)"
${COMPILER_OBJS}: OPENED_MODULES=${COMPILER_OPENED_MODULES}
compiler/tezos_protocol_registerer.cmi: EXTRA_OCAMLFLAGS = -opaque
2016-09-08 21:13:10 +04:00
.INTERMEDIATE: compiler/tezos_compiler_embedded_cmis.ml
compiler/tezos_compiler_embedded_cmis.cmx: compiler/tezos_compiler_embedded_cmis.cmi
compiler/tezos_compiler_embedded_cmis.ml: ${COMPILER_EMBEDDED_CMIS}
2016-09-08 21:13:10 +04:00
@echo OCAMLRES ${TARGET} $(notdir $@)
@$(OCAMLRES) -format ocaml -o $@ $^
compiler.cmxa: ${COMPILER_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
${TZCOMPILER}: packer.cmxa minutils.cmxa utils.cmxa compiler.cmxa ${COMPILER_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@$(OCAMLOPT) -linkpkg $(patsubst %, -package %, $(COMPILER_PACKAGES)) -o $@ $^
2017-02-27 19:44:20 +04:00
partial-clean::
rm -f compiler/tezos_compiler_embedded_cmis.ml
clean::
rm -f ${TZCOMPILER}
2016-09-08 21:13:10 +04:00
############################################################################
## Minimal utils library compatible with js_of_ocaml
############################################################################
MINUTILS_OBJS := \
${MINUTILS_LIB_IMPLS:.ml=.cmx} ${MINUTILS_LIB_IMPLS:.ml=.ml.deps} \
${MINUTILS_LIB_INTFS:.mli=.cmi} ${MINUTILS_LIB_INTFS:.mli=.mli.deps}
${MINUTILS_OBJS}: PACKAGES=${MINUTILS_PACKAGES}
2017-04-05 20:24:26 +04:00
${MINUTILS_OBJS}: SOURCE_DIRECTORIES=${MINUTILS_SOURCE_DIRECTORIES}
${MINUTILS_OBJS}: TARGET="(minutils.cmxa)"
2017-04-05 20:24:26 +04:00
${MINUTILS_OBJS}: OPENED_MODULES=${MINUTILS_OPENED_MODULES}
minutils.cmxa: ${MINUTILS_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
2016-09-08 21:13:10 +04:00
2016-12-02 02:20:23 +04:00
MINUTILS_OBJS_BYTECODE := \
${MINUTILS_LIB_IMPLS:.ml=.cmo} ${MINUTILS_LIB_IMPLS:.ml=.ml.deps.byte}
${MINUTILS_OBJS_BYTECODE}: PACKAGES=${MINUTILS_PACKAGES}
2017-04-05 20:24:26 +04:00
${MINUTILS_OBJS_BYTECODE}: SOURCE_DIRECTORIES=${MINUTILS_SOURCE_DIRECTORIES}
2016-12-02 02:20:23 +04:00
${MINUTILS_OBJS_BYTECODE}: TARGET="(minutils.cma)"
2017-04-05 20:24:26 +04:00
${MINUTILS_OBJS_BYTECODE}: OPENED_MODULES=${MINUTILS_OPENED_MODULES}
2016-12-02 02:20:23 +04:00
minutils.cma: ${MINUTILS_LIB_IMPLS:.ml=.cmo}
@echo LINK $(notdir $@)
@${OCAMLC} ${OCAMLFLAGS} -a -o $@ $^
2016-09-08 21:13:10 +04:00
############################################################################
## Utils library
2016-09-08 21:13:10 +04:00
############################################################################
UTILS_OBJS := \
${UTILS_LIB_IMPLS:.ml=.cmx} ${UTILS_LIB_IMPLS:.ml=.ml.deps} \
${UTILS_LIB_INTFS:.mli=.cmi} ${UTILS_LIB_INTFS:.mli=.mli.deps}
${UTILS_OBJS}: PACKAGES=${UTILS_PACKAGES}
2017-04-05 20:24:26 +04:00
${UTILS_OBJS}: SOURCE_DIRECTORIES=${UTILS_SOURCE_DIRECTORIES}
2016-09-08 21:13:10 +04:00
${UTILS_OBJS}: TARGET="(utils.cmxa)"
2017-04-05 20:24:26 +04:00
${UTILS_OBJS}: OPENED_MODULES=${UTILS_OPENED_MODULES}
2016-09-08 21:13:10 +04:00
utils.cmxa: ${UTILS_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
utils.top: DEVFLAGS=
utils.top:
( $(patsubst %, echo "#require \"%\";;" ; ,${UTILS_PACKAGES}) ) > .ocamlinit.utils
( $(patsubst %, echo "#mod_use \"%\";;" ; ,${MINUTILS_LIB_IMPLS} ${UTILS_LIB_IMPLS}) ) >> .ocamlinit.utils
2017-08-02 17:39:10 +04:00
utop -init .ocamlinit.utils ${UTOPFLAGS}
partial-clean::
-rm -f .ocamlinit.utils
2016-09-08 21:13:10 +04:00
############################################################################
## Node program
############################################################################
NODE_OBJS := \
${NODE_IMPLS:.ml=.cmx} ${NODE_IMPLS:.ml=.ml.deps} \
${NODE_INTFS:.mli=.cmi} ${NODE_INTFS:.mli=.mli.deps} \
2016-09-08 21:13:10 +04:00
${NODE_LIB_IMPLS:.ml=.cmx} ${NODE_LIB_IMPLS:.ml=.ml.deps} \
${NODE_LIB_INTFS:.mli=.cmi} ${NODE_LIB_INTFS:.mli=.mli.deps} \
${TZNODE}
${NODE_OBJS}: PACKAGES=${NODE_PACKAGES}
2017-04-05 20:24:26 +04:00
${NODE_OBJS}: SOURCE_DIRECTORIES=${NODE_SOURCE_DIRECTORIES}
2016-09-08 21:13:10 +04:00
${NODE_OBJS}: TARGET="(node.cmxa)"
2017-04-05 20:24:26 +04:00
${NODE_OBJS}: OPENED_MODULES=${NODE_OPENED_MODULES}
2016-09-08 21:13:10 +04:00
${NODE_IMPLS:.ml=.cmx} ${NODE_IMPLS:.ml=.ml.deps} \
${NODE_INTFS:.mli=.cmi} ${NODE_INTFS:.mli=.mli.deps}: TARGET="(tezos-node)"
node/updater/environment.cmi: node/updater/environment.cmx
2016-09-08 21:13:10 +04:00
node.cmxa: ${NODE_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
2017-04-05 20:24:26 +04:00
${NODE_IMPLS:.ml=.cmx}: ${EMBEDDED_NODE_PROTOCOLS}
${TZNODE}: packer.cmxa minutils.cmxa utils.cmxa compiler.cmxa node.cmxa ${EMBEDDED_NODE_PROTOCOLS} ${NODE_IMPLS:.ml=.cmx}
2016-09-08 21:13:10 +04:00
@echo LINK $(notdir $@)
@${OCAMLOPT} -linkall -linkpkg ${OCAMLFLAGS} -o $@ $^
partial-clean::
2016-09-08 21:13:10 +04:00
-rm -f proto/*.cm* proto/*.a
node.top: DEVFLAGS=
2017-02-27 19:44:20 +04:00
node.top: ${MINUTILS_LIB_IMPLS} ${UTILS_LIB_IMPLS} ${COMPILER_LIB_IMPLS} ${FULL_NODE_LIB_IMPLS}
( $(patsubst %, echo "#require \"%\";;" ; ,${NODE_PACKAGES}) ) > .ocamlinit.node
( $(patsubst %, echo "#mod_use \"%\";;" ; ,${MINUTILS_LIB_IMPLS} ${UTILS_LIB_IMPLS}) ) >> .ocamlinit.node
2017-08-19 14:41:29 +04:00
( $(patsubst %, echo "open %;;" ; ,${NODE_OPENED_MODULES}) ) >> .ocamlinit.node
2017-02-27 19:44:20 +04:00
( $(patsubst %, echo "#mod_use \"%\";;" ; ,${COMPILER_LIB_IMPLS} ${FULL_NODE_LIB_IMPLS}) ) >> .ocamlinit.node
2017-08-19 14:41:29 +04:00
utop -I +compiler-libs ocamlcommon.cma -init .ocamlinit.node ${UTOPFLAGS}
## HACK: the explicit loading of `ocamlcommon.cma` is here to
## circumvent a bug in utop. https://github.com/diml/utop/issues/213
2016-09-08 21:13:10 +04:00
clean::
rm -f ${TZNODE}
partial-clean::
-rm -f .ocamlinit.node
2016-09-08 21:13:10 +04:00
############################################################################
## Client program
############################################################################
CLIENT_OBJS := \
${CLIENT_IMPLS:.ml=.cmx} ${CLIENT_IMPLS:.ml=.ml.deps} \
${CLIENT_LIB_IMPLS:.ml=.cmx} ${CLIENT_LIB_IMPLS:.ml=.ml.deps} \
${CLIENT_LIB_INTFS:.mli=.cmi} ${CLIENT_LIB_INTFS:.mli=.mli.deps} \
2017-04-05 20:24:26 +04:00
${TZCLIENT}
2016-09-08 21:13:10 +04:00
${CLIENT_OBJS}: PACKAGES=${CLIENT_PACKAGES}
2017-04-05 20:24:26 +04:00
${CLIENT_OBJS}: SOURCE_DIRECTORIES=${CLIENT_SOURCE_DIRECTORIES}
${CLIENT_OBJS}: OPENED_MODULES=${CLIENT_OPENED_MODULES}
2016-09-08 21:13:10 +04:00
2016-12-02 02:20:23 +04:00
${CLIENT_LIB_IMPLS:.ml=.cmx} ${CLIENT_LIB_IMPLS:.ml=.ml.deps}: TARGET="(client.cmxa)"
${CLIENT_LIB_INTFS:.mli=.cmi} ${CLIENT_LIB_INTFS:.mli=.mli.deps}: TARGET="(client.cmxa)"
2016-09-08 21:13:10 +04:00
client.cmxa: ${CLIENT_LIB_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} ${OCAMLFLAGS} -a -o $@ $^
2017-04-05 20:24:26 +04:00
${EMBEDDED_CLIENT_VERSIONS}: client.cmxa ${EMBEDDED_CLIENT_PROTOCOLS}
2016-12-02 02:20:23 +04:00
${CLIENT_IMPLS:.ml=.cmx}: ${EMBEDDED_CLIENT_VERSIONS}
${TZCLIENT}: packer.cmxa minutils.cmxa utils.cmxa compiler.cmxa node.cmxa \
2016-12-02 02:20:23 +04:00
client.cmxa \
${EMBEDDED_CLIENT_PROTOCOLS} \
${EMBEDDED_CLIENT_VERSIONS} \
${CLIENT_IMPLS:.ml=.cmx}
@echo LINK $(notdir $@)
@${OCAMLOPT} -linkall -linkpkg ${OCAMLFLAGS} -o $@ $^
2016-12-02 02:20:23 +04:00
2016-09-08 21:13:10 +04:00
clean::
2017-04-05 20:24:26 +04:00
-rm -f ${TZCLIENT}
2017-01-02 16:33:11 +04:00
############################################################################
2016-09-08 21:13:10 +04:00
## Generic rules
2017-01-02 16:33:11 +04:00
############################################################################
2016-09-08 21:13:10 +04:00
%.cmx: %.ml
@echo OCAMLOPT ${TARGET} $(notdir $@)
@$(OCAMLOPT) ${OCAMLFLAGS} -c $<
%.cmo: %.ml
2016-12-02 02:20:23 +04:00
@echo OCAMLC ${TARGET} $(notdir $@)
2016-09-08 21:13:10 +04:00
@$(OCAMLC) ${OCAMLFLAGS} -c $<
%.cmi: %.mli
@echo OCAMLOPT ${TARGET} $(notdir $@)
@$(OCAMLOPT) ${OCAMLFLAGS} -c $<
## Cleaning
.PHONY: clean partial-clean
clean:: partial-clean
partial-clean::
-find . \( -name \*.cm\* -or -name \*.cmp -or -name \*.out -or -name \*~ -or -name \*.o -or -name \*.a \) -delete
2016-09-08 21:13:10 +04:00
## Dependencies
2017-02-27 19:44:20 +04:00
NO_DEPS += \
compiler/tezos_compiler_embedded_cmis.ml \
compiler/tezos_compiler_embedded_cmis.mli
compiler/tezos_compiler_embedded_cmis.cmx compiler/tezos_compiler_embedded_cmis.cmi: OPENED_MODULES=
2016-09-08 21:13:10 +04:00
ifneq ($(MAKECMDGOALS),clean)
2016-12-02 02:20:23 +04:00
include .depend
2016-09-08 21:13:10 +04:00
endif
2017-01-02 16:33:11 +04:00
DEPENDS := $(filter-out $(NO_DEPS), \
$(PACKER_LIB_INTFS) $(PACKER_LIB_IMPLS) $(PACKER_IMPLS) \
2017-01-02 16:33:11 +04:00
$(MINUTILS_LIB_INTFS) $(MINUTILS_LIB_IMPLS) \
$(UTILS_LIB_INTFS) $(UTILS_LIB_IMPLS) \
${COMPILER_PRECOMPILED_INTFS} \
2017-01-02 16:33:11 +04:00
$(COMPILER_LIB_INTFS) $(COMPILER_LIB_IMPLS) \
$(COMPILER_INTFS) $(COMPILER_IMPLS) \
$(NODE_LIB_INTFS) $(NODE_LIB_IMPLS) \
$(NODE_INTFS) $(NODE_IMPLS) \
$(CLIENT_LIB_INTFS) $(CLIENT_LIB_IMPLS) \
$(CLIENT_INTFS) $(CLIENT_IMPLS) \
$(ATTACKER_LIB_INTFS) $(ATTACKER_LIB_IMPLS) \
$(ATTACKER_INTFS) $(ATTACKER_IMPLS) \
)
DEPENDS_BYTECODE := \
$(filter-out $(NO_DEPS), $(MINUTILS_LIB_INTFS) $(MINUTILS_LIB_IMPLS))
2016-09-08 21:13:10 +04:00
predepend: ${PACKED_SIGS_V1}.ml
2016-09-08 21:13:10 +04:00
compiler/tezos_compiler.cmo compiler/tezos_compiler.cmx: \
compiler/tezos_compiler_embedded_cmis.cmi compiler/tezos_compiler_embedded_cmis.cmx
2016-09-08 21:13:10 +04:00
2016-12-02 02:20:23 +04:00
.SECONDARY: $(patsubst %,%.deps,${DEPENDS}) $(patsubst %,%.deps.byte,${DEPENDS_BYTECODE})
.depend: $(patsubst %,%.deps,${DEPENDS}) $(patsubst %,%.deps.byte,${DEPENDS_BYTECODE})
2016-09-08 21:13:10 +04:00
@cat $^ > .depend
%.ml.deps: %.ml | predepend
@echo OCAMLDEP ${TARGET} $(notdir $^)
@$(OCAMLDEP) -native $(INCLUDES) $^ > $@
%.mli.deps: %.mli | predepend
@echo OCAMLDEP ${TARGET} $(notdir $^)
@$(OCAMLDEP) -native $(INCLUDES) $^ > $@
2016-12-02 02:20:23 +04:00
%.ml.deps.byte: %.ml | predepend
@echo OCAMLDEP ${TARGET} $(notdir $^)
@$(OCAMLDEP) $(INCLUDES) $^ > $@
%.mli.deps.byte: %.mli | predepend
@echo OCAMLDEP ${TARGET} $(notdir $^)
@$(OCAMLDEP) $(INCLUDES) $^ > $@
2016-09-08 21:13:10 +04:00
partial-clean::
2016-09-08 21:13:10 +04:00
-rm -f .depend
-find . \( -name \*.mli.deps -or -name \*.ml.deps \) -delete
-find . \( -name \*.mli.deps.byte -or -name \*.ml.deps.byte \) -delete
## Embedded protocol modules
.SECONDEXPANSION:
proto/tezos_embedded_protocol_%.cmx: \
${TZCOMPILER} \
proto/%/TEZOS_PROTOCOL \
$$(wildcard proto/%/*.ml) \
$$(wildcard proto/%/*.mli)
@echo "TZCOMPILER (tezos_protocol_$*.cmx)"
@${TZCOMPILER} -static ${DEVFLAGS} \
proto/tezos_embedded_protocol_$* proto/$*
2017-04-05 20:24:26 +04:00
partial-clean::
-rm -rf ${EMBEDDED_NODE_PROTOCOLS}
2017-04-05 20:24:26 +04:00
## Embedded client protocol modules
client/embedded/client_%.cmx: \
$(patsubst %.ml, %.cmx, $(NODE_LIB_IMPLS) $(CLIENT_LIB_IMPLS)) \
proto/tezos_embedded_protocol_%.cmx \
2017-09-13 17:06:48 +04:00
$$(shell find client/embedded/% \( -name _tzbuild \) -prune -or \( -name \*.ml -print -or -name \*.mli -print \))
2017-04-05 20:24:26 +04:00
@$(MAKE) -C client/embedded/$* ../client_$*.cmx
client/embedded/client_genesis.cmx: \
client/embedded/client_alpha.cmx
2017-04-05 20:24:26 +04:00
partial-clean::
-for d in $$(ls -d client/embedded/*/) ; do make clean -C $$d ; done
-rm -f client/embedded/*.cm* client/embedded/*.o