Changes by: Jason Hickey (jyh at cs.caltech.edu)
Date: 2003-11-08 12:25:40 -0800 (Sat, 08 Nov 2003)
Revision: 255
Log message:
Implemented the new global cache index (bug #110): a target is considered
to be up-to-date if there is an up-to-date entry in the cache with the
same dependencies and the same command text from *any* rule that has
been run. The .cmi rules have been updated as Aleksey suggested in bug
#110, that is:
%.cmi: %.ml
$(if $(NATIVE_ENABLED),\
$(OCAMLOPT) $(OCAMLOPTFLAGS) $(OCAMLPPFLAGS) $(OCAMLINCLUDES) -c $<,\
$(OCAMLC) $(OCAMLCFLAGS) $(OCAMLPPFLAGS) $(OCAMLINCLUDES) -c $<)
%.cmi: %.mli
$(OCAMLC) $(OCAMLCFLAGS) $(OCAMLPPFLAGS) $(OCAMLINCLUDES) -c $<
The change to the implementation is to add a (deps+commands->memo) index
to the cache. The performance penalty looks to be around 1-2%, not very
much.
The critical assumption is this:
Commands are functional, deterministic, and idempotent. That is, if
a command is run once with a given set of dependencies, then it will
have no effect if it is run again on unchanged dependencies.
Note, the environment is ignored. So if the environment changes in a way
that affects the build process, you will have to use omake -U.
Bumped version to 0.7.5