[807] | 1 | # $Id: ParGNUmakefile,v 1.7 2007/05/25 17:25:51 cooperma Exp $ |
---|
| 2 | # -------------------------------------------------------------- |
---|
| 3 | #This file should be included in GNUmakefile of local directory. |
---|
| 4 | |
---|
| 5 | #Usage: make [ to compile parallel version ] |
---|
| 6 | # make run [ to compile and run it ] |
---|
| 7 | # make run-debug [ to compile and run in gdb ] |
---|
| 8 | # make parclean [ remove intermediate and executable files ] |
---|
| 9 | # See `run' target for parameters by which executable is called. |
---|
| 10 | # This assumes Geant4 environment vars have been defined. |
---|
| 11 | # See ../info/NEW_APP_INSTALL (number 10) for an example of setting up |
---|
| 12 | # the Geant4 environment variables. |
---|
| 13 | |
---|
| 14 | # MEM_MODEL can be --seq, --mpi, or --pthread in current version of TOP-C. |
---|
| 15 | MEM_MODEL=--seq |
---|
| 16 | MEM_MODEL=--mpi |
---|
| 17 | |
---|
| 18 | ifndef REMOTE_SHELL |
---|
| 19 | REMOTE_SHELL=ssh |
---|
| 20 | endif |
---|
| 21 | |
---|
| 22 | MACROFILE=ParN04.in |
---|
| 23 | # MACROFILE=ParN04.EMtest.large_N.in |
---|
| 24 | |
---|
| 25 | DATAFILE= |
---|
| 26 | DATAFILE=pythia_event.data |
---|
| 27 | |
---|
| 28 | # Everything below here should be set automatically based on |
---|
| 29 | # your environment variables, the G4TARGET of GNUmakefile, etc. |
---|
| 30 | # G4TARGET set in the makefile that includes this one. |
---|
| 31 | |
---|
| 32 | ifndef PARTARGET |
---|
| 33 | PARTARGET = ${G4TARGET} |
---|
| 34 | endif |
---|
| 35 | |
---|
| 36 | ifndef G4INSTALL |
---|
| 37 | G4INSTALL = _Environment_variable_G4INSTALL_must_be_defined_ |
---|
| 38 | endif |
---|
| 39 | |
---|
| 40 | ifndef G4WORKDIR |
---|
| 41 | G4WORKDIR = ${G4INSTALL} |
---|
| 42 | endif |
---|
| 43 | |
---|
| 44 | ifndef G4BIN |
---|
| 45 | G4BIN = $$G4WORKDIR/bin |
---|
| 46 | endif |
---|
| 47 | ifndef G4BINDIR |
---|
| 48 | G4BINDIR = ${G4BIN}/$$G4SYSTEM |
---|
| 49 | endif |
---|
| 50 | |
---|
| 51 | EXECUTABLE=${G4BIN}/$$G4SYSTEM/${PARTARGET} |
---|
| 52 | |
---|
| 53 | G4DEBUG = 1 |
---|
| 54 | |
---|
| 55 | TOPC_LIBS = $(shell topc-config ${MEM_MODEL} --libs) |
---|
| 56 | TOPC_CFLAGS = -DG4USE_TOPC $(shell topc-config ${MEM_MODEL} --cflags) |
---|
| 57 | # optionally add: -DTOPC_DEBUG to TOPC_CFLAGS for debugging details. |
---|
| 58 | TOPC_OPTIONS = --TOPC-verbose |
---|
| 59 | |
---|
| 60 | EXTRALIBS=${TOPC_LIBS} |
---|
| 61 | CPPFLAGS=${TOPC_CFLAGS} |
---|
| 62 | |
---|
| 63 | TIMESTAMP=${G4BINDIR}/ParN04.timestamp |
---|
| 64 | |
---|
| 65 | # Unfortunately, .../geant4.x.x/config/binmake.gmk has target: |
---|
| 66 | # $(G4BINDIR)/$(G4TARGET) |
---|
| 67 | # (for example: ${G4BIN}/$$G4SYSTEM/ParN04) |
---|
| 68 | # And that rule always triggers due to dependency on .../exe/obj.last |
---|
| 69 | # Also, G4BINDIR uses shell variables, that are guaranteed to expand |
---|
| 70 | # only after recursive make. |
---|
| 71 | compile: |
---|
| 72 | @ if [ "$$G4SYSTEM" = "" ]; then \ |
---|
| 73 | echo '***' Environment variable G4SYSTEM not defined; \ |
---|
| 74 | echo '***' Make sure G4INSTALL and G4SYSTEM are set; \ |
---|
| 75 | exit 1; \ |
---|
| 76 | fi |
---|
| 77 | ${MAKE} G4BINDIR=${G4BINDIR} ${TIMESTAMP} |
---|
| 78 | @ if which topc-config > /dev/null; then :; \ |
---|
| 79 | else \ |
---|
| 80 | echo '***' topc-config is not in your path; \ |
---|
| 81 | exit 1; \ |
---|
| 82 | fi |
---|
| 83 | @ echo "" |
---|
| 84 | @ echo 'To run, now type "make run"' |
---|
| 85 | @ echo 'To remove built files, type "make parclean"' |
---|
| 86 | |
---|
| 87 | ${TIMESTAMP}: *.cc *.icc src/*.cc include/*.hh ParGNUmakefile |
---|
| 88 | @ if which topc-config > /dev/null; then :; \ |
---|
| 89 | else \ |
---|
| 90 | echo ''; \ |
---|
| 91 | echo '***' topc-config is not in your path; \ |
---|
| 92 | exit 1; \ |
---|
| 93 | fi |
---|
| 94 | ${MAKE} all |
---|
| 95 | rm -f ${TIMESTAMP} |
---|
| 96 | echo "" > ${TIMESTAMP} |
---|
| 97 | make -t ${EXECUTABLE} |
---|
| 98 | |
---|
| 99 | run: compile |
---|
| 100 | pwd |
---|
| 101 | echo ${EXECUTABLE} |
---|
| 102 | cp -f ${MACROFILE} ${DATAFILE} procgroup `dirname ${EXECUTABLE}`/ |
---|
| 103 | # ${EXECUTABLE} will use procgroup file in current directory. |
---|
| 104 | ( cd `dirname ${EXECUTABLE}`; RSH=${REMOTE_SHELL}; export RSH; \ |
---|
| 105 | ${EXECUTABLE} ${TOPC_OPTIONS} ${MACROFILE} ) |
---|
| 106 | |
---|
| 107 | run-debug: compile |
---|
| 108 | @ if [ "$$G4DEBUG" = "" ]; then \ |
---|
| 109 | echo '***' Environment variable G4DEBUG not defined; \ |
---|
| 110 | echo '***' Set it, make parclean, and re-compile using GDEBUG; \ |
---|
| 111 | fi |
---|
| 112 | # exit 1; \ |
---|
| 113 | echo ${EXECUTABLE} |
---|
| 114 | cp -f ${MACROFILE} ${DATAFILE} procgroup `dirname ${EXECUTABLE}`/ |
---|
| 115 | rm -f `dirname ${EXECUTABLE}`/tmp.gdb |
---|
| 116 | echo 'set args ${TOPC_OPTIONS} ${MACROFILE}' \ |
---|
| 117 | > `dirname ${EXECUTABLE}`/tmp.gdb |
---|
| 118 | echo 'break main' >> `dirname ${EXECUTABLE}`/tmp.gdb |
---|
| 119 | echo 'run' >> `dirname ${EXECUTABLE}`/tmp.gdb |
---|
| 120 | # ${EXECUTABLE} will use procgroup file in current directory. |
---|
| 121 | ( cd `dirname ${EXECUTABLE}`; RSH=${REMOTE_SHELL}; export RSH; \ |
---|
| 122 | gdb -x tmp.gdb ${EXECUTABLE} ) |
---|
| 123 | parclean: |
---|
| 124 | rm -f ${TIMESTAMP} |
---|
| 125 | ${MAKE} clean |
---|
| 126 | pardist: parclean |
---|
| 127 | ( dir=`basename $$PWD`; cd ..; tar cvf $$dir.tar ./$$dir; \ |
---|
| 128 | gzip $$dir.tar && (cd $$dir; ls -l ../$$dir.tar.gz) ) |
---|