Skip to content

Commit

Permalink
build using dune (fix #20)
Browse files Browse the repository at this point in the history
  • Loading branch information
gares committed Jan 9, 2019
1 parent f7705f1 commit ad3ef7a
Show file tree
Hide file tree
Showing 28 changed files with 295 additions and 770 deletions.
20 changes: 8 additions & 12 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ matrix:
- eval $(opam env)
- opam install -j $JOBS -y $PREDEPS
- opam install -j $JOBS -y $DEPS
- make
- make -C tests run
- make byte
- dune build
- make tests

- env: TEST="linux build $OCAML_MAX"
os: linux
Expand All @@ -66,9 +65,8 @@ matrix:
- eval $(opam env)
- opam install -j $JOBS -y $PREDEPS
- opam install -j $JOBS -y $DEPS
- make
- make -C tests run
- make byte
- dune build
- make tests

- env: TEST="osx build $OCAML_MIN"
os: osx
Expand All @@ -85,9 +83,8 @@ matrix:
- eval $(opam env)
- opam install -j $JOBS -y $PREDEPS
- opam install -j $JOBS -y $DEPS
- make
- make -C tests run
- make byte
- dune build
- make tests

- env: TEST="osx build $OCAML_MAX"
os: osx
Expand All @@ -104,9 +101,8 @@ matrix:
- eval $(opam env)
- opam install -j $JOBS -y $PREDEPS
- opam install -j $JOBS -y $DEPS
- make
- make -C tests run
- make byte
- dune build
- make tests

- env: TEST="opam package installation"
os: linux
Expand Down
173 changes: 43 additions & 130 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,134 +1,47 @@
# Commands:
# make -- to compile elpi
# make install -- to install elpi using findlib
# make install-bin BIN=path -- to install the elpi REPL in $BIN
# make uninstall -- to remove elpi using findlib
# make uninstall-bin BIN=path -- to remove the elpi REPL in $BIN
# ... BYTE=yes -- to compile/install/remove byte code
#
# make git/V -- to compile elpi.git.V out of git's commit/branch/tag V
# such binary is then picked up automatically by the bench
# system as an elpi like runner
# make runners -- foreach git tag runner-V, do something like make git/V

BASE=$(shell pwd)
include Makefile.common

all: check-ocaml-ver elpi$(EXE) builtin.elpi

byte:
$(H)$(MAKE) BYTE=1 all

trace_ppx: trace_ppx.ml
$(H)$(call pp,OCAMLOPT,-o,$@)
$(H)ocamlfind ocamlopt \
-package ppx_tools_versioned \
-package ppx_tools_versioned.metaquot_402 \
-package ocaml-migrate-parsetree.driver-main \
-open Ast_402 \
-c $<
$(H)ocamlfind ocamlopt \
-package ppx_tools_versioned \
-package ppx_tools_versioned.metaquot_402 \
-package ocaml-migrate-parsetree \
-predicates custom_ppx,ppx_driver \
-linkpkg -linkall \
trace_ppx.cmx \
`ocamlfind query -predicates native \
ocaml-migrate-parsetree.driver-main -a-format` \
-o $@
$(H)cp .merlin.in .merlin
$(H)echo "FLG -ppx '$(shell pwd)/trace_ppx --as-ppx'" >> .merlin
help:
@echo 'Known targets:'
@echo
@echo ' tests runs the entire test suite'
@echo ' tests ONLY=rex runs only tests matching rex'
@echo
@echo ' git/treeish checkout treeish and build elpi.git.treeish'
@echo

INSTALL=_build/install/default
BUILD=_build/default
SHELL:=/bin/bash
TIMEOUT=60.0
RUNNERS=\
$(shell pwd)/$(INSTALL)/bin/elpi \
$(addprefix $(shell pwd)/,$(wildcard elpi.git.*)) \
$(shell if type tjsim >/dev/null 2>&1; then type -P tjsim; else echo; fi)
TIME=$(shell if type -P gtime >/dev/null 2>&1; then type -P gtime; else echo /usr/bin/time; fi)
STACK=32768

tests:
dune build $(INSTALL)/bin/elpi
dune build $(BUILD)/tests/test.exe
ulimit -s $(STACK); \
$(BUILD)/tests/test.exe \
--seed $$RANDOM \
--timeout $(TIMEOUT) \
--time=$(TIME) \
--sources=$$PWD/tests/sources/ \
--plot=$$PWD/tests/plot \
$(addprefix --name-match ,$(ONLY)) \
$(addprefix --runner , $(RUNNERS))

git/%:
$(H)rm -rf "$$PWD/elpi-$*"
$(H)mkdir "elpi-$*"
$(H)git clone -l . "elpi-$*"
$(H)cd "elpi-$*" && git checkout "$*" && make
$(H)cp "elpi-$*/elpi" "elpi.git.$*"
$(H)rm -rf "$$PWD/elpi-$*"

runners:
$(H)true $(foreach t,$(shell git branch --list 'runner*' | cut -c 3-),\
&& $(MAKE) git/$(t) && \
mv elpi.git.$(t) elpi.git.$(t:runner-%=%))

clean:
$(H)rm -f $(addprefix src/, $(TRASH))
$(H)rm -f $(TRASH)
$(H)rm -f trace_ppx.cmx elpi_config.ml
$(H)rm -f elpi.git.* trace_ppx elpi elpi.byte
$(H)rm -f src/.depends src/.depends.parser
$(H)rm -f src/.depends.byte src/.depends.parser.byte
$(H)rm -rf findlib/

dist:
$(H)git archive --format=tar --prefix=elpi-$(V)/ HEAD . \
| gzip > ../elpi-$(V).tgz

# compilation of elpi

OC_OPTIONS = -linkpkg $(OCAMLOPTIONS) $(FLAGS)

ELPI_LIBS = \
elpi_quoted_syntax.elpi elpi-checker.elpi \
utils/elpi2html.elpi

ELPI_DIST = \
$(addprefix src/,elpi_API.cmi elpi_API.mli elpi_builtin.cmi elpi_builtin.mli elpi.cmi)

ELPI_DIST_OPT = \
$(addprefix src/,elpi.cma elpi.cmxa elpi.a elpi_builtin.cmti elpi_API.cmti elpi_API.cmx elpi_API.cmo elpi_builtin.cmo elpi_builtin.cmx)

elpi$(EXE): elpi_REPL.ml elpi_config.$(CMX) findlib/elpi/META
$(H)$(call pp,$(OCNAME),-package elpi elpi_config.$(CMX) -o $@,$<)
$(H)$(OC) $(OC_OPTIONS) -package elpi elpi_config.$(CMX) -o $@ $<

elpi_config.$(CMX): elpi_config.ml elpi_config.cmi
$(H)$(call pp,$(OCNAME),-c, $<)
$(H)$(OC) $(OC_OPTIONS) -c $<

elpi_config.cmi: elpi_config.mli
$(H)$(call pp,$(OCNAME),-c, $<)
$(H)$(OC) $(OC_OPTIONS) -c $<

builtin.elpi: elpi$(EXE)
$(H)echo '%% File generated by elpi -document-builtins, do not edit' > $@
$(H)./elpi -document-builtins -q >> $@

elpi_config.ml:
$(H)echo 'let install_dir = "$(shell ocamlfind printconf destdir)/elpi"' > $@

src/%: | trace_ppx
$(H)$(MAKE) --no-print-directory -C src/ $*

src/elpi.$(CMXA): $(wildcard src/*.ml) $(wildcard src/*.mli)
findlib/elpi/META: src/elpi.$(CMXA) Makefile
$(H)rm -rf findlib/; mkdir findlib
$(H)$(MAKE) --no-print-directory -C src/ elpi.cmi # needed by ELPI_DIST
$(H)ocamlfind install -destdir $(BASE)/findlib -patch-archives \
elpi META $(ELPI_DIST) $(ELPI_LIBS) \
-optional $(ELPI_DIST_OPT)

install:
$(H)ocamlfind install -patch-archives \
elpi META $(ELPI_DIST) $(ELPI_LIBS) \
-optional $(ELPI_DIST_OPT) elpi elpi.byte
install-bin:
$(H)cp elpi$(EXE) $(BIN)

uninstall:
$(H)ocamlfind remove elpi
uninstall-bin:
$(H)rm -f $(BIN)/elpi$(EXE)


# required OCaml package
check-ocaml-ver:
$(H)ocamlfind query camlp5 > /dev/null
$(H)ocamlfind query ppx_tools_versioned > /dev/null
$(H)ocamlfind query ppx_deriving > /dev/null
$(H)ocamlfind query ocaml-migrate-parsetree.driver-main > /dev/null
$(H)ocamlfind query re.str > /dev/null
rm -rf "$$PWD/elpi-$*"
mkdir "elpi-$*"
git clone -l . "elpi-$*"
cd "elpi-$*" && git checkout "$*"
cd "elpi-$*" && \
if [ -f dune ]; then dune build --root . @install; else make; fi
cp "elpi-$*/elpi" "elpi.git.$*" || \
cp "elpi-$*/$(INSTALL)/bin/elpi" "elpi.git.$*"
rm -rf "$$PWD/elpi-$*"

.PHONY: tests all install uninstall help

.NOTPARALLEL:
34 changes: 0 additions & 34 deletions Makefile.common

This file was deleted.

5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ you can type
```
opam pin add elpi https://github.com/LPCIC/elpi.git
```
You can also clone this repository and type `make`. The build requirements
are listed at the end of the [Makefile](Makefile)
You can also clone this repository and type `dune build`.

#### Syntax highlight in vim

Expand Down Expand Up @@ -126,7 +125,7 @@ by Miller and Nadathur is highly recommended and covers standard λProlog.

The extensions to λProlog implemented in ELPI are described in the
[ELPI](ELPI.md) file, built-in predicates are documented in
[builtin](builtin.elpi).
[builtin](src/builtin.elpi).

There is a [short paper](https://hal.inria.fr/hal-01176856/) describing
the implementation of the interpreter, in particular how it deals with
Expand Down
7 changes: 7 additions & 0 deletions dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(executable
(name elpi_REPL)
(public_name elpi)
(libraries elpi)
(modules elpi_REPL)
)

2 changes: 2 additions & 0 deletions dune-project
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(lang dune 1.6)
(name "elpi")
97 changes: 97 additions & 0 deletions elpi.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
lib: [
"_build/install/default/lib/elpi/META" {"META"}
"_build/install/default/lib/elpi/builtin.elpi"
"_build/install/default/lib/elpi/elpi-checker.elpi"
"_build/install/default/lib/elpi/elpi.a" {"elpi.a"}
"_build/install/default/lib/elpi/elpi.cma" {"elpi.cma"}
"_build/install/default/lib/elpi/elpi.cmi" {"elpi.cmi"}
"_build/install/default/lib/elpi/elpi.cmt" {"elpi.cmt"}
"_build/install/default/lib/elpi/elpi.cmx" {"elpi.cmx"}
"_build/install/default/lib/elpi/elpi.cmxa" {"elpi.cmxa"}
"_build/install/default/lib/elpi/elpi.cmxs" {"elpi.cmxs"}
"_build/install/default/lib/elpi/elpi.dune" {"elpi.dune"}
"_build/install/default/lib/elpi/elpi.ml" {"elpi.ml"}
"_build/install/default/lib/elpi/elpi2html.elpi"
"_build/install/default/lib/elpi/elpi_API.ml" {"elpi_API.ml"}
"_build/install/default/lib/elpi/elpi_API.mli" {"elpi_API.mli"}
"_build/install/default/lib/elpi/elpi__.cmi" {"elpi__.cmi"}
"_build/install/default/lib/elpi/elpi__.cmt" {"elpi__.cmt"}
"_build/install/default/lib/elpi/elpi__.cmx" {"elpi__.cmx"}
"_build/install/default/lib/elpi/elpi__.ml" {"elpi__.ml"}
"_build/install/default/lib/elpi/elpi__Elpi_API.cmi" {"elpi__Elpi_API.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_API.cmt" {"elpi__Elpi_API.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_API.cmti" {"elpi__Elpi_API.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_API.cmx" {"elpi__Elpi_API.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_ast.cmi" {"elpi__Elpi_ast.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_ast.cmt" {"elpi__Elpi_ast.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_ast.cmti" {"elpi__Elpi_ast.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_ast.cmx" {"elpi__Elpi_ast.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_builtin.cmi" {"elpi__Elpi_builtin.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_builtin.cmt" {"elpi__Elpi_builtin.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_builtin.cmti" {"elpi__Elpi_builtin.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_builtin.cmx" {"elpi__Elpi_builtin.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_compiler.cmi" {"elpi__Elpi_compiler.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_compiler.cmt" {"elpi__Elpi_compiler.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_compiler.cmti" {"elpi__Elpi_compiler.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_compiler.cmx" {"elpi__Elpi_compiler.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_data.cmi" {"elpi__Elpi_data.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_data.cmt" {"elpi__Elpi_data.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_data.cmx" {"elpi__Elpi_data.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_parser.cmi" {"elpi__Elpi_parser.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_parser.cmt" {"elpi__Elpi_parser.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_parser.cmti" {"elpi__Elpi_parser.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_parser.cmx" {"elpi__Elpi_parser.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_ptmap.cmi" {"elpi__Elpi_ptmap.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_ptmap.cmt" {"elpi__Elpi_ptmap.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_ptmap.cmti" {"elpi__Elpi_ptmap.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_ptmap.cmx" {"elpi__Elpi_ptmap.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_off.cmi" {"elpi__Elpi_runtime_trace_off.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_off.cmt" {"elpi__Elpi_runtime_trace_off.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_off.cmti" {"elpi__Elpi_runtime_trace_off.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_off.cmx" {"elpi__Elpi_runtime_trace_off.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_on.cmi" {"elpi__Elpi_runtime_trace_on.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_on.cmt" {"elpi__Elpi_runtime_trace_on.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_on.cmti" {"elpi__Elpi_runtime_trace_on.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_runtime_trace_on.cmx" {"elpi__Elpi_runtime_trace_on.cmx"}
"_build/install/default/lib/elpi/elpi__Elpi_util.cmi" {"elpi__Elpi_util.cmi"}
"_build/install/default/lib/elpi/elpi__Elpi_util.cmt" {"elpi__Elpi_util.cmt"}
"_build/install/default/lib/elpi/elpi__Elpi_util.cmti" {"elpi__Elpi_util.cmti"}
"_build/install/default/lib/elpi/elpi__Elpi_util.cmx" {"elpi__Elpi_util.cmx"}
"_build/install/default/lib/elpi/elpi_ast.ml" {"elpi_ast.ml"}
"_build/install/default/lib/elpi/elpi_ast.mli" {"elpi_ast.mli"}
"_build/install/default/lib/elpi/elpi_builtin.ml" {"elpi_builtin.ml"}
"_build/install/default/lib/elpi/elpi_builtin.mli" {"elpi_builtin.mli"}
"_build/install/default/lib/elpi/elpi_compiler.ml" {"elpi_compiler.ml"}
"_build/install/default/lib/elpi/elpi_compiler.mli" {"elpi_compiler.mli"}
"_build/install/default/lib/elpi/elpi_data.ml" {"elpi_data.ml"}
"_build/install/default/lib/elpi/elpi_parser.ml" {"elpi_parser.ml"}
"_build/install/default/lib/elpi/elpi_parser.mli" {"elpi_parser.mli"}
"_build/install/default/lib/elpi/elpi_ptmap.ml" {"elpi_ptmap.ml"}
"_build/install/default/lib/elpi/elpi_ptmap.mli" {"elpi_ptmap.mli"}
"_build/install/default/lib/elpi/elpi_quoted_syntax.elpi"
"_build/install/default/lib/elpi/elpi_runtime_trace_off.ml" {"elpi_runtime_trace_off.ml"}
"_build/install/default/lib/elpi/elpi_runtime_trace_off.mli" {"elpi_runtime_trace_off.mli"}
"_build/install/default/lib/elpi/elpi_runtime_trace_on.ml" {"elpi_runtime_trace_on.ml"}
"_build/install/default/lib/elpi/elpi_runtime_trace_on.mli" {"elpi_runtime_trace_on.mli"}
"_build/install/default/lib/elpi/elpi_trace/elpi.elpi_trace.dune" {"elpi_trace/elpi.elpi_trace.dune"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.a" {"elpi_trace/elpi_trace.a"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cma" {"elpi_trace/elpi_trace.cma"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmi" {"elpi_trace/elpi_trace.cmi"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmt" {"elpi_trace/elpi_trace.cmt"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmti" {"elpi_trace/elpi_trace.cmti"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmx" {"elpi_trace/elpi_trace.cmx"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmxa" {"elpi_trace/elpi_trace.cmxa"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.cmxs" {"elpi_trace/elpi_trace.cmxs"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.ml" {"elpi_trace/elpi_trace.ml"}
"_build/install/default/lib/elpi/elpi_trace/elpi_trace.mli" {"elpi_trace/elpi_trace.mli"}
"_build/install/default/lib/elpi/elpi_util.ml" {"elpi_util.ml"}
"_build/install/default/lib/elpi/elpi_util.mli" {"elpi_util.mli"}
"_build/install/default/lib/elpi/opam" {"opam"}
]
bin: [
"_build/install/default/bin/elpi" {"elpi"}
]
doc: [
"_build/install/default/doc/elpi/LICENSE"
"_build/install/default/doc/elpi/README.md"
]
Loading

0 comments on commit ad3ef7a

Please sign in to comment.