Intel(R) Cilk(TM) Plus Runtime Library

Index:
1. BUILDING WITH AUTOMAKE
2. BUILDING WITH CMAKE
3. INSTALLING TO VXWORKS
4. USING
5. DOXYGEN DOCUMENTATION
6. QUESTIONS OR BUGS
7. CONTRIBUTIONS

#
#  1. BUILDING WITH AUTOMAKE:
#

To distribute applications that use the Intel Cilk Plus language
extensions to non-development systems, you need to build the Intel
Cilk Plus runtime library and distribute it with your application.

To build the libcilkrts.so runtime library component, you need the
autoconf and automake packages, which are available through your
favorite package manager.  You also need a C/C++ compiler that
supports the Intel Cilk Plus language extensions, since the runtime
uses Intel Cilk Plus features internally.  Use either the Intel(R)
C++ Compiler (icc command) v12.1 or later, or in GCC 4.9 or later
(gcc command).

Once you have the necessary prerequisites installed, you can use the
following commands to create the library:

% libtoolize
% aclocal
% automake --add-missing
% autoconf
% ./configure
% make
% make install

This will produce the libcilkrts.so shared object.  To install the
library in a custom location, set the prefix while running the
configure script:

% ./configure --prefix=/your/path/to/lib

#
#  2. BUILDING WITH CMAKE:
#

To distribute applications that use the Intel Cilk Plus language
extensions to non-development systems, you need to build the Intel
Cilk Plus runtime library and distribute it with your application.
This instruction describes the build process using CMake*, which
supports Linux*, Windows*, and OS X*.  It is fine to use this process
to build a Linux library, but it is highly recommended to use the
more mature build process described above when building on Linux.

You need the CMake tool and a C/C++ compiler that supports the Intel
Cilk Plus language extensions, and the requirements for each operating
systems are:

Common:
    CMake 3.0.0 or later
    Make tools such as make (Linux, OS X) or nmake (Windows)
Linux:
    GCC* 4.9.2 or later, or Intel(R) C++ Compiler v12.1 or later
Windows:
    Intel C++ Compiler v12.1 or later
    Visual Studio* 2010 or later
OS X:
    Cilk-enabled branch of Clang*/LLVM* (http://cilkplus.github.io),
    or Intel C++ Compiler v12.1 or later

The common steps to build the libraries are 1) invoke cmake with
appropriate options, 2) invoke a make tool available on the system.
The following examples show build processes on OS X and Windows.

OS X:
    % mkdir ./build && cd ./build
    % cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
            -DCMAKE_INSTALL_PREFIX=./install ..
    % make && make install

Windows:
    % mkdir .\build && cd .\build
    % cmake -G "NMake Makefiles" -DCMAKE_C_COMPILER=icl \
            -DCMAKE_CXX_COMPILER=icl -DCMAKE_INSTALL_PREFIX=.\install ..
    % nmake && nmake install

#
#  3. INSTALLING TO VXWORKS OS
#

For Windows host, run VxWorks_Install.bat.
For Linux host, run VxWorks_Install.sh.

You may need to give environment variable WIND_BASE to indicate VxWorks
installation path.

Create a VSB project, and you will see a layer named "CILKPLUS_KERNEL".
Enable it and build the project.

Create a VIP project with ICC and add component INCLUDE_CILKPLUS, then you
will get support of Intel Cilk Plus features in VxWorks.

#
#  4. USING:
#

The Intel(R) C++ Compiler will automatically try to bring in the
Intel Cilk Plus runtime in any program that uses the relevant
features.  GCC and Clang requires an explicit compiler option,
-fcilkplus, to enable Intel Cilk Plus language extensions.
For example,

% gcc -fcilkplus -o foo.exe foo.c
% clang -fcilkplus -o foo.exe foo.c 

Older GCC versions (e.g., 4.8 cilkplus branch) requires explicit linking
of both the library and its dependencies (libpthread, libdl).
For example:

% gcc foo.c -lcilkrts -lpthread -ldl

#
#  5. DOXYGEN DOCUMENTATION:
#

The library source has Doxygen markup.  Generate HTML documentation
based on the markup by changing directory into runtime and running:

% doxygen doxygen.cfg

#
#  6. QUESTIONS OR BUGS:
#

Issues with the Intel Cilk Plus runtime can be addressed in the Intel
Cilk Plus forums:
http://software.intel.com/en-us/forums/intel-cilk-plus/

#
#  7. CONTRIBUTIONS:
#

The Intel Cilk Plus runtime library is dual licensed. The upstream copy
of the library is maintained via the BSD-licensed version available at:
http://cilkplus.org/

Changes to the Intel Cilk Plus runtime are welcome and should be
contributed to the upstream version via http://cilkplus.org/.

Thanks to Tobias Burnus for showing us the magic to make gcc and g++
automatically include the Cilk Plus runtime.

Thanks to Eric Olson for sharing his patch for Raspberry Pi* with us.

Thanks to Rainer Orth for submitting patches for exception handling and
enabling Cilk Plus on the SPARC* architecture.

------------------------
Intel and Cilk are trademarks of Intel Corporation in the U.S. and/or
other countries.

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