Difference between revisions of "Toolchain"
(→The nu+ LLVM Structure) |
|||
Line 45: | Line 45: | ||
== The nu+ LLVM Structure == | == The nu+ LLVM Structure == | ||
− | The nu+ toolchain relies on the LLVM project, version 7.0, providing | + | The nu+ toolchain relies on the LLVM project, version 7.0, providing a custom implementation of its libraries in order to make possible the generation of nu+ kernels. |
[http://clang.llvm.org Clang] is the compiler frontend for nu+, extended to handle the token-recognition of custom intrinsic functions. | [http://clang.llvm.org Clang] is the compiler frontend for nu+, extended to handle the token-recognition of custom intrinsic functions. |
Revision as of 12:10, 31 March 2019
The nu+ toolchain is a collection of tools required to compile a nu+ executable application. It is based on the LLVM project leveraging on a custom version of the Clang Frontend and on a from-scratch implementation of the Backend. The toolchain comes with a modified version of LLD, an elf2hex tool to generate nu+ compatible memory images and lastly a custom version of the objdump tool for debug purposes. A custom implementation of the libc libraries is provided.
The toolchain supports the compilation of C-based and OpenCL C kernels.
Contents
Building Toolchain on Ubuntu Linux environment
This section shows how to build the nu+ toolchain in an Ubuntu Linux environment. The following steps are still valid in any other Unix-based system despite of package manager related differences.
Required Software
The nu+ toolchain installation relies on the following dependencies:
- Git
- GCC
- CMake
- Python 2.7
- libxml
- Zlib
- Bison
- Flex
- Libedit
- Swig
- ncurses libraries
- Ninja
The following terminal command may be used to install all required software:
$ sudo apt install libxml2-dev git cmake gcc g++ python bison flex zlib1g-dev swig python-dev libedit-dev libncurses5-dev ninja
Building Process
First, you have to obtain the source code from the official repository by typing the following command:
$ git clone https://gitlab.com/catecio/NuPlusLLVM.git <clone_directory>
The repository contains a helper script, setup.sh to make easier the installation process. To build a new implementation of the nu+ toolchain just type:
$ ./setup.sh -n
This command starts the compilation process, installing the toolchain in Release Mode in /usr/local/llvm-nuplus
.
If a debug version is required, add the -d
flag to setup.sh. You can also choose the number of threads for the compilation process, by using the -t=<number_of_threads>
parameter.
At the end of the compilation process, libraries are required to be linked to the installation folder:
$ ./setup.sh -l
Now, you can use the toolchain to build your own application.
The nu+ LLVM Structure
The nu+ toolchain relies on the LLVM project, version 7.0, providing a custom implementation of its libraries in order to make possible the generation of nu+ kernels.
Clang is the compiler frontend for nu+, extended to handle the token-recognition of custom intrinsic functions.
LLVM core libraries are used to implement a custom backend for nu+, to manage the code lowering on the target-device.
LLD is adapted to match nu+ architecture requirements for linking.
objdump is provided to disassemble and analyze the generated code.
elf2hex is a tool required for memory image generation.
Check the following links for detailed informations on how the toolchain is implemented.