.. program:: ghdl
You may add additional files or options during the link of GHDL using
-Wl,
as described in :ref:`passing-options-to-other-programs`.
For example:
ghdl -e -Wl,-lm math_tb
will create the :file:`math_tb` executable with the :file:`lm` (mathematical) library.
Note the :file:`c` library is always linked with an executable.
Hint
The process for personal code is the same, provided the code is provided as a C source or compiled to an object file.
Analysis must be made of the HDL files, then elaboration with -e -Wl,personal.c [options...] primary_unit [secondary_unit]
as arguments.
Additional C or object files are flagged as separate -Wl,*
arguments. The elaboration step will compile the executable with the custom resources.
Further reading (particularly about the backend particularities) is at :ref:`Elaboration:command` and :ref:`Run:command`.
As explained previously in :ref:`Starting_a_simulation_from_a_foreign_program`, you can start a simulation from an Ada or C program. However the build process is not trivial: you have to elaborate your program and your VHDL design.
Hint
If the foreign language is C, this procedure is equivalent to the one described in :ref:`Linking_with_foreign_object_files`, which is easier. Thus, this procedure is explained for didactic purposes. When suitable, we suggest to use :option:`-e`, instead of :option:`--bind` and :option:`--list-link`.
First, you have to analyze all your design files. In this example, we suppose there is only one design file, :file:`design.vhdl`.
$ ghdl -a design.vhdl
Then, bind your design. In this example, we suppose the entity at the
design apex is design
.
$ ghdl --bind design
Finally, compile/bind your program and link it with your VHDL design:
in C:
gcc my_prog.c -Wl,`ghdl --list-link design`
in Ada:
$ gnatmake my_prog -largs `ghdl --list-link design`
See :ref:`gccllvm-only-programs` for further details about :option:`--bind` and :option:`--list-link`.