GHDL backends
=============

In a deviation from upstream which installs a single backend selected at compile
time, the Debian packaging offers all three backends and also allows them all to
be installed at the same time.

GHDL offers three machine code generation backends: one based on GCC, one using
the LLVM compiler suite and a GHDL specific one called mcode. These are
available in the ghdl-gcc, ghdl-llvm and ghdl-mcode packages respectively. Both
the GCC and LLVM backends create highly optimized code for excellent simulation
performance while simulations compiled with the GCC backend also allow coverage
testing using gcov. The mcode backend creates less performant code but makes up
for it with much faster compilation. It is therefore preferable for smaller
projects without large or long running simulations.

The GHDL executable /usr/bin/ghdl is a wrapper that will execute the first
installed backend it finds in the order mcode, gcc, llvm. If you want to run
GHDL with a specific backend you can directly run their executable, named
ghdl-mcode, ghdl-gcc and ghdl-llvm respectively. Alternatively, you can run
/usr/bin/ghdl with the GHDL_BACKEND environment variable set to mcode, gcc or
llvm to select a backend. If the backend in GHDL_BACKEND is not installed or
invalid, the wrapper will silently revert to selecting the first installed
backend it finds.


Build profiles
==============

When building the Debian package from source, it is possible to skip building
any of the backends using the build profile mechanism. The profiles are named
pkg.ghdl.nogcc, pkg.ghdl.nollvm and pkg.ghdl.nomcode.
