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) ) |
---|