-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
72 lines (52 loc) · 1.94 KB
/
Copy pathMakefile
File metadata and controls
72 lines (52 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
NAME = ft_turing
SRC_DIR = src
INTF_DIR = intf
OBJ_DIR = obj
SWITCH_NAME=ft_turing_env
OCAML_VERSION=5.2.1
SRCS = Machine_error.ml Machine_validator.ml Machine.ml Machine_loader.ml Machine_printer.ml Runner.ml Main.ml
INTFS = Machine_error.mli Machine_validator.mli Machine.mli Machine_loader.mli Machine_printer.mli Runner.mli
ML_FILES = $(addprefix $(SRC_DIR)/, $(SRCS))
MLI_FILES = $(addprefix $(INTF_DIR)/, $(INTFS))
CMI_FILES = $(patsubst $(INTF_DIR)/%.mli, $(OBJ_DIR)/%.cmi, $(MLI_FILES))
CMO_FILES = $(patsubst $(SRC_DIR)/%.ml, $(OBJ_DIR)/%.cmo, $(ML_FILES))
CMX_FILES = $(patsubst $(SRC_DIR)/%.ml, $(OBJ_DIR)/%.cmx, $(ML_FILES))
OCAMLC = ocamlfind ocamlc
OCAMLOPT = ocamlfind ocamlopt
PKGS = yojson
OCAMLFLAGS = -I $(OBJ_DIR) -I $(SRC_DIR) -thread -package $(PKGS) -linkpkg
all: setup_env $(NAME)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
$(OBJ_DIR)/%.cmi: $(INTF_DIR)/%.mli | $(OBJ_DIR)
$(OCAMLC) $(OCAMLFLAGS) -c $< -o $@
$(OBJ_DIR)/%.cmo: $(SRC_DIR)/%.ml | $(OBJ_DIR)
$(OCAMLC) $(OCAMLFLAGS) -c $< -o $@
$(OBJ_DIR)/%.cmx: $(SRC_DIR)/%.ml | $(OBJ_DIR)
$(OCAMLOPT) $(OCAMLFLAGS) -c $< -o $@
$(NAME).byte: $(CMI_FILES) $(CMO_FILES)
$(OCAMLC) -o $@ $(OCAMLFLAGS) $(CMO_FILES)
$(NAME).opt: $(CMI_FILES) $(CMX_FILES)
$(OCAMLOPT) -o $@ $(OCAMLFLAGS) $(CMX_FILES)
$(NAME): $(NAME).opt
@ln -sf $(NAME).opt $(NAME)
clean:
rm -rf $(OBJ_DIR)
fclean: clean
rm -f $(NAME) $(NAME).opt $(NAME).byte
re: fclean all
setup_env:
@if ! opam switch list --short | grep -qx "$(SWITCH_NAME)"; then \
opam update -y && \
opam switch create $(SWITCH_NAME) $(OCAML_VERSION); \
eval $$(opam env --switch=$(SWITCH_NAME)) && \
opam install ocamlfind $(PKGS) --yes; \
fi
delete_env:
@if opam switch list --short | grep -qx "$(SWITCH_NAME)"; then \
echo "==> removing switch $(SWITCH_NAME)"; \
opam switch remove $(SWITCH_NAME) --yes; \
else \
echo "==> switch $(SWITCH_NAME) does not exist, nothing to remove"; \
fi
.PHONY: all clean fclean re setup_env delete_env