      CIVL: The Concurrency Intermediate Verification Language
                               v 0.7

------------------------------ Overview -------------------------------

CIVL is a framework encompassing...

 * a programming language, CIVL-C, which adds to C a number of
   concurrency primitives, as well as the ability to define
   functions in any scope.  Together, these features make for
   a very expressive concurrent language that can faithfully
   represent programs using various APIs and parallel languages,
   such as MPI, OpenMP, CUDA, and Chapel. CIVL-C also provides
   a number of primitives supporting verification.
 * a model checker which uses symbolic execution to verify a
   number of safety properties of CIVL-C programs.   The model
   checker can also be used to verify that two CIVL-C programs
   are functionally equivalent.
 * a number of translators from various commonly-used languages
   and APIs to CIVL-C. (This part is still a work in progress.)

CIVL is developed by the Verified Software Laboratory at the
University of Delaware Department of Computer Science.
For more information, visit http://vsl.cis.udel.edu/civl

Developers:

Stephen F. Siegel
Timothy K. Zirkel
Manchun Zheng
Ziqing Luo

------------------------------- License -------------------------------

CIVL is open source software distributed under the GNU
General Public License.  However, the libraries used by CIVL
(and incorporated into the complete distribution) use various
licenses.  See directory licenses for the license of each component.

-------------------------- Updates from v 0.6 -------------------------

1. A new system function is supported: $comm_add(*comm comm, $proc q, int rank),
   allowing one process to add another process q into the communicator comm. 
   Refer to examples/messagePassing/hybrid.cvl for more details.

2. A new partial order reduction algorithm is implemented and performance gets
   improved greatly.

------------------------- Installation -------------------------


NOTE: The directions below will install CIVL in /opt, which typically
requires root permission.  If you don't want to install vsl and
CIVL-TAG in /opt, you can use any directories you want, you will just
have to edit the small shell script (bin/civl) to replace the paths
with the paths you have chosen.


1. Install a Java 7 SDK if you have not already.  Go to
http://www.oracle.com/technetwork/java/javase/downloads/ for the
latest from Oracle.  On linux, you can optionally sudo apt-get install
openjdk-7-jdk.

2. If you already have the VSL dependencies library, you may
skip this step.

Download the tgz archive of VSL dependencies from 
   http://vsl.cis.udel.edu/tools/vsl_depend,
   choosing the right .tgz according to your platform:
	
	vsl_linux32-1.2.tgz	- 32-bit linux
	vsl_linux64-1.2.tgz	- 64-bit linux
	vsl_osx64-1.2.tgz	- 64-bit osx
	
   Unzip the .tgz file and you will have the folder vsl.  Move vsl to
   /opt (you might need to use sudo for this.  Also, if you don't
   already have a directory called /opt, you will have to create it
   with mkdir /opt).

   Suppose that you put the .tgz file (or .tar file if your browser
   unzipped it automatically to a .tar file) in the directory Download.
   You can use the following commands:

   		$ cd Download
   		$ tar xzf YourTgzOrTarFile vsl
   		$ sudo mv vsl /opt

3. Choose the appropriate CIVL distribution in /CIVL, according to the
OS you use (32-bit/64-bit linux, 64-bit osx).

4. Unzip and untar the chosen CIVL distribution. This should result in
a folder named CIVL-TAG, where TAG is some version id string.  This
folder contains the following:

 - README : same as this file
 - bin : containing one executable sh script called "civl"
 - lib : containing civl-TAG.jar
 - doc : containing the manual and the tutorial of CIVL
 - licenses : licenses for CIVL and included libraries
 - examples : some example CIVL programs

5. Move CIVL-TAG into /opt. 

6. Put the civl script (in CIVL-TAG/bin) in your path however you like
to put things in your path. Either move it to a directory in your
path, or create a symlink to it, or edit your .profile or equivalent
to put it in your path.
