From e744e80104ba72a135c2f27f22d1d2da55ad8e06 Mon Sep 17 00:00:00 2001 From: rahulp13 Date: Sat, 17 Sep 2022 08:47:06 +0530 Subject: added install scripts for Digital IPs --- Ubuntu/sky130/VSD_Digital_IP.tar.xz | Bin 0 -> 50692 bytes Ubuntu/sky130/install-nghdl.sh | 336 ++++++++++++++++++++++++++++++++++ Windows/sky130/VSD_Digital_IP.7z | Bin 0 -> 48688 bytes Windows/sky130/nghdl-setup-script.nsi | 254 +++++++++++++++++++++++++ 4 files changed, 590 insertions(+) create mode 100644 Ubuntu/sky130/VSD_Digital_IP.tar.xz create mode 100755 Ubuntu/sky130/install-nghdl.sh create mode 100644 Windows/sky130/VSD_Digital_IP.7z create mode 100644 Windows/sky130/nghdl-setup-script.nsi diff --git a/Ubuntu/sky130/VSD_Digital_IP.tar.xz b/Ubuntu/sky130/VSD_Digital_IP.tar.xz new file mode 100644 index 0000000..1c2111a Binary files /dev/null and b/Ubuntu/sky130/VSD_Digital_IP.tar.xz differ diff --git a/Ubuntu/sky130/install-nghdl.sh b/Ubuntu/sky130/install-nghdl.sh new file mode 100755 index 0000000..6443ea6 --- /dev/null +++ b/Ubuntu/sky130/install-nghdl.sh @@ -0,0 +1,336 @@ +#!/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), VSD Digital IPs +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Fahim Khan, Rahul Paknikar, Sumanto Kar +# ORGANIZATION: eSim Team, FOSSEE at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Tuesday 13 September 2022 01:35 +#============================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-0.37" +verilator="verilator-4.210" +llvm_version="9" +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 +{ + + echo "Installing $ghdl LLVM................................." + 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 + + # 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 loadDigitalIP +{ + + echo "Loading Digital IPs........................." + tar -xJf VSD_Digital_IP.tar.xz + + cd VSD_Digital_IP/ + + # cat vsdips.lib >> /usr/share/kicad/library/eSim_Ngveri.lib + # rm vsdips.lib + + IPs=$(find * -maxdepth 0 -type d) + + cp -r * $HOME/$nghdl/src/xspice/icm/Ngveri/ + cp -r $(echo $IPs | cut --delimiter " " --fields 1)/verilated.o $HOME/$nghdl/src/xspice/icm/Ngveri/ + mkdir -p $HOME/$nghdl/release/src/xspice/icm/Ngveri/ + mv * $HOME/$nghdl/release/src/xspice/icm/Ngveri/ + for i in $IPs; do echo $i >> $HOME/$nghdl/src/xspice/icm/Ngveri/modpath.lst; done + + cd ../ + rm -rf VSD_Digital_IP/ + +} + + +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 + + loadDigitalIP + + 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 -f /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 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 + + 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/ +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi diff --git a/Windows/sky130/VSD_Digital_IP.7z b/Windows/sky130/VSD_Digital_IP.7z new file mode 100644 index 0000000..0b31605 Binary files /dev/null and b/Windows/sky130/VSD_Digital_IP.7z differ diff --git a/Windows/sky130/nghdl-setup-script.nsi b/Windows/sky130/nghdl-setup-script.nsi new file mode 100644 index 0000000..2f5b8dc --- /dev/null +++ b/Windows/sky130/nghdl-setup-script.nsi @@ -0,0 +1,254 @@ +!include "CPUFeatures.nsh" +!include "zipdll.nsh" + +;----------------------------------------------------------------------------------------- +; String replacement function +!define StrRep "!insertmacro StrRep" +!macro StrRep output string old new + Push `${string}` + Push `${old}` + Push `${new}` + !ifdef __UNINSTALL__ + Call un.StrRep + !else + Call StrRep + !endif + Pop ${output} +!macroend + +!macro Func_StrRep un + Function ${un}StrRep + Exch $R2 ;new + Exch 1 + Exch $R1 ;old + Exch 2 + Exch $R0 ;string + Push $R3 + Push $R4 + Push $R5 + Push $R6 + Push $R7 + Push $R8 + Push $R9 + + StrCpy $R3 0 + StrLen $R4 $R1 + StrLen $R6 $R0 + StrLen $R9 $R2 + loop: + StrCpy $R5 $R0 $R4 $R3 + StrCmp $R5 $R1 found + StrCmp $R3 $R6 done + IntOp $R3 $R3 + 1 ;move offset by 1 to check the next character + Goto loop + found: + StrCpy $R5 $R0 $R3 + IntOp $R8 $R3 + $R4 + StrCpy $R7 $R0 "" $R8 + StrCpy $R0 $R5$R2$R7 + StrLen $R6 $R0 + IntOp $R3 $R3 + $R9 ;move offset by length of the replacement string + Goto loop + done: + + Pop $R9 + Pop $R8 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R4 + Pop $R3 + Push $R0 + Push $R1 + Pop $R0 + Pop $R1 + Pop $R0 + Pop $R2 + Exch $R1 + FunctionEnd +!macroend +!insertmacro Func_StrRep "" +!insertmacro Func_StrRep "un." +;----------------------------------------------------------------------------------------- + +;----------------------------------------------------------------------------------------- +; NGHDL installation macro +Section "nghdl-loadsource" + SetOutPath $EXEDIR + + File "ghdl.7z" + File "verilator.7z" + File "mingw64.7z" + File "MSYS.7z" + File "nghdl.7z" + File "nghdl-simulator.7z" + File "VSD_Digital_IP.7z" +SectionEnd + +Section "nghdl" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\nghdl.7z" "Extracting NGHDL %s..." + EnVar::SetHKLM + DetailPrint "EnVar::SetHKLM" + EnVar::AddValue "Path" "$INSTDIR\eSim\nghdl\src" + Pop $0 + DetailPrint "EnVar::AddValue returned=|$0|" + Delete "$EXEDIR\nghdl.7z" +SectionEnd + +Section "msys2" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\MSYS.7z" "Extracting MSYS2 %s..." + EnVar::SetHKLM + EnVar::AddValue "Path" "$INSTDIR\MSYS\usr\bin" + Pop $0 + DetailPrint "EnVar::AddValue returned=|$0|" + Delete "$EXEDIR\MSYS.7z" +SectionEnd + +Section "mingw64" + SetOutPath $INSTDIR\MSYS + Nsis7z::ExtractWithDetails "$EXEDIR\mingw64.7z" "Extracting MinGW %s..." + EnVar::SetHKLM + EnVar::AddValue "Path" "$INSTDIR\MSYS\mingw64\bin" + Pop $0 + DetailPrint "EnVar::AddValue returned=|$0|" + Delete "$EXEDIR\mingw64.7z" +SectionEnd + +Section "ghdl" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\ghdl.7z" "Extracting GHDL %s..." + ;EnVar::SetHKLM + ;EnVar::AddValue "Path" "$INSTDIR\mingw64\GHDL\bin" + ;Pop $0 + ;DetailPrint "EnVar::AddValue returned=|$0|" + CopyFiles "$INSTDIR\GHDL\bin\*" "$INSTDIR\MSYS\mingw64\bin\" + CopyFiles "$INSTDIR\GHDL\include\*" "$INSTDIR\MSYS\mingw64\include\" + CopyFiles "$INSTDIR\GHDL\lib\*" "$INSTDIR\MSYS\mingw64\lib\" + RMDir /r "$INSTDIR\GHDL" + Delete "$EXEDIR\ghdl.7z" +SectionEnd + +Section "verilator" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\verilator.7z" "Extracting Verilator %s..." + CopyFiles "$INSTDIR\verilator\bin\*" "$INSTDIR\MSYS\mingw64\bin\" + CopyFiles "$INSTDIR\verilator\share\verilator\bin\*" "$INSTDIR\MSYS\mingw64\bin\" + CopyFiles "$INSTDIR\verilator\share\verilator\include\*" "$INSTDIR\MSYS\mingw64\include\" + CopyFiles "$INSTDIR\verilator\share\verilator\examples\*" "$INSTDIR\MSYS\mingw64\examples\" + CopyFiles "$INSTDIR\verilator\share\verilator\verilator-config.cmake" "$INSTDIR\MSYS\mingw64\" + CopyFiles "$INSTDIR\verilator\share\verilator\verilator-config-version.cmake" "$INSTDIR\MSYS\mingw64\" + CopyFiles "$INSTDIR\verilator\share\pkgconfig" "$INSTDIR\MSYS\mingw64\" + RMDir /r "$INSTDIR\verilator" + Delete "$EXEDIR\verilator.7z" +SectionEnd + +Section "envar-refresh" + ReadEnvStr $R0 "PATH" + StrCpy $R0 "$R0;$INSTDIR\eSim\nghdl\src;$INSTDIR\MSYS\mingw64\bin;$INSTDIR\MSYS\usr\bin;" + System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("PATH", R0).r0' +SectionEnd + +Section "install-nghdl-simulator" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\nghdl-simulator.7z" "Extracting NGHDL Simulator %s..." + + ;CopyFiles $INSTDIR\eSim\nghdl\src\outitf.c $INSTDIR\nghdl-simulator\src\frontend + + CopyFiles "$INSTDIR\MSYS\mingw64\x86_64-w64-mingw32\lib\libws2_32.a" "$INSTDIR\eSim\nghdl\src\ghdlserver" + + SetOutPath $INSTDIR\nghdl-simulator + CreateDirectory $INSTDIR\nghdl-simulator\release + SetOutPath $INSTDIR\nghdl-simulator\release + + Var /GLOBAL shellpath + Var /GLOBAL shellpath1 + Var /GLOBAL cpucores + + ${CPUFeatures.GetCount} $cpucores + + StrCpy $shellpath $INSTDIR + + ${StrRep} '$shellpath1' '$shellpath' '\' '/' + + ;FileOpen $0 "$INSTDIR\nghdl-simulator\release\installngspice.sh" w + ;FileWrite $0 `../configure --with-wingui --enable-xspice --disable-debug --prefix=$shellpath1/nghdl-simulator/install_dir --exec-prefix=$shellpath1/nghdl-simulator/install_dir &&$\n` + ;FileWrite $0 `make -j$cpucores &&$\n` + ;FileWrite $0 `make install$\n` + ;FileClose $0 + + ;nsExec::ExecToLog "$INSTDIR\mingw64\msys\bin\bash.exe installngspice.sh" + ;Delete $INSTDIR\nghdl-simulator\release\installngspice.sh + Delete "$EXEDIR\nghdl-simulator.7z" + + SetOutPath $INSTDIR + + EnVar::SetHKLM + EnVar::AddValue "Path" "$INSTDIR\nghdl-simulator\bin" + Pop $0 + DetailPrint "EnVar::AddValue returned=|$0|" +SectionEnd + +Section "load-digital-ip" + SetOutPath $INSTDIR + Nsis7z::ExtractWithDetails "$EXEDIR\VSD_Digital_IP.7z" "Extracting Digital IPs %s..." + + CopyFiles "$INSTDIR\VSD_Digital_IP\*" "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\" + CopyFiles "$INSTDIR\VSD_Digital_IP\*" "$INSTDIR\nghdl-simulator\release\src\xspice\icm\Ngveri\" + + FindFirst $0 $1 "$INSTDIR\VSD_Digital_IP\*.*" + loop: + StrCmp $1 "" done + ;DetailPrint "Subdir found: $1" + + StrCmp $1 "." skip + StrCmp $1 ".." skip + StrCmp $1 "verilated.o" skip + + FileOpen $2 "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\modpath.lst" a + FileSeek $2 0 END + FileWrite $2 `$1$\n` + FileClose $2 + + skip: + FindNext $0 $1 + Goto loop + done: + FindClose $0 + + CopyFiles "$INSTDIR\VSD_Digital_IP\verilated.o" "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\verilated.o" + + FileOpen $0 "$INSTDIR\nghdl-simulator\release\src\xspice\icm\install-ip.sh" w + FileWrite $0 `mingw32-make.exe -j$$(nproc)$\n` + FileClose $0 + + SetOutPath $INSTDIR\nghdl-simulator\release\src\xspice\icm + + nsExec::ExecToLog "$INSTDIR\MSYS\usr\bin\sh.exe install-ip.sh" + + SetOutPath $INSTDIR + + CopyFiles "$INSTDIR\nghdl-simulator\release\src\xspice\icm\Ngveri\Ngveri.cm" "$INSTDIR\nghdl-simulator\lib\ngspice\Ngveri.cm" + + Delete $INSTDIR\nghdl-simulator\release\src\xspice\icm\install-ip.sh + RMDir /r "$INSTDIR\VSD_Digital_IP" + Delete "$EXEDIR\VSD_Digital_IP.7z" +SectionEnd + +Section "nghdl-config.ini" + CreateDirectory $INSTDIR\eSim\library\config\.nghdl + FileOpen $0 "$INSTDIR\eSim\library\config\.nghdl\config.ini" w + FileWrite $0 `[NGHDL]$\n` + FileWrite $0 `NGHDL_HOME = $shellpath1/nghdl-simulator$\n` + FileWrite $0 `DIGITAL_MODEL = %(NGHDL_HOME)s/src/xspice/icm$\n` + FileWrite $0 `RELEASE = %(NGHDL_HOME)s/release$\n` + FileWrite $0 `[SRC]$\n` + FileWrite $0 `SRC_HOME = $shellpath1/eSim/nghdl$\n` + FileWrite $0 `LICENSE = %(SRC_HOME)s/LICENSE$\n` + FileWrite $0 `[COMPILER]$\n` + FileWrite $0 `MSYS_HOME = $shellpath1/MSYS$\n` + FileClose $0 +SectionEnd + +;------------------------------------------------------------------------------------- -- cgit