SUIF2 installation notes

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 be compiled with the modern C++ compiler, such as GCC-4.1.1-r3 in my Gentoo. I googled and found there is literally 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 music, 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

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 human being. 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.