STEPS = step0_repl.ml step1_read_print.ml step2_eval.ml step3_env.ml
MODULES = types.ml reader.ml printer.ml env.ml
-LIBS = str.cma
+LIBS = str.cmxa
+MAL_LIB = mal_lib.cmxa
STEP_BINS = $(STEPS:%.ml=%)
LAST_STEP_BIN = $(word $(words $(STEP_BINS)),$(STEP_BINS))
-MODULE_BINS = $(MODULES:%.ml=%.cmo)
all: $(STEP_BINS) mal
mal: $(LAST_STEP_BIN)
cp $< $@
-repl: $(MODULES)
- rlwrap ocaml $(LIBS) $(MODULE_BINS)
+# ocaml repl apparently needs bytecode, not native, compilation.
+# Just do it all right here:
+repl:
+ ocamlc -c $(LIBS:%.cmxa=%.cma) $(MODULES) $(STEPS)
+ rlwrap ocaml $(LIBS:%.cmxa=%.cma) $(MODULES:%.ml=%.cmo)
-$(STEP_BINS): %: %.ml $(MODULES)
- ocamlc $(LIBS) $(MODULES) $< -o $@
+$(MAL_LIB): $(MODULES)
+ ocamlopt -a $(MODULES) -o $@
+
+$(STEP_BINS): %: %.ml $(MAL_LIB)
+ ocamlopt $(LIBS) $(MAL_LIB) $< -o $@
clean:
- rm -f $(STEP_BINS) mal *.cmi *.cmo
+ rm -f $(STEP_BINS) mal mal_lib.* *.cmo *.cmx *.cmi *.o
+
+.PHONY: all repl clean