-OC = ocamlopt
-OCMKLIB = ocamlmklib
-
+# Toolchain Configuration
+#-------------------------------------------------------------------------------
+ifeq ($(NATIVE), 1)
+ OC = ocamlopt
+ OCFLAGS =
+ MKLIB = ocamlmklib
+ MKLIBFLAGS = -custom
+ OBJEXT = cmx
+ LIBEXT = cmxa
+else
+ OC = ocamlc
+ OCFLAGS =
+ MKLIB = ocamlmklib
+ MKLIBFLAGS = -custom
+ OBJEXT = cmo
+ LIBEXT = cma
+endif
+
+# Target Definitions
+#-------------------------------------------------------------------------------
.PHONY: all clean
-env.cmxa: env.cmx envprims.o
-tide: env.cmxa tide.cmx
-
all: tide
clean:
- $(RM) *.cm* *.o *.a
+ $(RM) tide *.cm* *.o *.a
+
+env.$(LIBEXT): env.$(OBJEXT) envprims.o
+tide: env.$(LIBEXT) tide.$(OBJEXT)
+# Implicit Rule Definitions
+#-------------------------------------------------------------------------------
%:
- $(OC) -o $@ $^ -I .
+ $(OC) $(OCFLAGS) -o $@ $^ -I .
-%.cmxa:
- $(OCMKLIB) -custom -o $* $^
+%.$(LIBEXT):
+ $(MKLIB) $(MKLIBFLAGS) $(OCFLAGS) -o $* $^
-%.cmx: %.ml
- $(OC) -c -o $@ $^
+%.$(OBJEXT): %.ml
+ $(OC) $(OCFLAGS) -c -o $@ $^
%.o: %.c
$(OC) $(OCFLAGS) -c -o $@ $^
-
(* Environment variable management routines *)
-external set : string -> string -> int = "caml_env_set"
-external get : string -> string = "caml_env_get"
-external unset : string -> int = "caml_env_unset"
+external set : string -> string -> int = "env_set"
+external get : string -> string = "env_get"
+external unset : string -> int = "env_unset"
#include <caml/custom.h>
#include <stdlib.h>
-CAMLprim value caml_env_set(value var, value val) {
+CAMLprim value env_set(value var, value val) {
CAMLparam2(var, val);
puts("foo");
CAMLreturn(Val_int(0));
}
-CAMLprim value caml_env_get(value var) {
+CAMLprim value env_get(value var) {
CAMLparam1(var);
puts("bar");
CAMLreturn(caml_copy_string(""));
}
-CAMLprim value caml_env_unset(value var) {
+CAMLprim value env_unset(value var) {
CAMLparam1(var);
puts("baz");
CAMLreturn(Val_int(0));
open Env
+open Printf
let () =
let foo = Env.set "foo" "bar" in