diff options
Diffstat (limited to 'doc/oldmds')
-rw-r--r-- | doc/oldmds/BUILD.txt | 140 | ||||
-rw-r--r-- | doc/oldmds/STYLE | 90 | ||||
-rw-r--r-- | doc/oldmds/gcc/ANNOUNCE | 21 | ||||
-rw-r--r-- | doc/oldmds/gcc/INSTALL | 21 | ||||
-rw-r--r-- | doc/oldmds/gcc/README | 51 | ||||
-rw-r--r-- | doc/oldmds/mcode-README | 47 |
6 files changed, 370 insertions, 0 deletions
diff --git a/doc/oldmds/BUILD.txt b/doc/oldmds/BUILD.txt new file mode 100644 index 000000000..27029b757 --- /dev/null +++ b/doc/oldmds/BUILD.txt @@ -0,0 +1,140 @@ +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 GHDL 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. + +In these instructions, the configure script is executed in the source +directory; but you can execute in a different directory too, like +this: +$ mkdir ghdl-objs +$ cd ghdl-objs +$ ../path/to/ghdl/configure ... + +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. +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. + +$ 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 5.x, 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 + +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 diff --git a/doc/oldmds/STYLE b/doc/oldmds/STYLE new file mode 100644 index 000000000..c7acb2756 --- /dev/null +++ b/doc/oldmds/STYLE @@ -0,0 +1,90 @@ +GHDL coding style +***************** + +Ada subset: use only a simple (VHDL like) subset of Ada: no tasking, no +controlled types... VHDL users should easily understand that subset. +Allowed Ada93 features: the standard library, child packages. +Use assertions. + +We try to follow the 'GNU Coding Standards' when possible: comments before +declarations, two spaces at end of sentences, finish sentences with a dot. +But: 3 spaces for indentation. + +No trailing spaces, not TAB (HT). + +Subprograms must have a comment before to describe it, like: + -- Analyze the concurrent statements of PARENT. + procedure Sem_Concurrent_Statement_Chain (Parent : Iir); +The line before the comment must be a blank line (unless this is the first +declaration). Don't repeat the comment before the subprogram body. + +* For subprograms: +1) Declare on one line when possible: + function Translate_Static_Aggregate (Aggr : Iir) return O_Cnode + +2) If not possible, put the return on the next line: + function Translate_Static_String (Str_Type : Iir; Str_Ident : Name_Id) + return O_Cnode + +3) If not possible, put parameters and return on the next line: + function Create_String_Literal_Var_Inner + (Str : Iir; Element_Type : Iir; Str_Type : O_Tnode) return Var_Type + +4) If not possible, return on the next line: + function Translate_Shortcut_Operator + (Imp : Iir_Implicit_Function_Declaration; Left, Right : Iir) + return O_Enode + +5) If not possible, one parameter per line, just after subprogram name: + procedure Translate_Static_Aggregate_1 (List : in out O_Array_Aggr_List; + Aggr : Iir; + Info : Iir; + El_Type : Iir) +6) If not possible, add a return after subprogram name: + function Translate_Predefined_TF_Array_Element + (Op : Predefined_Boolean_Logical; + Left, Right : Iir; + Res_Type : Iir; + Loc : Iir) + return O_Enode + +7) If not possible, ask yourself what is wrong! Shorten a name. + +* Rule for the 'is': one a new line only if the declarative part is not empty: + procedure Translate_Assign (Target : Mnode; Expr : Iir; Target_Type : Iir) + is + Val : O_Enode; + begin +vs + function Translate_Static_Range_Dir (Expr : Iir) return O_Cnode is + begin + +If the parametere line is too long with the 'is', put in on a separate line: + procedure Predeclare_Scope_Type + (Scope : in out Var_Scope_Type; Name : O_Ident) is + +* Generic instantiation: put the generic actual part on a new line: + procedure Free is new Ada.Unchecked_Deallocation + (Action_List, Action_List_Acc); + +* For if/then statement: +1) 'then' on the same line: + if Get_Expr_Staticness (Decl) = Locally then + +2) If not possible, 'then' is alone on its line aligned with the 'if': + if Expr = Null_Iir + or else Get_Kind (Expr) = Iir_Kind_Overflow_Literal + then + +3) For a multiline condition, 'or else' and 'and then' should start lines. + +* 'Local' variable declaration: +Do not initialize variables, constants must be declared before variables: + is + N_Info : constant Iir := Get_Sub_Aggregate_Info (Info); + Assoc : Iir; + Sub : Iir; + begin +If the initialization expression has a side effect (such as allocation), do +not use a constant. + diff --git a/doc/oldmds/gcc/ANNOUNCE b/doc/oldmds/gcc/ANNOUNCE new file mode 100644 index 000000000..7b1060e20 --- /dev/null +++ b/doc/oldmds/gcc/ANNOUNCE @@ -0,0 +1,21 @@ +I am happy to introduce GHDL. + +GHDL is a GCC front-end for the VHDL (IEEE 1076) language, an hardware design +language. + +Currently, GHDL implements most of VHDL-1987 and some features of +VHDL-1993. It is mature enough to compile and run some complex design (such +as a DLX processor and leon1, a SPARCv7 processor) + +GHDL has been developped on a GNU/Linux x86 system, and only this configuration +has been tested (porting to other processor or system should not be an hard +task, but there are system dependent files in the run time). + +GHDL is written in Ada95 (using GNAT) and relies on agcc, an Ada +binding for GCC. It also includes a run-time library (written in Ada), named +grt. The front-end and the library are both distributed under the GPL licence. + +For sources, binary tarballs, or for more information, go to +http://ghdl.free.fr + +Tristan Gingold. diff --git a/doc/oldmds/gcc/INSTALL b/doc/oldmds/gcc/INSTALL new file mode 100644 index 000000000..b341317b5 --- /dev/null +++ b/doc/oldmds/gcc/INSTALL @@ -0,0 +1,21 @@ +Install file for the binary distribution of GHDL. + +GHDL is Copyright 2002 - 2015 Tristan Gingold. +GHDL is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The binary are installed in /usr/local directory. You cannot change this +default location, unless you set links. + +You must be root to install this distribution. + +To install ghdl: +$ su +# tar -C / -jxvf @TARFILE@.tar.bz2 + +Note: you must also have a C compiler and zlib installed. + +Tristan Gingold. + diff --git a/doc/oldmds/gcc/README b/doc/oldmds/gcc/README new file mode 100644 index 000000000..c58e0f923 --- /dev/null +++ b/doc/oldmds/gcc/README @@ -0,0 +1,51 @@ +This is the README from the source distribution of GHDL. + +To get the binary distribution or more information, go to: + https://github.com/tgingold/ghdl + +Copyright: +********** +GHDL is copyright (c) 2002 - 2015 Tristan Gingold. +See the GHDL manual for more details. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + + +Building GHDL from sources: +*************************** + +See BUILD.txt + +Please report bugs and issues on https://github.com/tgingold/ghdl/issues + +If you cannot compile, please report the gcc version, GNAT version and gcc +source version. + +* Note for ppc64 (and AIX ?) platform: +The object file format contains an identifier for the source language. Because +gcc doesn't know about the 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): + else if (! strcmp (language_string, "GNU Objective-C")) + i = 14; + else +- gcc_unreachable (); ++ i = 0; + fprintf (file, "%d,", i); + + /* 8 single bit fields: global linkage (not set for C extern linkage, + +Tristan Gingold. diff --git a/doc/oldmds/mcode-README b/doc/oldmds/mcode-README new file mode 100644 index 000000000..1e591b0b5 --- /dev/null +++ b/doc/oldmds/mcode-README @@ -0,0 +1,47 @@ +This is the README from the source distribution of GHDL. + +To get the binary distribution or more information, go to http://ghdl.free.fr + +Copyright: +********** +GHDL is copyright (c) 2002, 2003, 2004, 2005 Tristan Gingold. +See the GHDL manual for more details. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + + +Building GHDL from sources for Windows: +*************************************** + +Note: this was tested with Windows XP SP2 familly edition. + +Note: If you want to create the installer, GHDL should be built on a +FAT partition. NSIS rounds files date to be FAT compliant (seconds are always +even) and because GHDL stores dates, the files date must not be modified. + +Required: +* the Ada95 GNAT compiler (GNAT GPL 2005 is known to work). +* NSIS to create the installer. + +Unzip, +edit winbuild to use correct path for makensis, +run winbuild. + +The installer is in the windows directory. + +Send bugs and comments on https://github.com/tgingold/ghdl + +Tristan Gingold. |