105 lines
3.9 KiB
Markdown
105 lines
3.9 KiB
Markdown
# CaDiCaL Build
|
|
|
|
Use `./configure && make` to configure and build `cadical` in the default
|
|
`build` sub-directory.
|
|
|
|
This will also build the library `libcadical.a` as well as the model based
|
|
tester `mobical`:
|
|
|
|
build/cadical
|
|
build/mobical
|
|
build/libcadical.a
|
|
|
|
The header file of the library is in
|
|
|
|
src/cadical.hpp
|
|
|
|
The build process requires GNU make. Using the generated `makefile` with
|
|
GNU make compiles separate object files, which can be cached (for instance
|
|
with `ccache`). In order to force parallel build you can use the '-j'
|
|
option either for 'configure' or with 'make'. If the environment variable
|
|
'MAKEFLAGS' is set, e.g., 'MAKEFLAGS=-j ./configure', the same effect
|
|
is achieved and the generated makefile will use those flags.
|
|
|
|
Options
|
|
-------
|
|
|
|
You might want to check out options of `./configure -h`, such as
|
|
|
|
./configure -c # include assertion checking code
|
|
|
|
./configure -l # include code to really see what the solver is doing
|
|
|
|
./configure -a # both above and in addition `-g` for debugging.
|
|
|
|
You can easily use multiple build directories, e.g.,
|
|
|
|
mkdir debug; cd debug; ../configure -g; make
|
|
|
|
which compiles and builds a debugging version in the sub-directory `debug`,
|
|
since `-g` was specified as parameter to `configure`. The object files,
|
|
the library and the binaries are all independent of those in the default
|
|
build directory `build`.
|
|
|
|
All source files reside in the `src` directory. The library `libcadical.a`
|
|
is compiled from all the `.cpp` files except `cadical.cpp` and
|
|
`mobical.cpp`, which provide the applications, i.e., the stand alone solver
|
|
`cadical` and the model based tester `mobical`.
|
|
|
|
Manual Build
|
|
------------
|
|
|
|
If you can not or do not want to rely on our `configure` script nor on our
|
|
build system based on GNU `make`, then this is easily doable as follows.
|
|
|
|
mkdir build
|
|
cd build
|
|
for f in ../src/*.cpp; do g++ -O3 -DNDEBUG -DNBUILD -c $f; done
|
|
ar rc libcadical.a `ls *.o | grep -v ical.o`
|
|
g++ -o cadical cadical.o -L. -lcadical
|
|
g++ -o mobical mobical.o -L. -lcadical
|
|
|
|
Note that application object files are excluded from the library.
|
|
Of course you can use different compilation options as well.
|
|
|
|
Since `build.hpp` is not generated in this flow the `-DNBUILD` flag is
|
|
necessary though, which avoids dependency of `version.cpp` on `build.hpp`.
|
|
Consequently you will only get very basic version information compiled into
|
|
the library and binaries (guaranteed is in essence just the version number
|
|
of the library).
|
|
|
|
And if you really do not care about compilation time nor caching and just
|
|
want to build the solver once manually then the following also works.
|
|
|
|
g++ -O3 -DNDEBUG -DNBUILD -o cadical `ls *.cpp | grep -v mobical`
|
|
|
|
Further note that the `configure` script provides some feature checks and
|
|
might generate additional compiler flags necessary for compilation. You
|
|
might need to set those yourself or just use a modern C++11 compiler.
|
|
|
|
This manual build process using object files is fast enough in combination
|
|
with caching solutions such as `ccache`. But it lacks the ability of our
|
|
GNU make solution to run compilation in parallel without additional parallel
|
|
process scheduling solutions.
|
|
|
|
Cross-Compilation
|
|
-----------------
|
|
|
|
We have preliminary support for cross-compilation using MinGW32 (only
|
|
tested for a Linux compilation host and Windows-64 target host at this
|
|
point).
|
|
|
|
There are two steps necessary to make this work. First make
|
|
sure to be able to execute binaries compiled with the cross-compiler
|
|
directly. For instance in order to use `wine` to execute the binaries
|
|
on Linux you might want to look into the `binfmt_misc` module and
|
|
registering the appropriate interpreter for `DOSWin`. As second step
|
|
you simply tell the `configure` script to use the cross-compiler.
|
|
|
|
CXXFLAGS=-static CXX=i686-w64-mingw32-g++ ./configure
|
|
|
|
Note the use of '-static', which was necessary for me since by default
|
|
`wine` did not find `libstdc++` if dynamically linked.
|
|
|
|
|