I have managed to download, uncompress and compile this library in a Visual Studio environment. At last. Though a very powerful package for the implementation of binary decision diagrams, the documentation for its actual set-up for non-Unix environments seems a little sketchy and somewhat intimidating for the beginner. Here are some instructions for the most recent version at this time of writing (2.4.2). If I get any more useful insights, I will add them to this post accordingly.
1. Acquire CUDD v2.4.2
You can download CUDD v2.4.2 from this ftp site or visit Fabio Somenzi’s home page and get it there.
Update 26 March 2018: Those links appear to have died. An alternative GitHub page for this package can be found here:
This link also contains instructions which may complement this post.
2. Install CygWin and the make
program
You will then need to run some Unix-type commands in order to make
the CUDD project. The way to run Unix/Linux commands and scripts directly in Windows is to use CygWin. This is available for free at http://cygwin.com. In order to run the make
command at the command prompt, you must ensure it has been installed. When running the CygWin setup.exe facility, the make
utility can be found in the ‘Devel’ subsection:
3. Fix the Makefile and source code issues
In addition to installing CygWin satisfactorily, the documentation tells you to run the make
command inside wherever you installed the CUDD 2.4.2 directory eg:
C:\cudd-2.4.2>make
It won’t build properly just yet. But feel free to try this and watch it it not work.
Please be aware of two sources of trouble you need to address first, one in the Makefile and the other in the void util_print_cpu_stats(FILE *fp)
contained inside the file cpu_stats.c
(in the util
directory).
Using your own choice of text editor, first edit the Makefile so that:
XCFLAGS = -mcpu=pentiumpro -malign-double -DHAVE_IEEE_754 -DBSD
becomes:
XCFLAGS = -malign-double -DHAVE_IEEE_754 -DBSD
Secondly in cpu_stats.c
look for the code snippet that says
#if defined(_IBMR2)
and replace it with:
#if 0
Then look for the first line inside the void util_print_cpu_stats(FILE *fp)
function and replace:
#ifdef BSD
with:
#if 0
4. Make CUDD
Now cd
to the cudd-2.4.2 directory and go ahead with the make
command.
This should create the additional include directory with new header files as shown:
There also should also be number of new c archive files created in the { util, epd, mtr, st, obj, dddmp } directories respectively:
$CUDD_ROOT/util/libutil.a
$CUDD_ROOT/epd/libepd.a
$CUDD_ROOT/mtr/libmtr.a
$CUDD_ROOT/st/libst.a
$CUDD_ROOT/obj/libobj.a
$CUDD_ROOT/dddmp/libdddmp.a
5. Link to the CUDD libraries
In Visual Studio, go to your project’s Configuration Properties, select C/C++ then Additional Include Directories and set it to the new include folder:
In your project Configuration Properties, select Linker then General and then Additional Library Directories and insert the following directories:
In Project Configuration Properties, select Linker, Input, Additional Dependencies, and insert the following linked libraries:
That is all there is to it. You might wish to check that anything utilising the CUDD project builds OK by using a simple code snippet eg:
// CUDD.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "util.h" #include "cudd.h" int _tmain(int argc, _TCHAR* argv[]) { DdNode* node1 = new DdNode; return 0; }