wiki:Development/Building

Building

Dependencies

  1. We support the following platforms: Darwin/x86, Darwin/x86_64, Linux/x86, Linux/x86_64, Linux/PPC, FreeBSD/x86, Cygwin/x86, MinGW/x86

Other platforms may take some tweaking.

  1. A recent version of GHC.

Compiling DDC requires at least GHC 7.8. We use a few GHC specific extensions, so it won't work with other Haskell compilers.

Depending on how you've installed GHC, you may need to install some extra packages from Hackage. Use make show-pkgs to list them.

Optionally, create a sandbox:

$ cabal sandbox init

And then install the packages:

$ cabal update
$ cabal install `make show-pkgs`

If you have issues installing limp-cbc because of the native library and you're on OSX running Homebrew, you can easily fetch the native parts:

$ brew tap homebrew/science
$ brew install coinmp
$ cabal install limp-cbc

However, I found the Debian packages to be entirely unhelpful, so on Linux:

$ sudo apt-get install libblas-dev gfortran
$ svn co https://projects.coin-or.org/svn/CoinBinary/CoinAll/releases/1.7.4/ CoinAll
$ cd CoinAll
$ ./configure --prefix=/usr # for some reason, configure defaults to "." for prefix - not very useful
$ sudo make install
$ cabal install limp-cbc
  1. A recent version of GCC.

We compile C files with the -std=c99 option to GCC, so the code should be fairly portable.

  1. A recent version of LLVM.

It's known to work with LLVM 3.4

Building Everything

  • Build the compiler, runtime system, base libraries.
    $ make
    
  • As above, but also run regression tests.
    $ make war
    
  • As above, but also build the haddock documentation.
    $ make total
    

The make war target is the main one to use during development. If a test fails it will ask you what to do about it interactively. In contrast, the make total target is non-interactive and can be used in scripts.

More useful build targets are listed at the top of the Makefile

Building Specific Things

During development, it can be faster to build the tools you are working on directly, instead of using the make war target that also rebuilds dependencies. For example:

$ make bin/war
$ make bin/ddc
$ make bin/ddci-core
Last modified 2 years ago Last modified on Sep 22, 2014, 5:31:59 AM