Skip to content

Commit

Permalink
OcamlBuild
Browse files Browse the repository at this point in the history
  • Loading branch information
oliverfriedmann committed Feb 21, 2017
1 parent cfd1d6b commit bfe49ac
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 327 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Expand Up @@ -12,3 +12,6 @@ Config
src/externalsat/satsolutionlexer.ml
src/externalsat/satsolutionparser.ml
src/externalsat/satsolutionparser.mli
_build
SatConfig
temp
25 changes: 0 additions & 25 deletions Config.default

This file was deleted.

53 changes: 0 additions & 53 deletions Config.include

This file was deleted.

234 changes: 9 additions & 225 deletions Makefile
@@ -1,230 +1,14 @@
ifeq ($(strip $(wildcard Config)),)
include Config.default
else
include Config
endif


ifeq ($(strip $(wildcard Solvers)),)
include Solvers.default
else
include Solvers
endif


# OCAMLOPT=ocamlopt -cclib -static

all: satwrapper satsolvers zchaff minisat picosat pseudosat preprocessor externalsat

#tester tester2

ifeq "$(COMPILE_WITH_OPT)" "YES"

COMPILEEXT=cmx
OCAMLCOMP=$(OCAMLOPT)

else

COMPILEEXT=cmo
OCAMLCOMP=$(OCAMLC)

endif



satwrapper: $(OBJDIR)/satwrapper.cmi $(OBJDIR)/satwrapper.$(COMPILEEXT)

$(OBJDIR)/satwrapper.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/satwrapper.mli

$(OBJDIR)/satwrapper.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/satwrapper.ml


satsolvers: $(OBJDIR)/satsolvers.cmi $(OBJDIR)/satsolvers.$(COMPILEEXT)

$(OBJDIR)/satsolvers.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/satsolvers.mli

$(OBJDIR)/satsolvers.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/satsolvers.ml



ifeq "$(WITH_ZCHAFF)" "YES"

HASSAT=YES

zchaff: satwrapper satsolvers $(OBJDIR)/zchaff_ocaml_wrapper.o $(OBJDIR)/zchaff.cmi $(OBJDIR)/zchaff.cmx $(OBJDIR)/zchaffwrapper.cmi $(OBJDIR)/zchaffwrapper.cmx

$(OBJDIR)/zchaff_ocaml_wrapper.o:
$(CPP) -c -g -I $(SRCDIR)/zchaff/backend -I $(OCAML_DIR) -o $@ $(SRCDIR)/zchaff/backend/zchaff_ocaml_wrapper.cpp

$(OBJDIR)/zchaff.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/zchaff/zchaff.mli

$(OBJDIR)/zchaff.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/zchaff/zchaff.ml

$(OBJDIR)/zchaffwrapper.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/zchaff/zchaffwrapper.mli

$(OBJDIR)/zchaffwrapper.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/zchaff/zchaffwrapper.ml

ZCHAFFOBJS=$(OBJDIR)/zchaff_ocaml_wrapper.o $(OBJDIR)/zchaff.cmx $(OBJDIR)/zchaffwrapper.cmx $(ZCHAFFDIR)/libsat.a

EXTERNALSATOBJS += $(ZCHAFFOBJS)

else

zchaff:

endif



ifeq "$(WITH_MINISAT)" "YES"

HASSAT=YES

minisat: satwrapper satsolvers $(OBJDIR)/MiniSATWrap.o $(OBJDIR)/minisat.cmi $(OBJDIR)/minisat.cmx $(OBJDIR)/minisatwrapper.cmi $(OBJDIR)/minisatwrapper.cmx

#$(OBJDIR)/SimpSolver.o:
# $(CPP) -c -I $(MINISATDIR) -I $(MINISATDIR)/mtl $(MINISATDIR)/simp/SimpSolver.cc -o $(OBJDIR)/SimpSolver.o

$(OBJDIR)/MiniSATWrap.o:
$(CPP) -D__STDC_LIMIT_MACROS -c -I $(SRCDIR)/minisat/backend -I $(OCAML_DIR) -I $(MINISATDIR) -o $@ $(SRCDIR)/minisat/backend/MiniSATWrap.cc

$(OBJDIR)/minisat.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/minisat/minisat.mli

$(OBJDIR)/minisat.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/minisat/minisat.ml

