GHDL is architectured like a traditionnal compiler. It has:
a driver (sources in src/ghdldrv) to call the programs (compiler, assembler, linker) if needed.
a runtime library named GRT (sources in src/grt) to help execution at run-time. This ensures that execution is cycle-accurate.
multiple back-ends to generate either code or netlists.
The architecture is modular. For example, the front-end in the
libghdl library is used for the language server.
The main work is performed by the front-end, which is documented in the next chapter.