Skip to content

Commit

Permalink
Update Tips on NEST.md
Browse files Browse the repository at this point in the history
  • Loading branch information
saq10002 committed Jan 23, 2015
1 parent b83bbcd commit c8ad2b2
Showing 1 changed file with 0 additions and 44 deletions.
44 changes: 0 additions & 44 deletions Tips on NEST.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,48 +137,4 @@ Debugging the NEST Project
==========================
You can set up a project with your favourite IDE (e.g., NetBeans or Eclipse) and create a ```C++``` project with existing source from the ```nest/nest-2.6.0``` directory. Because we have built NEST with debug information, you will be use your IDE's debugging facilities.

Adding Your Own Code to NEST
============================
* If you want to add a new library inside NEST, createa a new directory inside ```nest/nest-2.6.0```. In my case, I created the directory ```nest/nest-2.6.0/nestgpu``` and wanted my new code to be inside the new library ```libnestgpu```. Inside this directory, you add your new source/header files.
* However, your code is still not part of the NEST build system. To have your code be built with NEST, you need to do few more things.
* First, create a file named ```Makefile.am``` inside this new directory. Every source directory of NEST contains a ```Makefile.am``` file of its own. This file contains instructions for the ```automake``` tool so that it knows what to build, from which files, using which libraries, etc. For example, I had two source files: ```GpuDataAdapter.h`` and ```GpuDataAdapter.cpp`` which I wanted to be built into my new library ```libnestgpu```. For this purpose, my ```nest/nest-2.6.0/nestgpu/Makefile.am``` file contained the following lines:
```
# Automake file for the GPU-port of the NEST simulation kernel library
#
# Saad Quader, January 2015
#
defs= @SLI_THREAD_DEFS@ $defs
MAKEFLAGS= @MAKE_FLAGS@
noinst_LTLIBRARIES=libnestgpu.la
libnestgpu_la_SOURCES=\
gpu_data_adapter.h gpu_data_adapter.cpp

# do not change anything below this line ------------------------------
libnestgpu_la_CXXFLAGS= @AM_CXXFLAGS@
libnestgpu_la_LIBADD= @LIBLTDL@ @LIBADD_DL@
AM_CPPFLAGS= -I$(top_srcdir)/libnestutil\
-I$(top_srcdir)/librandom\
-I$(top_srcdir)/sli\
-I$(top_srcdir)/nestkernel\
@INCLTDL@ @GSL_CFLAGS@ @MUSIC_INCLUDE@ @MPI_INCLUDE@
```
* Suppose you want to use your code from any part of the original NEST code. In my case, I wanted to call ```GpuDataAdapter::init()``` from within the function ```neststartup()``` in the file ```nest/nest-2.6.0/nest/neststartup.cpp```. For this, inside the ```cpp``` file, I added ```#include "gpudataadapter.h"``` and inside the definition of the function ```neststartup()```, I added ```nest::gpu::GpuDataAdapter::init();```.
* Editing the existing source code was easy. However, how does the compiler/linker know where to find the declaration/definition of the code for the ```GpuDataAdapter::init()``` function? This is the hard part. For this, I had to modify the ```nest/nest-2.6.0/nest/Makefile.am``` file as follows:
* I added ```nestgpu/libnestgpu.la``` to the existing definition of the variables ```nest_LDADD``` and ```nest_DEPENDENCIES``` so that the linker knows where to find the definition of my new functions.
* I also added ```-I$(top_srcdir)/nestgpu``` to the existing value of the variable ```AM_CPPFLAGS``` so that the compiler knows where to look for the ```#include``` headers for my new code.
* However, it turned out that the module ```nest/nest-2.6.0/pynest``` also uses the file ```nest/nest-2.6.0/nest/neststartup.cpp``` and its header. Therefore, I had to specify the ```nest/nest-2.6.0/nestgpu``` directory as an include directory in the file ```nest/nest-2.6.0/pynest/Makefile.am``` as well. However, I did not need to specify the library ```libnestgpu``` because the library ```pynestkernel.la``` was already linked to the library ```libnest.la``` which was also already linked to my library ```libnestgpu.la```.

* Next, you should tell the NEST build system to actually visit this subdirectory and build your code. For this, you have to edit the ```nest/nest-2.6.0/configure.ac.in```. In particular, you need to edit two things:
* You have to specify that you have a new source directory. You do this by editing the existing value of the variable ```SLI_CORE_LIBS``` and adding the word ```nestgpu``` in its existing list of directories.
* You have to specify that you have a new ```Makefile``` to be created by the configure script. You do this by adding the following line: ```AC_CONFIG_FILES(nestgpu/Makefile)``` after the list of existing Makefiles. (Just search for the text ```AC_CONFIG_FILES```) inside the file ```configure.ac.in```.)
* Now that we have specified that we have new code, we need to rebuild the system, by generating a new ```configure``` script using our recently modified ```configure.ac.in``` file. To do this, just run the script ```nest/nest-2.6.0/bootstrap.sh``` which would generate a new ```configure``` script.
* Then, reconfigure NEST by typing ``` cd /home/saad/nest/build && ../nest-2.6.0/configure ../nest-2.6.0/configure --prefix=/home/saad/venv/nest-dbg --with-mpi --with-openmp --with-debug --with-optimize=-O0```.
* Then, build NEST by running ```make``` and ```make install```.
* Now, when NEST runs, it does so with the modified code.

0 comments on commit c8ad2b2

Please sign in to comment.