$(OBJDIR)/minisatwrapper.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/minisat/minisatwrapper.mli

$(OBJDIR)/minisatwrapper.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/minisat/minisatwrapper.ml

MINISATOBJS=$(OBJDIR)/MiniSATWrap.o $(OBJDIR)/minisat.cmx $(OBJDIR)/minisatwrapper.cmx $(MINISATDIR)/simp/lib.a
MINISATFLAGS=-cclib -lz

EXTERNALSATOBJS += $(MINISATOBJS)
EXTERNALSATFLAGS += $(MINISATFLAGS)

else

minisat:

endif


ifeq "$(WITH_PICOSAT)" "YES"

HASSAT=YES

picosat: satwrapper satsolvers $(OBJDIR)/PicoSATWrap.o $(OBJDIR)/picosat.cmi $(OBJDIR)/picosat.cmx $(OBJDIR)/picosatwrapper.cmi $(OBJDIR)/picosatwrapper.cmx

$(OBJDIR)/PicoSATWrap.o:
$(CPP) -c -g -I $(SRCDIR)/picosat/backend -I $(OCAML_DIR) -o $@ $(SRCDIR)/picosat/backend/PicoSATWrap.cc

$(OBJDIR)/picosat.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/picosat/picosat.mli

$(OBJDIR)/picosat.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/picosat/picosat.ml

$(OBJDIR)/picosatwrapper.cmi:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/picosat/picosatwrapper.mli

$(OBJDIR)/picosatwrapper.cmx:
$(OCAMLOPT) -I $(OBJDIR) -c -o $@ $(SRCDIR)/picosat/picosatwrapper.ml

PICOSATOBJS=$(OBJDIR)/PicoSATWrap.o $(OBJDIR)/picosat.cmx $(OBJDIR)/picosatwrapper.cmx $(PICOSATDIR)/libpicosat.a

EXTERNALSATOBJS += $(PICOSATOBJS)

else

picosat:

endif


ifeq "$(HASSAT)" "YES"

CPPCOMPILER=-cc $(OCAMLOPTCPP)

endif


pseudosat: $(OBJDIR)/pseudosatwrapper.cmi $(OBJDIR)/pseudosatwrapper.$(COMPILEEXT)

$(OBJDIR)/pseudosatwrapper.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/pseudosat/pseudosatwrapper.mli

$(OBJDIR)/pseudosatwrapper.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/pseudosat/pseudosatwrapper.ml


preprocessor: $(OBJDIR)/preprocessor.cmi $(OBJDIR)/preprocessor.$(COMPILEEXT)

$(OBJDIR)/preprocessor.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/preprocessor/preprocessor.mli

$(OBJDIR)/preprocessor.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/preprocessor/preprocessor.ml


externalsat: $(OBJDIR)/satsolutionparserhelper.cmi $(OBJDIR)/externalsat.cmi $(SRCDIR)/externalsat/satsolutionparser.ml $(SRCDIR)/externalsat/satsolutionlexer.ml $(OBJDIR)/satsolutionparser.cmi $(OBJDIR)/satsolutionparser.$(COMPILEEXT) $(OBJDIR)/satsolutionlexer.$(COMPILEEXT) $(OBJDIR)/externalsat.$(COMPILEEXT)

$(OBJDIR)/satsolutionparserhelper.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/satsolutionparserhelper.mli

$(SRCDIR)/externalsat/satsolutionparser.ml:
$(OCAMLYACC) $(SRCDIR)/externalsat/satsolutionparser.mly

$(SRCDIR)/externalsat/satsolutionlexer.ml:
$(OCAMLLEX) $(SRCDIR)/externalsat/satsolutionlexer.mll

$(OBJDIR)/satsolutionparser.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/satsolutionparser.mli

$(OBJDIR)/satsolutionparser.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/satsolutionparser.ml

$(OBJDIR)/satsolutionlexer.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/satsolutionlexer.ml

$(OBJDIR)/externalsat.cmi:
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/externalsat.mli

$(OBJDIR)/externalsat.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ $(SRCDIR)/externalsat/externalsat.ml





$(OBJDIR)/tester.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ tester/tester.ml

