
               README for Intel(R) OpenMP* Runtime Library
               ===========================================

How to Build Documentation
==========================

The main documentation is in Doxygen* format, and this distribution
should come with pre-built PDF documentation in doc/Reference.pdf.  
However, an HTML version can be built by executing:

% doxygen doc/doxygen/config 

in this directory.

That will produce HTML documentation in the doc/doxygen/generated
directory, which can be accessed by pointing a web browser at the
index.html file there.

If you don't have Doxygen installed, you can download it from
www.doxygen.org.


How to Build the Intel(R) OpenMP* Runtime Library
=================================================

The Makefile at the top-level will attempt to detect what it needs to
build the Intel(R) OpenMP* Runtime Library.  To see the default settings, 
type:

make info

You can change the Makefile's behavior with the following options:

omp_root:    The path to the top-level directory containing the top-level
	     Makefile.  By default, this will take on the value of the 
	     current working directory.

omp_os:      Operating system.  By default, the build will attempt to 
	     detect this. Currently supports "linux", "macos", and 
	     "windows".

arch:        Architecture. By default, the build will attempt to 
	     detect this if not specified by the user. Currently 
	     supported values are
                 "32" for IA-32 architecture 
                 "32e" for Intel(R) 64 architecture
                 "mic" for Intel(R) Many Integrated Core Architecture

             If "mic" is specified then "icc" will be used as the
	     compiler, and appropriate k1om binutils will be used. The
	     necessary packages must be installed on the build machine
	     for this to be possible (but an Intel(R) Xeon Phi(TM)
	     coprocessor card is not required to build the library).

compiler:    Which compiler to use for the build.  Defaults to "icc" 
	     or "icl" depending on the value of omp_os. Also supports 
	     some versions of "gcc"* when omp_os is "linux". The selected 
	     compiler should be installed and in the user's path. The 
	     corresponding Fortran compiler should also be in the path. 
	     See "Supported RTL Build Configurations" below for more 
	     information on compiler versions.

mode:        Library mode: default is "release".  Also supports "debug".

To use any of the options above, simple add <option_name>=<value>.  For 
example, if you want to build with gcc instead of icc, type:

make compiler=gcc

Supported RTL Build Configurations
==================================

Supported Architectures: IA-32 architecture, Intel(R) 64, and 
Intel(R) Many Integrated Core Architecture

              --------------------------------------------  
              |   icc/icl     |    gcc      |   clang    |
--------------|---------------|--------------------------|
| Linux* OS   |   Yes(1,5)    |  Yes(2,4)   | Yes(4,6,7) |
| OS X*       |   Yes(1,3,4)  |  No         | Yes(4,6,7) |
| Windows* OS |   Yes(1,4)    |  No         | No         |
----------------------------------------------------------

(1) On IA-32 architecture and Intel(R) 64, icc/icl versions 12.x are 
    supported (12.1 is recommended).
(2) gcc version 4.6.2 is supported.
(3) For icc on OS X*, OS X* version 10.5.8 is supported.
(4) Intel(R) Many Integrated Core Architecture not supported.
(5) On Intel(R) Many Integrated Core Architecture, icc/icl versions 13.0 
    or later are required.
(6) clang version 3.3 is supported.
(7) clang currently does not offer a software-implemented 128 bit extended 
    precision type.  Thus, all entry points reliant on this type are removed
    from the library and cannot be called in the user program.  The following
    functions are not available:
    __kmpc_atomic_cmplx16_*
    __kmpc_atomic_float16_*
    __kmpc_atomic_*_fp

Front-end Compilers that work with this RTL
===========================================

The following compilers are known to do compatible code generation for
this RTL:  icc/icl, gcc.  See the documentation for more detail.

-----------------------------------------------------------------------

Notices
=======

*Other names and brands may be claimed as the property of others.
