#
#  /**-------------------------------------------------------------------**
#   **                              CLooG                                **
#   **-------------------------------------------------------------------**
#   **                     The Chunky Loop Generator                     **
#   **-------------------------------------------------------------------**
#   **           First version of this file: january 22th 2002           **
#   **-------------------------------------------------------------------**/
#

For complete informations about this software, how to build and use it,
please see the postscript file in the ./doc subdirectory (a pdf version
is available in the web site).

Overview :
I.   Description 
II.  Building CLooG
III. Options
IV.  Running CLooG
V.   General Questions

#   **-------------------------------------------------------------------**
#   **                        I. Description                             **
#   **-------------------------------------------------------------------**/

CLooG is a software which generates loops for scanning Z-polyhedra. That is,
CLooG finds the code or pseudo-code where each integral point of one or more
parametrized polyhedron or parametrized polyhedra union is reached. CLooG is
designed to avoid control overhead and to produce a very efficient code.

Its input is some data on the polyhedra to scan, basically the system of
affine inequalities that define them, and a context that defines some
properties known on the parameters if any. The output is the pseudo scanning
code. Many facilities are provided to generate a near-to-be-compileable code,
and every useful functions to generate the code may be called from the CLooG
library.

            INPUT                   |                 OUTPUT
(fortunately not exactly the input, |   (the real one, with default options)
 check test/readme.cloog for the    |
 real input for that problem !)	    |
	                            |
	j^ i>=2                     |
         | | j<=n+2-i               |
         | |\     | i<=n            |
         | | \    |                 |
       m-+-****---+-j<=m            |    for (i=2;i<=n;i++) {
         | *****  |                 |      for (j=2;j<=min(m,-i+n+2);j++) {    
         | ****** |                ==>       S1 ;
         | *******|                 |      }
       2-+-********-j>=2            |    }
         | |      |\                |
       0-+-+------+--->i            |
         | |      |                 |
         0 2      n                 |
                                    |
       Context : n>=2               |
                 m>=2               |
       System  : 2<=i<=n            |
                 2<=j<=m            |
		 j<=n+2-i           |

#   **-------------------------------------------------------------------**
#   **                      II. Building CLooG                           **
#   **-------------------------------------------------------------------**/

If you obtained CLooG from the git repository, then you first
need to obtain the submodules and create a configure script.

  ./get_submodules.sh
  ./autogen.sh

The first step is only needed if you plan on using the isl backend.

The configure shell script attempts to guess correct values for various
system-dependent variables used during compilation. It uses those values to
create a Makefile. The file configure.ac is used to create configure by a
program called autoconf.  You only need configure.ac if you want to change
it or regenerate configure using a newer version of autoconf.

The simplest way to compile this package is:
cd to the directory containing the package's source code and type 

  ./configure

to configure the package for your system (while running, configure prints
some messages telling which features it is checking for). To compile the
package, type

  make
  

to install the program and/or the library, type

  make install

you can remove the program binaries and object files from the source code
directory by typing
  
  make clean
  
To also remove the files that configure created (so you can compile the
package for a different kind of computer) type
  
  make distclean

#   **-------------------------------------------------------------------**
#   **                           III. Options                            **
#   **-------------------------------------------------------------------**/

By default,  make will install the package's files in /usr/local/bin,
/usr/local/lib, etc. You can specify an installation prefix other than 
/usr/local by giving onfigure the option --prefix=PATH.

By default, configure will use the isl that comes bundled with CLooG.
Using the --with-isl option of configure the user can specify that "no" isl,
a previously installed ("system") isl or a "build" isl should be used.
In the latter case, the user should also specify the build location
using --with-isl-builddir=PATH.  In case of an installed isl,
the installation location can be specified using the
--with-isl-prefix=PATH and --with-isl-exec-prefix=PATH options of configure.

By default, configure will seek the PolyLib in standard locations.
If necessary, you can specify the PolyLib's path by giving configure the
option --with-polylib-prefix=PATH and/or --with-polylib-exec-prefix=PATH.

By default, configure will seek the GMP library in standard locations.
If necessary, you can specify the GMP's path by giving configure the
option --with-gmp-prefix=PATH and/or --with-gmp-exec-prefix=PATH.

By default, when using the PolyLib backend,
CLooG and its library are built using 64 bits integer
representation. You can choose to specify explicitly others integer
representations by using:
--with-bits=32  for 32 bits integers,
--with-bits=64  for 64 bits integers (default),
--with-bits=gmp for multiple precision integers.

#   **-------------------------------------------------------------------**
#   **                         IV. Running CLooG                         **
#   **-------------------------------------------------------------------**/

To run CLooG, simply type 'cloog', optionally followed by the name of an
input file. You can type 'cloog -h' or 'cloog --help' for some help.
For more informations, please check the ./doc subdirectory.

#   **-------------------------------------------------------------------**
#   **                        V. General Questions                       **
#   **-------------------------------------------------------------------**/

1. What does CLooG means ?

CLooG is the Chunky LOOp Generator, Chunky is an automatic loop optimizer for
data locality. CLooG is a completely independent part of the Chunky project.
Pronounce 'CLooG' as 'klug', which means 'sly' in german :-).

2. CLooG do not compile, what should I do ?

CLooG should compile everywhere (assuming that PolyLib is still there), thus
there is a problem or the documentation is not clear, in both case it is
necessary to ask the author(s) !

3. I need a feature that CLooG do not implement, what should I do ?

There are two ways. First, CLooG is a LGPL software and library. So you
are welcome to improve it yourself ;-) ! Many project have been successful, it
is -maybe- a sign that this is not too hard to put your hands inside the
source. Second, just ask the author(s) :-) ! Maybe a lot of people would be
interessed by such feature, maybe many people asked for it before, maybe it's
trivial to implement (and even)... Please just never hesitate to ask the
author(s) !

4. I implemented a cool feature, can I submit it ?

Obviously you are welcome to send the author(s) any improvement. But obviously
we are quite careful with readability, correctness and stability, and the
author(s) will read, check and check again any contribution before including it.
Thus, it can take time... There are few basic rules to write contributions:
- (1) Do never change the indentation of any part of the code that is not yours.
- (2) Do never send codes that use more than 80 columns.
- (3) Do never send codes without a lot of comments in (bad or good) english.
- (4) Do never send codes with obscure and/or non-english variable names.
- (5) Use C89, just C, only C (note: "//" comments are not C89,
  variable declaration elsewhere than at the beginning of a block, is not C89).
- (6) Read doc/SubmittingPatches
Please understand that in order to live for a long time, and to be used in many
projects the very first priority for CLooG is to be readable and documented.

5. Is CLooG bug free ?

No, who can ? ClooG is a complex program, and we do not pretend it to be bug
free. Nevertheless because it has been tested and tested, we are fairly sure
that CLooG results with default options have good chances to be satisfactory.
If you find a result that looks strange, inadequate or incorrect, please send:
- (1) The input file to the author(s).
- (2) The output.
- (3) The first line given by typing 'cloog -v'.
- (4) All your command line options to achieve the result.
We will try to explain the result or to fix the problem as soon as possible.

6. How can I contact the author(s) ?

Just send a mail to cloog-development@googlegroups.com
