diff options
-rw-r--r-- | NgspiceChanges.md | 65 | ||||
-rw-r--r-- | Ngspice_Version_Change.md | 68 | ||||
-rw-r--r-- | README.md | 16 | ||||
-rw-r--r-- | Ubuntu/README.md | 159 | ||||
-rw-r--r-- | Windows/README.md (renamed from Windows/readme.md) | 0 |
5 files changed, 90 insertions, 218 deletions
diff --git a/NgspiceChanges.md b/NgspiceChanges.md deleted file mode 100644 index 5bf5afb..0000000 --- a/NgspiceChanges.md +++ /dev/null @@ -1,65 +0,0 @@ -# Changes for Ngspice version upgrade - -1. Manually add the GHDL server close patch (header files and “close_server” function at the appropriate location) in the outitf.c which comes with the new Ngspice version ->Refer to previous version of NGHDL outitf.c file for reference - -call this function [ close_server(); ] in outitf.c before the line -```c -fprintf(stdout, "\nNo. of Data Rows : %d\n", run->pointCount); -``` -Which occurs in two functions in outitf.c (may not be same in the future), in functions named -```c - static void fileEnd(runDesc *run) -``` -and -```c - static void plotEnd(runDesc *run) -``` -**--- Do not replace old outitf.c with the outitf.c in the new ngspice version.\ ---- Make sure to maintain OS independence of the code, that is same code file for Windows and Linux.** - -2. Similarly manually add patch for identification of Mingw and linking of libws2_32.a to makedefs.in at */ngspice/src/xspice/icm* **after the line `LIBS = -lm`** (important) -```make -ISMINGW = $(shell uname | grep -c "MINGW64") -ifeq ($(ISMINGW), 1) - LIBS = -lm -lws2_32 -endif - -ISMINGW = $(shell uname | grep -c "MINGW32") -ifeq ($(ISMINGW), 1) - LIBS = -lm -lws2_32 -endif - -ISMINGW = $(shell uname | grep -c "MSYS") -ifeq ($(ISMINGW), 1) - LIBS = -lm -lws2_32 -endif -``` - -3. Add patch for linking libws2_32.a in Windows at Makefile.in at */ngspice/src/* by modifying the line -```make -@WINGUI_TRUE@am__append_19 = -lpsapi -lShlwapi -``` -To -```make -@WINGUI_TRUE@am__append_19 = -lpsapi -lShlwapi -lws2_32 -``` - - -4. Add patch for addition of GHDL codemodel to the spinit.in file at */ngspice/src/* as an addition to the section -```make -* The other codemodels -``` -with the line -```make -@XSPICEINIT@ codemodel @pkglibdir@/ghdl.cm -``` -and in GNUmakefile.in at */ngspice/src/xspice/icm* by replacing the line -```make -CMDIRS = spice2poly digital analog xtradev xtraevt table -``` -with -```make -CMDIRS = spice2poly digital analog xtradev xtraevt table ghdl -``` -5. Create a **`ghdl folder`** with two empty files named `modpath.lst` and `udnpath.lst` at the location */ngspice/src/xspice/icm/* diff --git a/Ngspice_Version_Change.md b/Ngspice_Version_Change.md new file mode 100644 index 0000000..8f3fda1 --- /dev/null +++ b/Ngspice_Version_Change.md @@ -0,0 +1,68 @@ +# Changes for Ngspice version upgrade + +1. Manually add the GHDL server close patch (header files and `close_server` function at the appropriate location) in the `outitf.c` which comes with the new Ngspice version. + +> Note: Compare with previous version of NGHDL `outitf.c` file for applying the patch. + +2. Call this function `close_server()` in `outitf.c` before the line: + +```c + fprintf(stdout, "\nNo. of Data Rows : %d\n", run->pointCount); +``` +occurring in following two functions of `outitf.c` (may not be same in the future): +```c + static void fileEnd(runDesc *run) +``` +and +```c + static void plotEnd(runDesc *run) +``` +> Note: +> 1. Do not replace old `outitf.c` with the `outitf.c` in the new Ngspice version. +> 2. Make sure to maintain OS independence of the code, that is same code file for Windows and Linux. + +3. Similarly, manually add patch for identification of Mingw and linking of `libws2_32.a` to `makedefs.in` at *`/ngspice/src/xspice/icm`* **after the line `LIBS = -lm`** (important) +```make + ISMINGW = $(shell uname | grep -c "MINGW64") + ifeq ($(ISMINGW), 1) + LIBS = -lm -lws2_32 + endif + + ISMINGW = $(shell uname | grep -c "MINGW32") + ifeq ($(ISMINGW), 1) + LIBS = -lm -lws2_32 + endif + + ISMINGW = $(shell uname | grep -c "MSYS") + ifeq ($(ISMINGW), 1) + LIBS = -lm -lws2_32 + endif +``` + +4. Add patch for linking `libws2_32.a` in Windows OS at `Makefile.in` at *`/ngspice/src/`* by modifying the line: +```make + @WINGUI_TRUE@am__append_19 = -lpsapi -lShlwapi +``` +To +```make + @WINGUI_TRUE@am__append_19 = -lpsapi -lShlwapi -lws2_32 +``` + +5. Add GHDL codemodel to the spinit.in file at *`/ngspice/src/`* as an addition to the section: +```make + * The other codemodels +``` +with the line: +```make + @XSPICEINIT@ codemodel @pkglibdir@/ghdl.cm +``` +and in `GNUmakefile.in` at *`/ngspice/src/xspice/icm`* by replacing the line: +```make + CMDIRS = spice2poly digital analog xtradev xtraevt table +``` +with +```make + CMDIRS = spice2poly digital analog xtradev xtraevt table ghdl +``` + +6. Create a **`ghdl` folder** with two empty files named `modpath.lst` and `udnpath.lst` at the location *`/ngspice/src/xspice/icm/`* @@ -1,15 +1,15 @@ -NGHDL Installers +NGHDL Packaging ==== -It contains all the documenation for making installations on various platforms. +It contains all the documentation for packaging NGHDL to be distributed with [eSim](https://github.com/fossee/esim). -## How to package NGHDL with eSim? -1. Add GHDL executable and the corresponding installer for the target OS in the `nghdl` folder. +## Packaging NGHDL with eSim? -> Note : Instructions on how to generate NGHDL executable and distribute it along with GHDL are -> provided under respective target OS directory. +1. NGHDL is currently packaged for Ubuntu OS (Linux) and MS Windows OS. -2. Rename `nghdl` folder as `nghdl-master` and compress it to `.zip` format. +2. Refer the [documentation](Ngspice_Version_Change.md) for the changes to be done when the Ngspice is to be upgraded to a new verion. Note that these changes are common to both Ubuntu and Windows OS. -3. Place this compressed file in `eSim-<version>` folder. +3. Refer the [documentation](Ubuntu/README.md) to package eSim for Ubuntu OS. + +4. Refer the [documentation](Windows/README.md) to package eSim for Windows OS.
\ No newline at end of file diff --git a/Ubuntu/README.md b/Ubuntu/README.md index 04e3647..cbc0adb 100644 --- a/Ubuntu/README.md +++ b/Ubuntu/README.md @@ -1,156 +1,25 @@ NGHDL Installer (Ubuntu OS) ==== +It contains the documentation to package NGHDL for Ubuntu OS. -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. +> 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? -## NGDHL EXECUTABLE: +1. Take the `master` branch containing the source code. Rename the folder to `nghdl`. -1. Download `virtualenv` package and create virtual environment as: +2. Add GHDL source code `ghdl-<version>.tar.xz` in the `nghdl` folder. - $ pip install virtualenv - $ virtualenv -p /usr/bin/python3 nghdl +3. Add the installer script `install-nghdl.sh` in the `nghdl` folder. - OR - - $ sudo apt install -y python3-venv - $ python3 -m venv nghdl +4. 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 -2. Activate the virtual environment as: - - $ source nghdl/bin/activate +2. Compress it to `.zip` format. -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` - - -## 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 +3. Place this compressed file in `eSim-<version>` folder. diff --git a/Windows/readme.md b/Windows/README.md index 6f5aae9..6f5aae9 100644 --- a/Windows/readme.md +++ b/Windows/README.md |