aboutsummaryrefslogtreecommitdiffstats
path: root/BUILD.txt
blob: 4f12e0deb822db24ba60bd8a040ed671609422d6 (plain)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Build GHDL (Long instructions)
******************************

GHDL supports many backend (code generator), so you first must choose
the backend you want to use.  There are currently 3 supported backends:

* gcc
* mcode (this is an internal code generator for x86_64 and i386)
* llvm (experimental)

Here is a short comparaison:

* gcc:
+ generated code is faster (particularly with -O or -O2)
+ generated code can be debugged (with -g)
+ the output is an executable
+ ported to many platforms (x86, x86_64, powerpc, sparc)
- analyze can takes time (particularly for big units)
- build is more complex

* mcode
+ very easy to build
- but x86_64/i386 only
+ very quick analysis time
+ can analyze very big designs
- simulation is slower
- no executable created

* llvm
+ same advantages of gcc (good generated code, debuggable)
+ easier to build than gcc

As GCC is written in Ada, you need to use the GNU Ada compiler (GNAT).
I recommend to use GNAT GPL from http://libre.adacore.com (free).
GHDL was tested with GNAT GPL 2014.  Any later version should work.
The only other dependency is zlib (On ubuntu/debian, install zlib1g-dev).

On UNIX and MinGW systems, you also need standard utilities like sh,
cmp or make.  On MSYS2 packages msys/diffutils and msys/make must be
installed.

Building with mcode backend
***************************

This is as simple as:
$ ./configure --prefix=PREFIX
  where PREFIX is the directory for installation
$ make
  This builds the ghdl_mcode executable, which can be used as is.
$ make install
  To install within PREFIX

Building with the gcc backend
*****************************

You need to download and untar the sources of
gcc version 4.9.x, 5.x, 6.x or 7.x

First configure ghdl, specify gcc source dir and prefix.
(replace /usr/local by your prefix directory):
$ ./configure --with-gcc=/path/to/gcc/source/dir --prefix=/usr/local

Then invoke make to copy ghdl sources in the source dir:
$ make copy-sources

There are some dependencies for building gcc (gmp, mpfr and mpc). If you have
not them installed on your system, you can either build them manually or use
the 'download_prerequisite' script provided in gcc source tree (recommended).

$ cd /path/to/gcc/source/dir
$ ./contrib/download_prerequisites

Then configure gcc.  The list of --disable configure options could be
adjusted for your needs.  GHDL don't require all these optional
libraries and disabling them speed-up the build. Note the prefix
directory 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.

$ mkdir gcc-objs; cd gcc-objs
$ ../gcc-4.9.3/configure --prefix=/usr/local --enable-languages=c,vhdl \
  --disable-bootstrap --disable-lto --disable-multilib \
  --disable-libssp --disable-libgomp --disable-libquadmath
$ make -j2

Install gcc:
$ make install
or if you don't want to install makeinfo:
$ make install MAKEINFO=true

Build and install vhdl libraries:
$ cd /path/to/ghdl/source/dir
$ make ghdllib
$ make install

Building with the llvm backend
******************************

You need to build and install llvm.  The supported versions are 3.5
till 3.9, but only debugging is only supported with llvm 3.5
(Usually llvm also depends on libedit).

First configure ghdl with '--with-llvm-config'
$ ./configure --with-llvm-config

If llvm-config is not in your path, you can specify it:
$ ./configure --with-llvm-config=LLVM_INSTALL/bin/llvm-config

If you want to have stack backtraces on errors (like assert failure or
index of out bounds), you need to configure and build libbacktrace from gcc
(you don't need to configure gcc), and add to configure:
  --with-backtrace-lib=/path-to-gcc-build/libbacktrace/.libs/libbacktrace.a

Then build with 'make' and install with 'make install'.

Notes for developpers
*********************

Developping with the gcc backend:
Once gcc (with ghdl) has been built once, it is possible to work on ghdl
sources tree without copying them in gcc tree. Commands are:
$ make ghdl1-gcc     	     # To build the compiler
$ make ghdl_gcc		     # To build the driver
$ make libs.vhdl.local_gcc   # To compile the vhdl libraries
$ make grt-all		     # To build the ghdl runtime
$ make grt.links	     # To locally install the ghdl runtime

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