tester: satwrapper satsolvers $(OBJDIR)/tester.$(COMPILEEXT)
$(OCAMLCOMP) -o $(BINDIR)/tester $(CPPCOMPILER) $(OCAML_DIR)/libasmrun.a $(OBJDIR)/satwrapper.$(COMPILEEXT) $(OBJDIR)/satsolvers.$(COMPILEEXT) $(OBJDIR)/pseudosatwrapper.$(COMPILEEXT) $(OBJDIR)/preprocessor.$(COMPILEEXT) $(PICOSATOBJS) $(MINISATOBJS) $(ZCHAFFOBJS) $(OBJDIR)/tester.$(COMPILEEXT)


$(OBJDIR)/tester2.$(COMPILEEXT):
$(OCAMLCOMP) -I $(OBJDIR) -c -o $@ tester/tester2.ml

tester2: satwrapper satsolvers $(EXTERNALSATOBJS) $(OBJDIR)/tester2.$(COMPILEEXT)
$(OCAMLCOMP) -o $(BINDIR)/tester2 $(CPPCOMPILER) $(EXTERNALSATFLAGS) $(OCAML_DIR)/libasmrun.a $(OBJDIR)/satwrapper.$(COMPILEEXT) $(OBJDIR)/satsolvers.$(COMPILEEXT) $(OBJDIR)/pseudosatwrapper.$(COMPILEEXT) $(OBJDIR)/preprocessor.$(COMPILEEXT) $(EXTERNALSATOBJS) $(OBJDIR)/tester2.$(COMPILEEXT)
all: generatesat tester1 tester2

include ./SatCompile

tester1:
ocamlbuild $(SATFLAGS) tester1.native
mv tester1.native bin/tester1

tester2:
ocamlbuild $(SATFLAGS) tester2.native
mv tester2.native bin/tester2

clean:
rm -f $(OBJDIR)/*.o $(OBJDIR)/*.cmx $(OBJDIR)/*.cmo $(OBJDIR)/*.cmi
rm -f $(SRCDIR)/externalsat/satsolutionparser.ml $(SRCDIR)/externalsat/satsolutionparser.mli $(SRCDIR)/externalsat/satsolutionlexer.ml
rm -f $(BINDIR)/tester $(BINDIR)/tester2
ocamlbuild -clean
54 changes: 50 additions & 4 deletions README.md
@@ -1,6 +1,8 @@
SAT Solvers For OCaml
==================

Copyright (c) 2008-2017

This library contains an abstraction layer for integrating SAT Solvers into OCaml.

It is developed and maintained by:
Expand All @@ -15,11 +17,55 @@ We currently support the following SAT Solvers:

## Installation

- Install OCaml, Make and the SAT solvers that you'd like to use.
- Create a copy of Config.default, name it Config and modify it to fit your configuration
- Create a copy of Solvers.default, name it Solvers and modify it to fit your configuration
- Run make
Install OCaml, OUnit, OPAM, Ocamlbuild.

Then:
```bash
git clone https://github.com/tcsprojects/satsolversforocaml.git
cd satsolversforocaml
make
```


## Usage

- See the two test application for example use cases


### Sat Solvers

#### Picosat

```bash
wget http://fmv.jku.at/picosat/picosat-965.tar.gz
tar xzvf picosat-965.tar.gz
cd picosat-965
./configure.sh && make
cd ..
echo "PICOSAT = `pwd`/picosat-965/libpicosat.a" >> satsolversforocaml/SatConfig
```
#### ZChaff

```bash
wget https://www.princeton.edu/~chaff/zchaff/zchaff.64bit.2007.3.12.zip
tar xzvf zchaff.64bit.2007.3.12.zip
cd zchaff64
make
cd ..
echo "ZCHAFF = `pwd`/zchaff64/libsat.a" >> satsolversforocaml/SatConfig
```

#### MiniSat

```bash
git clone https://github.com/niklasso/minisat
cd minisat
make
cd ..
echo "MINISAT = `pwd`/minisat/build/release/lib/libminisat.a" >> satsolversforocaml/SatConfig
echo "MINISAT_INC = `pwd`/minisat" >> satsolversforocaml/SatConfig
```

If you're on a Mac and make fails, please have a look at these resources:
- https://github.com/u-u-h/minisat/commit/e768238f8ecbbeb88342ec0332682ca8413a88f9
- http://web.cecs.pdx.edu/~hook/logicw11/Assignments/MinisatOnMac.html

0 comments on commit bfe49ac

Please sign in to comment.