Skip to content

Meinersbur/pencilcc

Repository files navigation

pencilcc
=============
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 get-polybench.sh script and bundled in the dist version)
- Python3 (Tested with version 3.4.2)


Installation
------------

	./configure
	make
	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.


Usage
-----

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