NGHDL Installer (Ubuntu) ==== It contains all the documenation for making NGHDL executable (using PyInstaller) and NGHDL Installation Script on Ubuntu 14.04 and above. Separate installers are required to resolve dependencies only for GHDL and are mentioned below. ## NGDHL EXECUTABLE: 1. Download `virtualenv` package as: $ pip install virtualenv 2. Create a virtual environment as: $ virtualenv -p /usr/bin/python3 nghdl 3. Activate the virtual environment as: $ source nghdl/bin/activate 4. Install all Python dependencies for eSim within the virtual environment as: $ pip install pyinstaller $ pip install --upgrade 'setuptools<45.0.0' $ sudo apt install build-essential python3-dev libqt4-dev qt4-dev-tools $ mkdir nghdl/build $ cd nghdl/build/ $ wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz $ wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.21/sip-4.19.21.tar.gz $ tar xzvf sip-4.19.21.tar.gz $ tar xvzf PyQt4_gpl_x11-4.12.3.tar.gz $ cd sip-4.19.21/ $ python configure.py --sip-module PyQt4.sip $ make $ make install $ cd ../PyQt4_gpl_x11-4.12.3/ $ python configure.py $ make $ make install 5. Now uninstall PyQt4, sip, matplotlib, numpy, dateutil and cycler globally (if any). 6. Test whether only NGHDL dependencies are available or not: $ pip freeze > Note : Following dependencies should be available - > - PyQt4 > - sip 7. Create spec file as: $ pyi-makespec --onefile -n nghdl /src/ngspice_ghdl.py 8. Add `PyQt4.sip` as hiddenimports in the generated spec file. 9. Create onefile executable using pyinstaller as: $ pyinstaller -F --clean nghdl.spec 10. Verify whether all NGHDL `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller. ## Differences in Ubuntu 14.04, Ubuntu 16.04 and above installers (w.r.t GHDL): 1. Dependency on gnat : - Ubuntu 14.04 : gnat (v4.6) - Ubuntu 16.04 : gnat-5 (v5.4) - Ubuntu 18.04 : gnat-5 (v5.5) 2. Dependency on llvm : - Available version on Ubuntu 14.04 : llvm (v3.4) - Available version on Ubuntu 16.04 : llvm (v3.5) - Available version on Ubuntu 18.04 : llvm (v6.0) - Requires llvm version between 3.5 and 3.9 for compilation of GHDL with llvm config - Ubuntu 18.04 requires installation of LLVM on target machine as it is used during runtime of GHDL as shared library. 3. Dependency on gcc : - Ubuntu 14.04 and 16.04 : gcc (v5.4.0) is available without pie (i.e. position-independent executable) - Ubuntu 18.04 : gcc (v7.4.0) is available with pie enabled as default option. - Refer [this](https://github.com/ghdl/ghdl/issues/213) Github issue for dependency on gcc for Ubuntu 18.04 and above. ## GHDL Compilation: 1. Compilation of GHDL is OS specific and GHDL executables should be generated on that system for distribution on same OS configuration. 2. For distribution of GHDL (v0.36) on Ubuntu 14.04, directly use the llvm executable provided on GHDL's Github page. 3. For distribution of GHDL (v0.36) on Ubuntu 16.04 and above, follow the steps: a. Download source code (v0.36) from GHDL's Github page. b. Extract the tar file, open a terminal and change directory one-level inside. c. First install gnat(v5) dependency as: $ sudo apt install gnat-5 d. Install llvm(v3.9) dependency as: $ sudo apt install llvm-3.9 e. Install clang dependency: $ sudo apt install clang f. To compile GHDL, type following commands: $ sudo ./configure --with-llvm-config=/usr/bin/llvm-config-3.9 $ sudo make $ sudo make install