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