# $Id: Usermake,v 1.5 2005/11/07 21:14:19 svitak Exp $ # # Usermake: A Makefile template for compiling a new version of # GENESIS that includes user-defined objects and libraries. # # SYNOPSIS: This is the GENESIS top-level user Makefile. It can be used # to compile a version of the GENESIS neural simulator containing # additional user-defined libraries. See the document "NewGenesis.txt" # in the GENESIS Doc subdirectory (usually genesis/Doc) for details on # adding a new library. # # PROCEDURE: # 0) If there is any doubt about whether your copy of GENESIS (and in # particular the contents of genesis/lib) was compiled under the # identical environment under which you are now trying to compile # your user objects and libraries, we strongly urge you to recompile # the full GENESIS on the same computer system first. Many subtle # problems can arise when users compile their user-modified GENESIS # under slightly different versions of the operating system or # computer hardware, so it is safest to ensure consistency by # explicitly compiling GENESIS under your present hardware + OS. # # 1) This file should first be copied into the directory from which you # are compiling your new version of GENESIS, and it should be renamed # 'Makefile'. # # 2) You must look at your original GENESIS top-level Makefile, and set # the following variables identically in your Usermake file: # # MACHINE CC LDFLAGS # OS CPP LEXLIB # XVERSION CFLAGS # XLIB LD # # These variables need to be set in the section below named "SYSTEM # CONFIGURATION VARIABLES". # # 3) Set the values of the other symbols in the user-configurable # section below, based on such things as what should be the name of # your new GENESIS executable. # # 4) Execute 'make'. # # ---------------------------------------------------------------------- # BEGINNING OF USER-CONFIGURABLE SECTION # ---------------------------------------------------------------------- # # SYSTEM CONFIGURATION VARIABLES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # The INSTALLDIR variable should refer to the GENESIS installation # directory. This is equivalent to the value of the variable in # the top-level GENESIS Makefile. Note that `pwd` may not work as # expected. Use a full path instead. INSTALLDIR = /usr/local/genesis TMPDIR = /tmp # The following should have the same values as the settings you used for # these same variables in the file genesis/src/Makefile. Please consult # that file for the values to use. MACHINE = OS = XLIB = CC = CFLAGS = CPP = LD = LDFLAGS = LEXLIB = TERMCAP = # # USER CONFIGURATION VARIABLES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Name to give your new GENESIS executable. SIMNAME = newgenesis # The directory containing any user library modules. # E.g.: USERDIR = newlib1 newlib2 USERDIR = # The pathnames of any library object modules, other than the basic # system libraries, should be specified in USEROBJ. These should be # the same as those used for the TARGET_OBJ variable in the 'Libmake' # file. E.g. USEROBJ = newlib1/newlib1.o newlib2/newlib2.o USEROBJ = # In USERLIB, list the library names of each user library. The library # name is set in each library's Makefile as the value of the variable # "LIBRARY_NAME". USERLIB = # Place any additional system-dependent libraries in SYSLIBS. # Some of the known settings needed for different systems are: # # For IRIX 6.x: # SYSLIBS = -lmalloc SYSLIBS = # # OPTIONAL GENESIS LIBRARIES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # oldconn # # These are the GENESIS 1.4 connection facility compatibility libraries. # Comment out the OLDCONN and OLDCONNLIB macros to exclude 1.4 style # connections. You must also remove the libraries from the liblist # file. # # NOTE: Several of the simulations in the Scripts directory use the # oldconn library (e.g. MultiCell, Piriform, etc.) and will not run # without oldconn. OLDCONN = $(SIMLIB)/axonlib.o \ $(SIMLIB)/synlib.o \ $(SIMLIB)/perlib.o \ $(SIMLIB)/simconnlib.o \ $(SIMLIB)/toolconnlib.o OLDCONNLIB = axon synapse personal simconn toolconn # kinetics # # This library is for kinetic modeling. Comment out KINETICS and # KINETICSLIB to exclude the kinetics library. # # NOTE: the kkit kinetics modeling kit requires the kinetics library. KINETICS = $(SIMLIB)/kinlib.o KINETICSLIB = kin # diskio # # The diskio and related objects from this library provide a disk_in # disk_out backward compatible interface for netCDF portable binary # files. Comment out the DISKIO and DISKIOLIB macros to exclude the # diskio library. There are currently no kits or tutorials which depend # on this library. # # NOTE: The netCDF library is known not to compile on Linux a.out # systems. Any Linux 1.3 or later (and some 1.2 versions) will work. FMT1OBJ = $(SIMLIB)/FMT1lib.o NETCDFOBJ = $(SIMLIB)/netcdflib.o \ $(SIMLIB)/libnetcdf.a DISKIO = $(SIMLIB)/diskiolib.o $(FMT1OBJ) $(NETCDFOBJ) DISKIOLIB = diskio # SPRNG SPRNG_LIB = lfg SPRNGLIB = $(SIMLIB)/lib$(SPRNG_LIB).a # XODUS # # This is the graphics widget and draw library. It is needed by just # about everything in the Scripts directory. If you want to run GENESIS # in batch mode without graphics, comment out XLIBS, XODUS and XODUSLIB # to get a non-Xodus genesis. XLIBS = -L$(XLIB) -lXt -lXmu -lXext -lX11 XODUS = $(SIMLIB)/drawlib.o \ $(SIMLIB)/widglib.o \ $(SIMLIB)/xolib.o \ $(SIMLIB)/libDraw.a \ $(SIMLIB)/libWidg.a \ $(SIMLIB)/libXo.a XODUSLIB = xo draw widg # end of user-configurable section. # ---------------------------------------------------------------------- # BEGINNING OF COMMON SECTION # # NOTHING BEYOND THIS POINT SHOULD HAVE TO BE MODIFIED BY THE USER # ---------------------------------------------------------------------- NXSIMNAME = nx$(SIMNAME) SHELL = /bin/sh SIMLIB = $(INSTALLDIR)/lib SIMSRC = $(INSTALLDIR)/src BASE = $(SIMLIB)/simlib.o \ $(SIMLIB)/ss.o \ $(SIMLIB)/shelllib.o \ $(SIMLIB)/utillib.o \ $(SIMLIB)/buflib.o \ $(SIMLIB)/seglib.o \ $(SIMLIB)/hhlib.o \ $(SIMLIB)/devlib.o \ $(SIMLIB)/outlib.o \ $(SIMLIB)/olflib.o \ $(SIMLIB)/toollib.o \ $(SIMLIB)/conclib.o \ $(SIMLIB)/userlib.o \ $(SIMLIB)/hineslib.o \ $(SIMLIB)/paramlib.o \ $(SIMLIB)/parlib.o \ $(SIMLIB)/porelib.o \ $(OLDCONN) \ $(SIMLIB)/newconnlib.o \ $(KINETICS) \ $(DISKIO) \ $(SPRNGLIB) GENESIS = $(BASE) loadlib.o NXGENESIS = $(BASE) nxloadlib.o NXLIBS = $(LEXLIB) -lm $(SYSLIBS) $(TERMCAP) LIBS = $(XLIBS) $(NXLIBS) LIBLIST = output \ hh \ devices \ buffer \ segment \ user \ $(XODUSLIB) \ olf \ tools \ concen \ hines \ param \ pore \ newconn \ $(DISKIOLIB) \ $(OLDCONNLIB) \ $(KINETICSLIB) \ $(USERLIB) NXLIBLIST = output \ hh \ devices \ buffer \ segment \ user \ olf \ tools \ concen \ hines \ pore \ newconn \ $(DISKIOLIB) \ $(OLDCONNLIB) \ $(KINETICSLIB) \ $(USERLIB) default: userlibs $(SIMNAME) userlibs: @(for i in $(USERDIR); do \ echo cd $$i; \ cd $$i; \ make CPP="$(CPP)" CC="$(CC)" LD="$(LD)" \ LDFLAGS="$(LDFLAGS)" \ CFLAGS="$(CFLAGS) -D$(MACHINE) -D$(OS)" \ INSTALLDIR="$(INSTALLDIR)" \ GENINST="$(INSTALLDIR)" \ TMPDIR="$(TMPDIR)"; \ cd ..; \ done) liblist: Makefile @echo "# liblist - This file is generated automatically." > liblist @echo "# DO NOT EDIT. Edit Makefile instead." >> liblist @echo $(LIBLIST) | tr ' ' '\012' >> liblist nxliblist: Makefile @echo "# nxliblist - This file is generated automatically." > nxliblist @echo "# DO NOT EDIT unless you are sure you" >> nxliblist @echo "# know what you are doing. Generally" >> nxliblist @echo "# Makefile should be edited instead." >> nxliblist @echo $(NXLIBLIST) | tr ' ' '\012' >> nxliblist loadlib.c: liblist $(SIMSRC)/libsh < liblist > loadlib.c nxloadlib.c: nxliblist $(SIMSRC)/libsh < nxliblist > nxloadlib.c clean: @(for i in $(USERDIR); do echo cd $$i; cd $$i; make clean; cd ..;done) @rm -f loadlib.[oc] liblist $(SIMNAME): $(GENESIS) $(XODUS) $(USEROBJ) $(CC) $(CFLAGS) $(LDFLAGS) $(GENESIS) $(XODUS) $(USEROBJ) $(LIBS) -o $(SIMNAME) nxgenesis $(NXSIMNAME): userlibs $(NXGENESIS) $(USEROBJ) $(CC) $(CFLAGS) $(LDFLAGS) $(NXGENESIS) $(USEROBJ) $(NXLIBS) -o $(NXSIMNAME) # End of Usermake.