Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
Driver for PENCIL compile toolchain.

Requirements (might be incomplete)

- C99 compiler (Tested with gcc 4.9.1)
- autoconf (Tested with version 2.69)
- automake (Tested with version 1.14)
- libtool (Tested with version 2.4.2)
- pkg-config (Tested with version 0.26)
- ppcg (Bundled in ppcg submodule)
  - Integer Set Library (Bundled in ppcg/isl submodule)
    - GNU Bignum Library (Tested with version 5.1.3)
  - PET (bundled in ppcg/pet submodule)
    - Clang headers and libraries (Tested with versions 3.3-3.6)
      - Clang requirements (C++ compiler, headers for libedit, zlib, ...)
- pencil headers (Bundled in pencil-headers submodule)
- PRL (Bundled in prl submodule)
- polybench (Tested with version 3.2; automatically downloaded by the script and bundled in the dist version)
- Python3 (Tested with version 3.4.2)


	sudo make install

in the pencilcc directory.  See './configure --help' for options.

'make install' will install pencilcc, penciltool, ppcg, the PENCIL and PRL headers, and PRL shared library.


pencilcc is a compiler invocation replacement.  Replace your compiler call by pencilcc.  Call 'pencilcc --help' for options.  Every option not recognized is passed to the compiler (cc) after optimization took place.

penciltool is a prefix for the main compiler invocation, like libtool.  Replace a call to 'gcc <gcc_options>' by 'penciltool <ppcg_options> gcc <gcc_options>'.  Files will be preprocessed by ppcg before being passed to gcc.

By default *.pencil.c and *.pencil files are assumed to contain pure PENCIL code (sublanguage of C99) and every other file C99 code with embedded PENCIL (#pragma scop/#pragma endscop).

pencilcc/penciltool have three configuration modes:

`build`) Then executed from the build directory, it will use the files from the source-tree and build directory.  I.e., installation is not necessary.

`install`) Use the path configured by --prefix to find the required tools and files.  Used by default when not started from the build directory.

`system`) Uses no paths, but assumes that all files and tools are in the default search paths (e.g. /usr/bin, /usr/include, /usr/lib)

Configuration modes can be changed explicitly using the --pencil-config command line option.

Known Issues

- pencilcc assumes the compiler accepts gcc command line syntax
- pencilcc assumes the compiler invocation includes linking; i.e. the options -c (compile to .o) and -E (precompile) are not recognized 
- Some warnings are unavoidable (e.g. unkonwn attribute)
- ppcg --version reports UNKNOWN for its own version

Future Features

- Detect -c and -E (+ others) compile modes
- Honor -x switch