diff options
-rw-r--r-- | Fedora/README.md | 27 | ||||
-rw-r--r-- | Fedora/executable.md | 94 | ||||
-rw-r--r-- | Fedora/ghdl-0.37.tar.xz | bin | 0 -> 2950196 bytes | |||
-rw-r--r-- | Fedora/grt-signals.adb.patch | 11 | ||||
-rwxr-xr-x | Fedora/install-nghdl.sh | 313 | ||||
-rw-r--r-- | Fedora/nghdl.spec | 32 | ||||
-rw-r--r-- | Fedora/verilator-4.210.tar.xz | bin | 0 -> 2442908 bytes |
7 files changed, 477 insertions, 0 deletions
diff --git a/Fedora/README.md b/Fedora/README.md new file mode 100644 index 0000000..b0c9521 --- /dev/null +++ b/Fedora/README.md @@ -0,0 +1,27 @@ +NGHDL Installer (Ubuntu OS) +==== + +It contains the documentation to package NGHDL for Ubuntu OS. + +> Note: If planning to freeze the NGHDL source code for a target platform (Ubuntu OS), then refer this [documentation](executable.md). Remember to update the installer script to work with this executable! + +## How to package NGHDL for Ubuntu OS? + +1. Take the `master` branch containing the source code. Rename the folder to `nghdl`. + +2. Add GHDL source code `ghdl-<version>.tar.xz` from the `installers` branch in the `nghdl` folder. + +3. Add Verilator source code `verilator-<version>.tar.xz` from the `installers` branch in the `nghdl` folder. + +4. Add the installer script `install-nghdl.sh` from the `installers` branch in the `nghdl` folder. + +5. Add the NGHDL executable (if available) in `nghdl/src` folder. Also, remove following files from this folder: + - `.git` folder + - all python files (Applicable only if eSim executable is used) + - GHDLside.md + - Workflow.md + - .gitignore + +6. Compress it directly to the `.zip` format. + +7. Place this compressed file in `eSim-<version>` folder. diff --git a/Fedora/executable.md b/Fedora/executable.md new file mode 100644 index 0000000..9ac54a1 --- /dev/null +++ b/Fedora/executable.md @@ -0,0 +1,94 @@ +NGHDL Executable (Ubuntu OS) +==== + +> Note: It is not updated for the recently ported GUI to PyQt5 and Ubuntu 20.04 LTS. Currently, packaging for Ubuntu OS is done directly with the source code and not the executable. + +It contains the documentation for making NGHDL executable using PyInstaller on Ubuntu 16.04 and above. + + +## Freeze NGHDL source code: + +1. Download `virtualenv` package and create virtual environment as: + + $ pip install virtualenv + $ virtualenv -p /usr/bin/python3 nghdl + + OR + + $ sudo apt install -y python3-venv + $ python3 -m venv nghdl + +2. Activate the virtual environment as: + + $ source nghdl/bin/activate + +3. Install all Python dependencies for NGHDL within the virtual environment as: + + $ pip install wheel + $ 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 + +4. Now uninstall PyQt4, sip, matplotlib, numpy, dateutil and cycler globally (if any). + +5. Test whether only NGHDL dependencies are available or not: + + $ pip freeze + +> Note : Following dependencies should be available - +> - PyQt4 +> - sip + +6. Create spec file as: + + $ pyi-makespec --onefile -n nghdl <path_to_nghdl>/src/ngspice_ghdl.py + +7. Add `PyQt4.sip` as hiddenimports in the generated spec file. + +8. Create onefile executable using pyinstaller as: + + $ pyinstaller -F --clean nghdl.spec + +9. Verify whether all NGHDL `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller. + + +## Fully-Static Bundled Version of NGHDL: + +1. To create a [fully-static bundled version](https://github.com/pyinstaller/pyinstaller/wiki/FAQ#GNULinux) of NGHDL (through PyInstaller), use a tool like [StaticX](https://github.com/JonathonReinhart/staticx/). + +2. To create fully-static NGHDL : + + - Activate the virtual environment as: + + $ source nghdl/bin/activate + + - Install StaticX as: + + $ pip install staticx + $ pip install patchelf-wrapper + + - Create static NGHDL as: + + $ staticx /path/to/executable/nghdl /path/to/output/executable/nghdl + +3. To verify if all dynamic libraries are removed : + + - Type following command in a terminal : + + $ ldd path/to/output/executable/nghdl + + - Output of above command should be similar to ` not a dynamic executable` diff --git a/Fedora/ghdl-0.37.tar.xz b/Fedora/ghdl-0.37.tar.xz Binary files differnew file mode 100644 index 0000000..2442cb3 --- /dev/null +++ b/Fedora/ghdl-0.37.tar.xz diff --git a/Fedora/grt-signals.adb.patch b/Fedora/grt-signals.adb.patch new file mode 100644 index 0000000..0aa8471 --- /dev/null +++ b/Fedora/grt-signals.adb.patch @@ -0,0 +1,11 @@ +--- grt-signals.adb 2020-02-29 02:55:18.000000000 +0530 ++++ grt-signals.adb_fixed 2022-04-30 21:13:51.614954480 +0530 +@@ -551,7 +551,7 @@ + Proc := Get_Current_Process; + for I in 0 .. Sig.S.Nbr_Drivers - 1 loop + if Sig.S.Drivers (I).Proc = Proc then +- return Sig.S.Drivers (I)'Access; ++ return Sig.S.Drivers (I)'Unrestricted_Access; + end if; + end loop; + return null; diff --git a/Fedora/install-nghdl.sh b/Fedora/install-nghdl.sh new file mode 100755 index 0000000..49f3971 --- /dev/null +++ b/Fedora/install-nghdl.sh @@ -0,0 +1,313 @@ +#!/bin/bash +#========================================================== +# FILE: install-nghdl.sh +# +# USAGE: ./install-nghdl.sh --install +# OR +# ./install-nghdl.sh --uninstall +# +# DESCRIPTION: Installation script for Ngspice, GHDL +# and Verilator simulators (NGHDL) +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Fahim Khan, Rahul Paknikar, Sumanto Kar +# : Ashwith Rego (Fedora Port) +# ORGANIZATION: eSim, FOSSEE group at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Tuesday 02 February 2022 01:35 +#========================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-0.37" +verilator="verilator-4.210" +llvm_version="9.0" +config_dir="$HOME/.nghdl" +config_file="config.ini" +src_dir=`pwd` + +# Will be used to take backup of any file +sysdate="$(date)" +timestamp=`echo $sysdate|awk '{print $3"_"$2"_"$6"_"$4 }'` + + +# All functions goes here + +error_exit() { + echo -e "\n\nError! Kindly resolve above error(s) and try again." + echo -e "\nAborting Installation...\n" +} + + +function installDependency +{ + + echo "Installing dependencies for $ghdl LLVM................" + + echo "Installing Make..........................................." + sudo dnf install -y make + + echo "Installing GNAT..........................................." + sudo dnf install -y gcc-gnat + + echo "Installing LLVM-${llvm_version}........................................" + sudo dnf install -y llvm${llvm_version} llvm${llvm_version}-devel + + echo "Installing Clang.........................................." + sudo dnf install -y clang + + echo "Installing Zlib1g-dev....................................." + sudo dnf install -y zlib-devel + + # Specific dependency for canberra-gtk modules + echo "Installing Gtk Canberra modules..........................." + sudo dnf install -y libcanberra-gtk2 libcanberra-gtk3 + + # Specific dependency for nvidia graphic cards + echo "Installing graphics dependency for Ngspice source build" + echo "Installing libxaw7........................................" + sudo dnf install -y libXaw + + echo "Installing libxaw7-dev...................................." + sudo dnf install -y libXaw-devel + + echo "Installing dependencies for $verilator...................." + if [[ -n "$(which apt 2> /dev/null)" ]] + then + # Ubuntu + sudo apt install -y make autoconf g++ flex bison + elif [[ -n "$(which yum 2> /dev/null)" ]] + then + # yum based distro + sudo yum install make autoconf flex bison which -y + sudo yum groupinstall 'Development Tools' -y + elif [[ -n "$(which dnf 2> /dev/null)" ]] + then + # dnf distro (Fedora) + sudo dnf install make autoconf flex bison which -y + sudo dnf groupinstall 'Development Tools' -y + fi +} + + +function installGHDL +{ + + echo "Installing $ghdl LLVM................................." + tar -xJf $ghdl.tar.xz + echo "$ghdl successfully extracted" + echo "Changing directory to $ghdl installation" + cd $ghdl/ + echo "Patching file for Fedora" + patch -u src/grt/grt-signals.adb -i ../grt-signals.adb.patch + echo "Configuring $ghdl build as per requirements" + chmod +x configure + # Other configure flags can be found at - https://github.com/ghdl/ghdl/blob/master/configure + ./configure --with-llvm-config=/usr/bin/llvm-config-${llvm_version}-64 + echo "Building the install file for $ghdl LLVM" + make + sudo make install + + # set +e # Temporary disable exit on error + # trap "" ERR # Do not trap on error of any command + + # echo "Removing unused part of $ghdl LLVM" + # sudo rm -rf ../$ghdl + + # set -e # Re-enable exit on error + # trap error_exit ERR + + echo "GHDL installed successfully" + cd ../ + +} + + +function installVerilator +{ + + echo "Installing $verilator......................." + tar -xJf $verilator.tar.xz + echo "$verilator successfully extracted" + echo "Changing directory to $verilator installation" + cd $verilator + echo "Configuring $verilator build as per requirements" + chmod +x configure + ./configure + make -j$(nproc) + sudo make install + echo "Removing the unessential verilator files........" + rm -r docs + rm -r examples + rm -r include + rm -r test_regress + rm -r bin + ls -1 | grep -E -v 'config.status|configure.ac|Makefile.in|verilator.1|configure|Makefile|src|verilator.pc' | xargs rm -f + #sudo rm -v -r'!("config.status"|"configure.ac"|"Makefile.in"|"verilator.1"|"configure"|"Makefile"|"src"|"verilator.pc")' + + echo "Verilator installed successfully" + cd ../ + +} + + +function installNGHDL +{ + + echo "Installing NGHDL........................................" + + # Extracting NGHDL to Home Directory + cd $src_dir + tar -xJf $nghdl-source.tar.xz -C $HOME + mv $HOME/$nghdl-source $HOME/$nghdl + + echo "NGHDL extracted sucessfully to $HOME" + # Change to nghdl directory + cd $HOME/$nghdl + # Make local install directory + mkdir -p install_dir + # Make release directory for build + mkdir -p release + # Change to release directory + cd release + echo "Configuring NGHDL..........." + sleep 2 + + chmod +x ../configure + ../configure --enable-xspice --disable-debug --prefix=$HOME/$nghdl/install_dir/ --exec-prefix=$HOME/$nghdl/install_dir/ + + # Adding patch to Ngspice base code + # cp $src_dir/src/outitf.c $HOME/$nghdl/src/frontend + + make -j$(nproc) + make install + + # Make it executable + sudo chmod 755 $HOME/$nghdl/install_dir/bin/ngspice + + set +e # Temporary disable exit on error + trap "" ERR # Do not trap on error of any command + + echo "Removing previously installed Ngspice (if any)" + sudo dnf erase -y ngspice + + echo "NGHDL installed sucessfully" + echo "Adding softlink for the installed Ngspice" + + # Add symlink to the path + sudo rm /usr/bin/ngspice + + set -e # Re-enable exit on error + trap error_exit ERR + + sudo ln -sf $HOME/$nghdl/install_dir/bin/ngspice /usr/bin/ngspice + echo "Added softlink for Ngspice....." + +} + + +function createConfigFile +{ + + # Creating config.ini file and adding configuration information + # Check if config file is present + if [ -d $config_dir ];then + rm $config_dir/$config_file && touch $config_dir/$config_file + else + mkdir $config_dir && touch $config_dir/$config_file + fi + + echo "[NGHDL]" >> $config_dir/$config_file + echo "NGHDL_HOME = $HOME/$nghdl" >> $config_dir/$config_file + echo "DIGITAL_MODEL = %(NGHDL_HOME)s/src/xspice/icm" >> $config_dir/$config_file + echo "RELEASE = %(NGHDL_HOME)s/release" >> $config_dir/$config_file + echo "[SRC]" >> $config_dir/$config_file + echo "SRC_HOME = $src_dir" >> $config_dir/$config_file + echo "LICENSE = %(SRC_HOME)s/LICENSE" >> $config_dir/$config_file + +} + + +function createSoftLink +{ + # Make it executable + sudo chmod 755 $src_dir/src/ngspice_ghdl.py + + # Creating softlink + cd /usr/local/bin + if [[ -L nghdl ]];then + echo "Symlink was already present" + sudo unlink nghdl + fi + + sudo ln -sf $src_dir/src/ngspice_ghdl.py nghdl + echo "Added softlink for NGHDL....." + + cd $pwd + +} + + +##################################################################### +# Script start from here # +##################################################################### + +### Checking if file is passsed as argument to script + +if [ "$#" -eq 1 ];then + option=$1 +else + echo "USAGE : " + echo "./install-nghdl.sh --install" + exit 1; +fi + +## Checking flags +if [ $option == "--install" ];then + + set -e # Set exit option immediately on error + set -E # inherit ERR trap by shell functions + + # Trap on function error_exit before exiting on error + trap error_exit ERR + + #Calling functions + installDependency + if [ $? -ne 0 ];then + echo -e "\n\n\nERROR: Unable to install required packages. Please check your internet connection.\n\n" + exit 0 + fi + installGHDL + installVerilator + installNGHDL + createConfigFile + createSoftLink + +elif [ $option == "--uninstall" ];then + sudo rm -rf $HOME/$nghdl $HOME/.nghdl /usr/share/kicad/library/eSim_Nghdl.lib /usr/local/bin/nghdl /usr/bin/ngspice + + echo "Removing GHDL......................" + cd $ghdl/ + sudo make uninstall + cd ../ + sudo rm -rf $ghdl/ + # sudo rm -rf /usr/local/bin/ghdl /usr/local/bin/ghdl1-llvm /usr/local/lib/ghdl /usr/local/lib/libghdlvpi.so /usr/local/include/vpi_user.h + + echo "Removing Verilator................." + cd $verilator/ + sudo make uninstall + cd ../ + sudo rm -rf $verilator/ + + echo "Removing libxaw7-dev..............." + sudo dnf erase -y libXaw-devel + echo "Removing LLVM......................" + sudo dnf erase -y llvm${llvm_version} llvm${llvm_version}-devel + echo "Removing GNAT......................" + sudo dnf erase -y gcc-gnat +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi diff --git a/Fedora/nghdl.spec b/Fedora/nghdl.spec new file mode 100644 index 0000000..61f3fa8 --- /dev/null +++ b/Fedora/nghdl.spec @@ -0,0 +1,32 @@ +# -*- mode: python ; coding: utf-8 -*- + +block_cipher = None + +a = Analysis(['nghdl/src/ngspice_ghdl.py'], + pathex=['/home/rahul/Music'], + binaries=[], + datas=[], + hiddenimports=['PyQt4.sip'], + hookspath=[], + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False) +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='nghdl', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True ) diff --git a/Fedora/verilator-4.210.tar.xz b/Fedora/verilator-4.210.tar.xz Binary files differnew file mode 100644 index 0000000..4d3d4c1 --- /dev/null +++ b/Fedora/verilator-4.210.tar.xz |