SUIF2 installation notes

Development March 23rd, 2007

SUIF2 is the infrastructure for compiler development. If you want to develop a compiler in 2 weeks, SUIF2 may be a good choice for you, at least in SUIF2 documentation, it looks quite powerful and easy to extend.

Setup the working environment

The distance of the dream and reality makes our lives more colorful. The SUIF2 can not pass the compilation in modern C++, for exmaple GCC -4.1.1-r3 in my Gentoo. I googled and found there is literarlly NO success story to compile SUIF2 with GCC 3.x, let alone GCC 4.x. I do believe some graduate students have ported it to the latest GCC as in-house work, but nobody would like to share this work. Ok, let’s face the reality, since gcc 2.96 would mess up my Gentoo’s profile, I decided to install RedHat 7.0 on my old Pentium III box.

It took a little while to find the legacy ISO, but the install procedure was quite smooth, the ugly text installation wizard reminded me the time in my college, some Linux fans scratched heads to make X works. The bottom line is a Linux box with GCC 2.96 and SSH access.

Prepare the dependencies

Besides the dependency on gcc 2.96, SUIF2 also depends on the graphviz and gv for the graphics output. I could not find the RPM for graphviz due to the “RPM dependency hell” of RedHat. This is just the option. Let’s move on.

Build the SUIF2

Just follow this HOWTO.

cd /path/to/the/expected/destination/of/suif2
tar xvfz ~/tmp/basesuif-2.2.0-4.tar.gz
cd nci
patch -p1 < /path/to/patches/gcc296.patch
./install
make setup
make

Done.

NOTICE install would setup the $NCIHOME to the current working directory, you may override it after the build.

Test drive

Here is a canonical helloworld in $NCIHOME/bin, create_suif_hello_world. If the indented output is generated, the basic suif2 environment is setup correctly.

To invoke the SUIF2, you still need PGI C Compiler front end, pgcpp1. You could get it from the SUIF2 website. And you might need to setup the LD_LIBRARY_PATH to load all SUIF2 and pgcpp’s shared objects. In my case, SUIF2 is installed in $HOME/opt:

export PATH=$PATH:$HOME/opt/nci/bin
export LD_LIBRARY_PATH=$HOME/opt/nci/lib:$HOME/opt/nci/solib

Now, for a road test, just prepare a helloworld.c, and run

c2suif helloworld.c

If you get helloworld.suif, Bravo!

What is the next?

The suif output is for the machine to parse, not readable for men. So we might need to install extra viewer for SUIF2.

cd ../
wget http://suif.stanford.edu/pub/suif/extras-2.2.0-4.tar.gz
tar xvfz extras*.tar.gz
cd nci
make

Extras would install several viewer for .suif file, for example, suif2c helloworld.suif would generate helloworld.out.c to inspect.