diff --git a/Ubuntu/install-nghdl-scripts/install-nghdl-22.04.sh b/Ubuntu/install-nghdl-scripts/install-nghdl-22.04.sh new file mode 100644 index 0000000..80e93e8 --- /dev/null +++ b/Ubuntu/install-nghdl-scripts/install-nghdl-22.04.sh @@ -0,0 +1,312 @@ +#!/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, +# Shiva Krishna Sangati, Jayanth Tatineni, Anshul Verma +# ORGANIZATION: eSim, FOSSEE group at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Monday 23 June 2025 15:20 +#========================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-4.1.0" +verilator="verilator-4.210" +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 apt install -y make + + echo "Installing GNAT..........................................." + sudo apt install -y gnat + + # It will remove older versions of llvm if any + echo "Removing older LLVM........................................" + sudo apt remove -y llvm llvm-dev + + echo "Installing LLVM........................................" + sudo apt install -y llvm llvm-dev + + echo "Installing Clang.........................................." + sudo apt install -y clang + + echo "Installing Zlib1g-dev....................................." + sudo apt install -y zlib1g-dev + + # Specific dependency for canberra-gtk modules + echo "Installing Gtk Canberra modules..........................." + sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module + + # Specific dependency for nvidia graphic cards + echo "Installing graphics dependency for Ngspice source build" + echo "Installing libxaw7........................................" + sudo apt install -y libxaw7 + + echo "Installing libxaw7-dev...................................." + sudo apt install -y libxaw7-dev + + + echo "Installing dependencies for $verilator...................." + if [[ -n "$(which apt 2> /dev/null)" ]] + then + # Ubuntu + sudo apt install -y make autoconf g++ flex bison + else [[ -n "$(which yum 2> /dev/null)" ]] + # Ubuntu + sudo yum install make autoconf flex bison which -y + sudo yum groupinstall 'Development Tools' -y + fi + +} + + + +function installGHDL +{ + + echo "Installing $ghdl LLVM................................." + tar xvf $ghdl.tar.gz + echo "$ghdl successfully extracted" + echo "Changing directory to $ghdl installation" + cd $ghdl/ + 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 + echo "Building the install file for $ghdl LLVM" + make -j$(nproc) + 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 -xvf $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 apt-get purge -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 apt purge -y libxaw7-dev + echo "Removing LLVM......................" + sudo apt-get purge -y llvm-${llvm_version} llvm-${llvm_version}-dev + echo "Removing GNAT......................" + sudo apt purge -y gnat +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi diff --git a/Ubuntu/install-nghdl-scripts/install-nghdl-23.04.sh b/Ubuntu/install-nghdl-scripts/install-nghdl-23.04.sh new file mode 100644 index 0000000..e9ec630 --- /dev/null +++ b/Ubuntu/install-nghdl-scripts/install-nghdl-23.04.sh @@ -0,0 +1,326 @@ +#!/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, +# Jayanth Tatineni, Anshul Verma +# ORGANIZATION: eSim, FOSSEE group at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Monday 23 June 2025 15:20 +#========================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-gha-ubuntu-22.04-llvm" +verilator="verilator-4.210" +llvm_version="15" +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 apt install -y make + + echo "Installing GNAT..........................................." + sudo apt install -y gnat + + echo "Installing LLVM-${llvm_version}........................................" + sudo apt install -y llvm-${llvm_version} llvm-${llvm_version}-dev + + echo "Installing Clang.........................................." + sudo apt install -y clang + + echo "Installing Zlib1g-dev....................................." + sudo apt install -y zlib1g-dev + + # Specific dependency for canberra-gtk modules + echo "Installing Gtk Canberra modules..........................." + sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module + + # Specific dependency for nvidia graphic cards + echo "Installing graphics dependency for Ngspice source build" + echo "Installing libxaw7........................................" + sudo apt install -y libxaw7 + + echo "Installing libxaw7-dev...................................." + sudo apt install -y libxaw7-dev + + + echo "Installing dependencies for $verilator...................." + if [[ -n "$(which apt 2> /dev/null)" ]] + then + # Ubuntu + sudo apt install -y make autoconf g++ flex bison + else [[ -n "$(which yum 2> /dev/null)" ]] + # Ubuntu + sudo yum install make autoconf flex bison which -y + sudo yum groupinstall 'Development Tools' -y + fi + +} + + +function installGHDL +{ + + # Create a directory for the version + mkdir -p "$ghdl" + + # Navigate to the new directory + cd "$ghdl" || exit + + echo "Downloading $ghdl..." + wget https://github.com/ghdl/ghdl/releases/download/v4.1.0/$ghdl.tgz + + if [ ! -f "$ghdl.tgz" ]; then + echo "Error: Could not download $ghdl.tgz" + exit 1 + fi + + echo "Installing $ghdl LLVM................................." + tar -xzf $ghdl.tgz + #tar -xJf $ghdl.tar.xz + echo "$ghdl successfully extracted" + echo "Changing directory to $ghdl installation" + #cd $ghdl/ + 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} + echo "Building the install file for $ghdl LLVM" + #make + #sudo make install + sudo cp bin/* /usr/local/bin/ # Copy binaries to /usr/local/bin + sudo cp -r include/* /usr/local/include/ # Copy header files to /usr/local/include + sudo cp -r lib/* /usr/local/lib/ # Copy library files to /usr/local/lib + + # 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" + sed -i '/#include /a #include ' ./verilator-4.210/src/V3Const.cpp + 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 apt-get purge -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 apt purge -y libxaw7-dev + echo "Removing LLVM......................" + sudo apt-get purge -y llvm-${llvm_version} llvm-${llvm_version}-dev + echo "Removing GNAT......................" + sudo apt purge -y gnat +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi diff --git a/Ubuntu/install-nghdl-scripts/install-nghdl-24.04.sh b/Ubuntu/install-nghdl-scripts/install-nghdl-24.04.sh new file mode 100644 index 0000000..61c5be0 --- /dev/null +++ b/Ubuntu/install-nghdl-scripts/install-nghdl-24.04.sh @@ -0,0 +1,312 @@ +#!/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, +# Harsha Narayana P, Jayanth Tatineni, Anshul Verma +# ORGANIZATION: eSim, FOSSEE group at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Monday 23 June 2025 15:20 +#========================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-4.1.0" +verilator="verilator-4.210" +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 apt install -y make + + echo "Installing GNAT..........................................." + sudo apt install -y gnat + + # It will remove older versions of llvm if any + echo "Removing older LLVM........................................" + sudo apt remove -y llvm llvm-dev + + echo "Installing LLVM........................................" + sudo apt install -y llvm llvm-dev + + echo "Installing Clang.........................................." + sudo apt install -y clang + + echo "Installing Zlib1g-dev....................................." + sudo apt install -y zlib1g-dev + + # Specific dependency for canberra-gtk modules + echo "Installing Gtk Canberra modules..........................." + sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module + + # Specific dependency for nvidia graphic cards + echo "Installing graphics dependency for Ngspice source build" + echo "Installing libxaw7........................................" + sudo apt install -y libxaw7 + + echo "Installing libxaw7-dev...................................." + sudo apt install -y libxaw7-dev + + + echo "Installing dependencies for $verilator...................." + if [[ -n "$(which apt 2> /dev/null)" ]] + then + # Ubuntu + sudo apt install -y make autoconf g++ flex bison + else [[ -n "$(which yum 2> /dev/null)" ]] + # Ubuntu + sudo yum install make autoconf flex bison which -y + sudo yum groupinstall 'Development Tools' -y + fi + +} + + + +function installGHDL +{ + + echo "Installing $ghdl LLVM................................." + tar xvf $ghdl.tar.gz + echo "$ghdl successfully extracted" + echo "Changing directory to $ghdl installation" + cd $ghdl/ + 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 + echo "Building the install file for $ghdl LLVM" + make -j$(nproc) + 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 -xvf $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 apt-get purge -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 apt purge -y libxaw7-dev + echo "Removing LLVM......................" + sudo apt-get purge -y llvm-${llvm_version} llvm-${llvm_version}-dev + echo "Removing GNAT......................" + sudo apt purge -y gnat +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi \ No newline at end of file diff --git a/Ubuntu/install-nghdl.sh b/Ubuntu/install-nghdl.sh index fb618a6..21d2016 100755 --- a/Ubuntu/install-nghdl.sh +++ b/Ubuntu/install-nghdl.sh @@ -12,300 +12,70 @@ # REQUIREMENTS: --- # BUGS: --- # NOTES: --- -# AUTHOR: Fahim Khan, Rahul Paknikar, Sumanto Kar +# AUTHOR: Fahim Khan, Rahul Paknikar, Sumanto Kar, Jayanth Tatineni, +# Anshul Verma, Shiva Krishna Sangati, Harsha Narayana P # ORGANIZATION: eSim, FOSSEE group at IIT Bombay -# CREATED: Tuesday 02 December 2014 17:01 -# REVISION: Tuesday 31 December 2024 21:38 +# CREATED: Monday 23 June 2025 15:20 +# REVISION: --- #========================================================== -nghdl="nghdl-simulator" -ghdl="ghdl-4.1.0" -verilator="verilator-4.210" -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 to detect Ubuntu version and full version string +get_ubuntu_version() { + VERSION_ID=$(grep "^VERSION_ID" /etc/os-release | cut -d '"' -f 2) + FULL_VERSION=$(lsb_release -d | grep -oP '\d+\.\d+\.\d+') + echo "Detected Ubuntu Version: $FULL_VERSION" } - -function installDependency -{ - - echo "Installing dependencies for $ghdl LLVM................" - - echo "Installing Make..........................................." - sudo apt install -y make - - echo "Installing GNAT..........................................." - sudo apt install -y gnat +# Function to choose and run the appropriate script +run_version_script() { + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/install-nghdl-scripts" - # It will remove older versions of llvm if any - echo "Removing older LLVM........................................" - sudo apt remove -y llvm llvm-dev - - echo "Installing LLVM........................................" - sudo apt install -y llvm llvm-dev - - echo "Installing Clang.........................................." - sudo apt install -y clang - - echo "Installing Zlib1g-dev....................................." - sudo apt install -y zlib1g-dev - - # Specific dependency for canberra-gtk modules - echo "Installing Gtk Canberra modules..........................." - sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module - - # Specific dependency for nvidia graphic cards - echo "Installing graphics dependency for Ngspice source build" - echo "Installing libxaw7........................................" - sudo apt install -y libxaw7 - - echo "Installing libxaw7-dev...................................." - sudo apt install -y libxaw7-dev - - - echo "Installing dependencies for $verilator...................." - if [[ -n "$(which apt 2> /dev/null)" ]] - then - # Ubuntu - sudo apt install -y make autoconf g++ flex bison - else [[ -n "$(which yum 2> /dev/null)" ]] - # Ubuntu - sudo yum install make autoconf flex bison which -y - sudo yum groupinstall 'Development Tools' -y - fi - -} - - - -function installGHDL -{ - - echo "Installing $ghdl LLVM................................." - tar xvf $ghdl.tar.gz - echo "$ghdl successfully extracted" - echo "Changing directory to $ghdl installation" - cd $ghdl/ - 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 - echo "Building the install file for $ghdl LLVM" - make -j$(nproc) - 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 -xvf $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 apt-get purge -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 + # Decide script based on full version + case $VERSION_ID in + "22.04") + if [[ "$FULL_VERSION" == "22.04.4" ]]; then + SCRIPT="$SCRIPT_DIR/install-nghdl-22.04.sh" + else + SCRIPT="$SCRIPT_DIR/install-nghdl-23.04.sh" + fi + ;; + "23.04") + SCRIPT="$SCRIPT_DIR/install-nghdl-23.04.sh" + ;; + "24.04") + SCRIPT="$SCRIPT_DIR/install-nghdl-24.04.sh" + ;; + *) + echo "Unsupported Ubuntu version: $VERSION_ID ($FULL_VERSION)" + exit 1 + ;; + esac + + # Run the script if found + if [[ -f "$SCRIPT" ]]; then + echo "Running script: $SCRIPT $ARGUMENT" + bash "$SCRIPT" "$ARGUMENT" 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 + echo "Installation script not found: $SCRIPT" + exit 1 fi - - sudo ln -sf $src_dir/src/ngspice_ghdl.py nghdl - echo "Added softlink for NGHDL....." - - cd $pwd - } +# --- Main Execution Starts Here --- -##################################################################### -# 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; +# Validate argument +if [[ $# -ne 1 ]]; then + echo "Usage: $0 --install | --uninstall" + 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 apt purge -y libxaw7-dev - echo "Removing LLVM......................" - sudo apt-get purge -y llvm-${llvm_version} llvm-${llvm_version}-dev - echo "Removing GNAT......................" - sudo apt purge -y gnat -else - echo "Please select the proper operation." - echo "--install" - echo "--uninstall" +ARGUMENT=$1 +if [[ "$ARGUMENT" != "--install" && "$ARGUMENT" != "--uninstall" ]]; then + echo "Invalid argument: $ARGUMENT" + echo "Usage: $0 --install | --uninstall" + exit 1 fi + +get_ubuntu_version +run_version_script