1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
.. _BUILD:
Building GHDL from Sources
##########################
.. toctree::
:hidden:
Sources
mcode
LLVM
GCC
GHDL can be downloaded as a `tarball <https://github.com/ghdl/ghdl/archive/master.tar.gz>`__/`zipfile <https://github.com/ghdl/ghdl/archive/master.zip>`__
or cloned with ``git clone`` from GitHub. GitHub offers HTTPS and SSH as transfer protocols. See the :ref:`SOURCES` page for
further details.
.. IMPORTANT::
Since GHDL is written in `Ada`, independently of the code generator
you use, a compiler is required. Most GNU/Linux package managers
provide ``gcc-ada`` or ``gcc-gnat`` (which could be outdated).
MSYS2 also provides ``gcc-ada`` for `MinGW64` and `UCRT64`.
.. ATTENTION::
Since ``v0.37``, GHDL's synthesis features require GCC >=8.1, due to some new GNAT features which are not available in
previous releases.
GHDL currently supports three different back-ends (code generators):
* mcode - built-in in-memory x86 (or x86_64) code generator
* GCC - Gnu Compiler Collection (`gcc.gnu.org <http://gcc.gnu.org/>`_)
* LLVM - Low-Level Virtual Machine (`llvm.org <http://llvm.org/>`_)
Here is a short comparison, so that you can choose the one you want to use:
+----------------------------+----------------------------------------------------------------------------+---------------------------------------------------------+
| Back-end | Pros | Cons |
+============================+============================================================================+=========================================================+
| :ref:`mcode <BUILD:mcode>` | * Very easy to build | * Simulation is slower |
| | * Very quick analysis | * x86_64/i386 only |
| | * Can handle very large designs | |
| | * Base simulation time can be modified for speeding up execution | |
+----------------------------+----------------------------------------------------------------------------+---------------------------------------------------------+
| :ref:`LLVM <BUILD:llvm>` | * Generated code is faster | * Build is more complex than mcode |
| | * Generated code can be debugged (with ``-g``) | |
| | * Easier to build than GCC | |
| | * Ported to many platforms (x86, x86_64, armv7/aarch64) | |
+----------------------------+----------------------------------------------------------------------------+---------------------------------------------------------+
| :ref:`GCC <BUILD:gcc>` | * Generated code is faster (particularly with ``-O`` or ``-O2``) | * Build is even more complex |
| | * Generated code can be debugged (with ``-g``) | * Analysis can take time (particularly for large units) |
| | * Ported to many platforms (x86, x86_64, PowerPC, SPARC) | * Code coverage collection (``gcov``) is unique to GCC |
+----------------------------+----------------------------------------------------------------------------+---------------------------------------------------------+
.. HINT ::
The output of both GCC and LLVM is an executable file, but `mcode` does not generate any. Therefore, if using GCC/LLVM,
the call with argument ``-r`` can be replaced with direct execution of the binary. See section :ref:`USING:QuickStart:Simulation`.
After making your choice, you can jump to the corresponding section.
However, we suggest you to read :ref:`BUILD:dir_structure` first, so that you
know where the content will be placed and which files are expected to be
created.
.. HINT ::
In these instructions, the configure script is executed in the source directory; but you can execute in a different
directory too, like this:
.. CODE:: Bash
$ mkdir ghdl-objs
$ cd ghdl-objs
$ ../path/to/ghdl/configure ...
.. HINT ::
For MacOS 10.15 (Catalina), see :ghdlsharp:`1368` for workarounds to link failures.
TL;DR
=====
In order to follow the traditional way to ``configure`` and ``make``, you need an Ada compiler.
.. HINT::
Depending on the OS and distribution you are using, you will also need to install some toolchain dependencies, such as
``zlib``.
To use mcode backend (easiest to build), in the GHDL base directory, configure and build:
.. code-block::
$ ./configure --prefix=/usr/local
$ make
At that place, you can already use the `ghdl_mcode` built in the directory. You can also install GHDL:
.. code-block::
$ make install
That's all!
.. HINT::
The executable is installed as 'ghdl' in ``/usr/local``. To install it to a different path, change the ``--prefix`` in the
call to ``configure``. For example, on Windows, you may want to set it to ``--prefix=/c/Program Files (x86)/GHDL``.
|