Ocaml: Finally fix race conditions in compilation
authorChouser <chouser@n01se.net>
Fri, 23 Jan 2015 21:55:06 +0000 (16:55 -0500)
committerChouser <chouser@n01se.net>
Fri, 30 Jan 2015 17:54:42 +0000 (12:54 -0500)
Also, use native compilation for everything except Ocaml REPL.

.gitignore
ocaml/Makefile

index 49aa62f..07d7921 100644 (file)
@@ -31,6 +31,9 @@ java/dependency-reduced-pom.xml
 ocaml/*.cmi
 ocaml/*.cmo
 ocaml/*.swp
+ocaml/*.cmx
+ocaml/*.o
+ocaml/mal_lib.*
 rust/target/
 rust/mal
 rust/Cargo.lock
index f7df3a7..5e8b62a 100644 (file)
@@ -1,21 +1,29 @@
 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