GCC backend

Todo

Instructions to build GHDL with GCC backend on Windows are not available yet.

Requirements

  • GCC (Gnu Compiler Collection)
  • GNAT (Ada compiler for GCC)
  • GCC source files. Download and untar the sources of version 4.9.x, 5.x, 6.x or 7.x.

Hint

There are some dependencies for building GCC (gmp, mpfr and mpc). If you have not installed them on your system, you can either build them manually or use the download_prerequisites script provided in the GCC source tree (recommended): cd /path/to/gcc/source/dir && ./contrib/download_prerequisites.

  • First configure GHDL, specify GCC source directory and installation prefix (like /usr/local or /opt/ghdl).
  • Next, invoke make copy-sources to copy GHDL sources in the source directory.
  • Then, configure GCC. The list of --disable configure options can be adjusted to your needs. GHDL does not require all these optional libraries and disabling them will speed up the build.
  • Now, build and install GCC with make.
  • Last, build and install GHDL libraries.

Example:

$ cd <ghdl>
$ mkdir build
$ cd build
$ ../configure --with-gcc=/path/to/gcc/source/dir --prefix=/usr/local
$ make copy-sources
$ mkdir gcc-objs; cd gcc-objs
$ /path/to/gcc/source/dir/configure --prefix=/usr/local --enable-languages=c,vhdl \
--disable-bootstrap --disable-lto --disable-multilib --disable-libssp \
--disable-libgomp --disable-libquadmath
$ make -j2 && make install
$ cd /path/to/ghdl/source/dir/build
$ make ghdllib
$ make install

Hint

Note that the prefix directory to configure gcc must be the same as the one used to configure GHDL. If you have manually built gmp/mpfr/mpc (without using the script in contrib), and, if you have installed them in a non-standard directory, you may need to add --with-gmp=GMP_INSTALL_DIR.

Hint

If your system gcc was configured with --enable-default-pie (check if that option appears in the output of gcc -v), you should also add it.

Hint

If you don’t want to install makeinfo, do make install MAKEINFO=true instead.

Hint

Once GCC (with GHDL) has been built once, it is possible to work on the GHDL source tree without copying it in the GCC tree. Commands are:

$ make ghdl1-gcc           # Build the compiler
$ make ghdl_gcc            # Build the driver
$ make libs.vhdl.local_gcc # Compile the vhdl libraries
$ make grt-all             # Build the GHDL runtime
$ make install.vpi.local   # Locally install vpi files

In src/ortho/gcc, create a Makefile.conf file that sets the following variables:

AGCC_GCCSRC_DIR=/path/to/gcc/sources
AGCC_GCCOBJ_DIR=/path/to/gcc/build

If your system gcc was built with --enable-default-pie, add -no-pie option for linking.

Hint

For ppc64 (and AIX ?) platform, the object file format contains an identifier for the source language. Because gcc doesn’t know about VHDL, gcc crashes very early. This could be fixed with a very simple change in gcc/config/rs6000/rs6000.c, function rs6000_output_function_epilogue (as of gcc 4.8):

          || ! strcmp (language_string, "GNU GIMPLE")
          || ! strcmp (language_string, "GNU Go")
          || ! strcmp (language_string, "GNU D")
-         || ! strcmp (language_string, "libgccjit"))
+         || ! strcmp (language_string, "libgccjit")
+         || ! strcmp (language_string, "vhdl"))
        i = 0;