This is the UPC-to-C translator component of the Berkeley UPC system.  

Note that you do not need to build this code to use Berkeley UPC. Our runtime
system by default uses a public translator (built from this source code) that we
provide on our website, via HTTP.

The translator code is derived from the Open64 compiler, open-sourced by Silicon
Graphics, and now largely maintained by the open source community and Intel.

-------------
Prerequisites
-------------

Unfortunately, due to C++ portability issues the translator currently builds on
a limited number of systems and compilers.  The only configurations that have
been extensively tested are:

	- Linux x86
	- Linux IA64
	- Linux Opteron 		(32- or 64-bit)
	- Linux PowerPC 		(64-bit only)
	- Compaq/HP Tru64/Alpha 
	- IBM AIX 5.2+ PowerPC 		(32-bit only)
	- Apple OSX 10.3+ PowerPC 	(32-bit only)

   (Note bit width refers to the ABI of the translator binaries only - 
    all translators can generate code for any supported runtime platform)

On all of these platforms, g++ version 3.4 or above was used.  Success has been
reported using older versions of g++, but this has not been regularly tested.  

You must have GNU 'make' on your system, and (depending on your systems's
version of 'yacc') you may also need GNU 'bison'.

----------------------------------------
Building and "installing" the translator
----------------------------------------

To facilitate eventually merging our UPC-specific changes into the general
Open64 code base, we have changed as little as possible about the Open64 build
system.  

1) You must use GNU 'make' to build the translator (on some systems it will be
   called 'gmake', on others, just 'make':  try 'make --version' to determine).

2) Run GNU make to build the translator:

    make    // or 'gmake', if that is what GNU make is called on your system

   You must make sure that the versions of gcc/g++/bison that you wish to use
   are in your $PATH. The build tree will occupy approximately 600 Megabytes of
   disk space, and can safely be moved after build without any side effects.

   The top of Makefile contains a few tweakable settings, but in most cases you
   probably want to keep the defaults.

3) (Optional) Install the translator
   
   To install the translator to a selected location after the build step above
   completes, run GNU make as follows:

     make install PREFIX=/path/to/install

   The install tree will occupy approximately 200 Megabytes of disk space, 
   and can safely be moved after build without any side effects.

In order to invoke the translator, you need to provide the upcc compiler driver 
in runtime distribution with the appropriate pathname for where you have placed
the translator. If you plan to run the translator directly from the build tree
created in step 2, the correct path to use is:

  (path to your BUILD tree)/open64/osprey1.0/$(BUILDDIR)

If you want to use the translator installed in step 3, the correct path is: 

  (path provided as PREFIX)/targ
  
You should provide the appropriate path to the runtime in the 'translator'
setting of the 'upcc.conf' file in the runtime's build/install tree. Examples
are provided in upcc.conf.  Users can also select alternate translators in a
~/.upccrc file or with 'upcc -translator=path'.

See the runtime's INSTALL documentation for information on how to point the
'upcc' Berkeley UPC front-end at a translator that resides on a remote machine,
using HTTP or ssh.  Any translator can support any UPC runtime on any
architecture, and so this is our current method for supporting UPC on systems
where the translator will not build.

