Integrated the memory affinity settings into charm++
[charm.git] / src / scripts / Makefile
1 #############################################################################"
2 #
3 # This one Makefile serves all of converse and charm.  It includes
4 # rules for building:
5 #
6 #     * The CONVERSE libraries
7 #     * Charm++ runtime
8 #     * ITC++ Translator
9 #     * Languages
10 #     * Documentation
11 #
12 # This Makefile is common to all machines.  This works because the charmc
13 # is smart enough to "conceal" the differences between machines.  charmc
14 # gets its smarts by reading the conv-mach.sh configuration file.
15 #
16 # If you wish to compile with debugging, optimization, or some other charm
17 # option, you can do so by setting OPTS.  For example, if you need a lot
18 # of debugging information, you could type:
19 #
20 #     make charm++ OPTS="-g -save -verbose"
21 #
22 ###############################################################################
23
24 SHELL=/bin/sh
25 L=../lib
26 INC=../include
27
28 all: charm++ bigsim LIBS AMPI f90charm TSM SM PVM doc
29
30 all-test: bigsim AMPI
31         cd ../tests ; $(MAKE) all OPTS='$(OPTS)'
32         cd ../examples ; $(MAKE) all OPTS='$(OPTS)'
33
34 charm++: charm-target
35         @echo "$(OPTS)" > OPTS
36         touch charm++
37
38 bgampi: bigsim AMPI
39
40 TSM: converse $(L)/libtsm.a
41
42 SM: converse $(L)/libsm.a
43
44 PVM: converse $(L)/libpvmc.a
45
46 AMR: charm++ LIBS
47         cd libs/ck-libs/amr; make all OPTS='$(OPTS)'
48
49 FEM: charm++ LIBS
50 FEMC: FEM
51 FEMF: FEM
52 ParFUM: FEM
53
54 MBLOCK: AMPI MBLOCKC MBLOCKF
55
56 MBLOCKC: charm++ LIBS
57
58 MBLOCKF: MBLOCKC
59
60 AMPI:  charm++ LIBS
61 AMPIC AMPIF: AMPI
62
63 ARMCI: charm++ LIBS
64
65
66 f90charm: charm++ $(L)/libf90charm.a
67
68 default_libs: multicast pythonCCS
69
70 ChaNGa: charm++ cache liveViz
71
72 cache: charm++
73         cd libs/ck-libs/cache && $(MAKE)
74
75 liveViz: charm++
76         cd libs/ck-libs/liveViz && $(MAKE)
77
78 multicast: charmxi
79         cd libs/ck-libs/multicast && $(MAKE)
80
81 pythonCCS: charmxi
82         cd libs/ck-libs/pythonCCS && $(MAKE)
83
84 translators: charmxi conv-cpm
85
86 pose:  charm++
87         cd libs/ck-libs/pose && $(MAKE)
88
89 msa: charm++
90         cd libs/ck-libs/multiphaseSharedArrays && $(MAKE)
91
92 jade: charm++ msa
93 #       make the lib, include
94         cd langs/jade && $(MAKE)
95
96 fftlib: charm++
97         cd libs/ck-libs/fftlib && $(MAKE)
98
99 # This should be done offline, since the user does not need to compile
100 # parser files, etc.  All they need is the libjade + include files,
101 # antlr.jar, jade.jar, and a few scripts which the jade target takes
102 # care of.
103 #jadeall: jade
104 #       make parser.g -> .java files
105 #       cd langs/jade && $(MAKE) p
106 #       make the jade.jar file
107 #       cd ../java/charm/jade && $(MAKE)
108
109 #include TAU defs
110 TAU_MAKEFILE=Make.tau
111 include $(TAU_MAKEFILE) #stub-makefile
112
113 #builds TAU's trace library
114 Tau: 
115         echo "buliding charm trace library with support for TAU."
116         $(MAKE) $(L)/libtrace-Tau.a $(L)/libtrace-all.a TAU_TRACE_OBJ=libtrace-Tau.o
117
118 LIBS: CONVLIBS CHARMLIBS
119         cd libs; $(MAKE) otherlibs
120         echo "Built LIBS Successfully"
121
122 bgtest: bigsim AMPI
123         cd ../tests ; $(MAKE) bgtest OPTS='$(OPTS)'
124         cd ../examples ; $(MAKE) bgtest OPTS='$(OPTS)'
125
126 test: bigsim AMPI
127         cd ../tests ; $(MAKE) test OPTS='$(OPTS)'
128         cd ../examples ; $(MAKE) test OPTS='$(OPTS)'
129
130 test-converse: converse
131         cd ../tests ; $(MAKE) test-converse  OPTS='$(OPTS)'
132
133 test-charm: charm++ METIS
134         cd ../tests ; $(MAKE) test-charm  OPTS='$(OPTS)'
135
136 test-AMPI: AMPI
137         cd ../tests ; $(MAKE) test-AMPI  OPTS='$(OPTS)'
138
139 test-fem: FEM
140         cd ../tests ; $(MAKE) test-fem  OPTS='$(OPTS)'
141
142 ps-doc: basics
143         cd ../doc ; make ps
144
145 pdf-doc: basics
146         cd ../doc ; make pdf
147
148 html-doc: basics
149         cd ../doc ; make html
150
151 doc: basics
152         cd ../doc ; make doc
153
154 CHARMC=../bin/charmc $(CHARMOPTS) $(OPTS)
155
156 SEQCHARMC=../bin/charmc -seq $(CHARMOPTS)
157
158 NATIVECHARMC=../bin/charmc -host $(CHARMOPTS)
159
160 CHARMXI=../bin/charmc -intrinsic $(OPTS)
161
162 DEPENDFILE = Make.depends
163
164 include $(DEPENDFILE)
165
166 ###############################################################################
167 #
168 # The basics (bin, lib, include, headers, charmc, conv-mach.sh)
169 #
170 ###############################################################################
171
172 CVHEADERS=cpthreads.h converse.h conv-trace.h conv-random.h conv-qd.h \
173       queueing.h conv-cpath.h conv-cpm.h persistent.h\
174       trace.h trace-common.h trace-bluegene.h trace-projections.h  \
175       trace-simple.h trace-controlPoints.h charm-api.h \
176       conv-ccs.h ccs-client.c ccs-client.h \
177       ccs-server.h ccs-auth.c ccs-auth.h \
178       memory-isomalloc.h debug-conv.h debug-charm.h conv-autoconfig.h \
179       conv-common.h conv-config.sh conv-config.h conv-mach.h conv-mach.sh \
180       blue.h blue-conv.h bgconverse.h \
181         3dgridrouter.h hypercuberouter.h hypercubetopology.h    \
182         routerstrategy.h convcomlibstrategy.h  convcomlib.h dummyconversestrategy.h  treerouter.h \
183         convcomlibmanager.h graphrouter.h petable.h gridrouter.h router.h \
184         prefixrouter.h pipebroadcastconverse.h pipelinestrategy.h cmipool.h \
185       comlib.h cmidirect.h cmidirectmanytomany.h \
186       controlPoints.h controlPointsf.h arrayRedistributor.h cp_effects.h register.h stats.h
187
188 # The .c files are there to be #included by clients whole
189 # This is a bit unusual, but makes client linking simpler.
190 UTILHEADERS=pup.h pupf.h pup_c.h pup_stl.h pup_mpi.h pup_toNetwork.h pup_toNetwork4.h pup_paged.h pup_cmialloc.h\
191         ckimage.h ckdll.h ckhashtable.h ckbitvector.h cklists.h ckliststring.h \
192         ckstatistics.h ckvector3d.h conv-lists.h RTH.h ckcomplex.h \
193         sockRoutines.h sockRoutines.c ckpool.h BGLTorus.h BGPTorus.h \
194         TopoManager.h XT3Torus.h XT4Torus.h cmimemcpy.h simd.h SSE-Double.h SSE-Float.h crc32.h
195
196 CKHEADERS=ck.h ckstream.h envelope.h init.h qd.h charm.h charm++.h \
197           ckfutures.h ckIgetControl.h \
198           ckcallback.h CkCallback.decl.h ckcallback-ccs.h       \
199           ckarrayreductionmgr.h cknodegroupreduction.h cksection.h \
200           ckarray.h cklocation.h ckreduction.h ckcheckpoint.h ckmemcheckpoint.h ckevacuation.h\
201                 ckmessagelogging.h ckobjid.h\
202           ckobjQ.h readonly.h charisma.h ComlibArrayListener.h ComlibStrategy.h \
203           ComlibLearner.h $(UTILHEADERS) \
204           tempo.h waitqd.h LBDatabase.h lbdb.h lbdb++.h LBProfit.h \
205           LBDBManager.h LBComm.h LBOM.h LBObj.h LBMachineUtil.h LBAgent.h \
206           Refiner.h RefinerApprox.h RefinerComm.h ObjGraph.h ckheap.h \
207           elements.h CommLBHeap.h topology.h manager.h \
208           BaseLB.h CentralLB.h CentralLBMsg.h RandCentLB.h RecBisectBfLB.h \
209           RefineLB.h RefineKLB.h RefineCommLB.h OrbLB.h \
210           GreedyLB.h GreedyCommLB.h GreedyAgentLB.h Comm1LB.h MetisLB.h \
211           TopoLB.h RefineTopoLB.h  TopoCentLB.h  PhasebyArrayLB.h RotateLB.h \
212           GridCommLB.h GridCommRefineLB.h GridMetisLB.h GridHybridLB.h GridHybridSeedLB.h \
213           DummyLB.h BlockLB.h NborBaseLB.h HybridBaseLB.h HybridLB.h HybridLBMsg.h HbmLB.h \
214           NeighborLB.h NeighborCommLB.h NeighborLBMsg.h WSLB.h \
215           BlueGene.h middle.h middle-conv.h middle-blue.h \
216           CkMarshall.decl.h CkArray.decl.h CkLocation.decl.h    \
217           CkReduction.decl.h CkArrayReductionMgr.decl.h\
218           tempo.decl.h waitqd.decl.h \
219           CkFutures.decl.h CkCheckpoint.decl.h CkMemCheckpoint.decl.h \
220           LBDatabase.decl.h CentralLB.decl.h ComboCentLB.decl.h NullLB.decl.h \
221           RandCentLB.decl.h RecBisectBfLB.decl.h BaseLB.decl.h MetisLB.decl.h \
222           DummyLB.decl.h RotateLB.decl.h RefineLB.decl.h RefineKLB.decl.h BlockLB.decl.h \
223           RefineCommLB.decl.h OrbLB.decl.h GreedyLB.decl.h GreedyCommLB.decl.h \
224           Comm1LB.decl.h GreedyAgentLB.decl.h \
225           GridCommLB.decl.h GridCommRefineLB.decl.h GridMetisLB.decl.h GridHybridLB.decl.h \
226           GridHybridSeedLB.decl.h PhasebyArrayLB.decl.h TopoLB.decl.h RefineTopoLB.decl.h \
227           TopoCentLB.decl.h NborBaseLB.decl.h NeighborLB.decl.h \
228           NeighborCommLB.decl.h HbmLB.decl.h \
229           HybridBaseLB.decl.h HybridLB.decl.h WSLB.decl.h EveryLB.decl.h \
230           charisma.decl.h TraceSummary.decl.h TraceProjections.decl.h \
231           TraceSimple.decl.h TraceControlPoints.decl.h TraceTau.decl.h \
232           TraceUtilization.decl.h BlueGene.decl.h \
233           comlib.decl.h ComlibManager.h DummyStrategy.h \
234           MulticastStrategy.h DirectMulticastStrategy.h RingMulticastStrategy.h \
235           ChunkMulticastStrategy.h OneTimeMulticastStrategy.h MultiRingMulticast.h \
236           EachToManyMulticastStrategy.h MsgPacker.h StreamingStrategy.h \
237           NodeMulticast.h PipeBroadcastStrategy.h MeshStreamingStrategy.h \
238           PrioStreaming.h MPIStrategy.h MsgPacker.h StreamingStrategy.h \
239           BroadcastStrategy.h ComlibSectionInfo.h AAPLearner.h \
240           AAMLearner.h ComlibStats.h \
241           RectMulticastStrategy.h ckdirect.h \
242           ControlPoints.decl.h PathHistory.decl.h \
243           pathHistory.h envelope-path.h \
244           $(CVHEADERS)
245
246 ALLHEADERS=$(CKHEADERS) \
247     simplemsg.h sm.h pvmc.h pvm3.h sdag.h \
248         graph.h bitvecset.h ckset.h LBSimulation.h  \
249         $(BLUE_HEADERS)
250
251 basics: headers
252         touch basics
253
254 # Headers is used only for the dependencies
255 headers: dirs+sources
256         $(MAKE) charmxi
257         $(MAKE) headerlinks
258
259 conv-autoconfig.h: configure config_opts.sh
260         @. ./config_opts.sh; echo ./configure $(QUIET) $$CONFIG_OPTS;  \
261         ./configure $(QUIET) $$CONFIG_OPTS
262
263 headerlinks: dirs+sources Makefile $(ALLHEADERS)
264         @[ "x$QUIET" = "x--quiet" ] || echo "Soft-linking headers..."
265         -@for hdr in $(ALLHEADERS) ; do test ! -f "../include/$$hdr" && ./system_ln "../tmp/$$hdr" ../include ; done
266         touch headerlinks
267
268 dirs+sources:
269 #       rm -f .gdir
270 #       (cd .. ; basename "`pwd`" | sed -e 's@-.*@@')   > .gdir
271         pwd
272         find . -type l -exec rm {} \;
273         rm -rf QuickThreads
274         rm -rf libs
275         rm -rf ../bin ; mkdir ../bin
276         rm -rf ../lib ; mkdir ../lib
277         rm -rf ../lib_so ; mkdir ../lib_so; touch ../lib_so/.charmso
278         rm -rf ../examples
279         rm -rf ../tests
280         rm -rf ../doc ; ln -s ../doc ../doc
281         ../../src/scripts/gatherflat ../../src/scripts .
282         ./gatherflat ../../src/conv-core        .
283         ./gatherflat ../../src/conv-ldb         .
284         ./gatherflat ../../src/conv-ccs         .
285         ./gatherflat ../../src/conv-perf        .
286         ./gatherflat ../../src/ck-core          .
287         ./gatherflat ../../src/util             .
288         ./gatherflat ../../src/ck-perf          .
289         ./gatherflat ../../src/ck-ldb           .
290         ./gatherflat ../../src/ck-com           .
291         ./gatherflat ../../src/ck-cp           .
292         ./gatherflat ../../src/conv-com           .
293         ./gatherflat ../../src/langs/simplemsg  .
294         ./gatherflat ../../src/langs/pvmc       .
295         ./gatherflat ../../src/langs/bluegene   .
296         ./gatherflat ../../src/langs/f90charm   .
297         ./gatherflat ../../src/xlat-i           .
298         ./gatherflat ../../src/xlatcpm          .
299         ./gathertree ../../src/QuickThreads QuickThreads
300         ./gathertree ../../src/libs libs
301         ./gathertree ../../src/arch/util      .
302         ./gathertree ../../src/langs langs
303         ./gathertree ../../src/langs/jade langs/jade
304         ./gathertree ../../src/arch/common           .
305         ./gathertree ../../src/arch/`cat .gdir`      .
306         test -f ../../src/arch/`cat .gdir`/gdir_link && cat ../../src/arch/`cat .gdir`/gdir_link > .gdir.new && ./gathertree ../../src/arch/`cat .gdir.new`      . || true
307         ./gatherflat ../../src/arch/`cat .vdir`      .
308         ./gathertree ../../examples ../examples
309         ./gathertree ../../tests ../tests
310         rm -f ../bin/dep.pl ; cp dep.pl ../bin/
311         rm -f ../bin/gendeps4ci; cp gendeps4ci ../bin/
312         chmod +x charmc
313         -./system_ln  ../tmp/charmc ../bin/
314 #       -ln -s ../../java/bin charmjavabin
315 #       -ln -s ../../java/bin ../bin/charmjavabin
316 #       -ln -s charmjavabin/* ../bin/
317 #       -ln -s ../java ..
318 #       rm -f .gdir
319         rm -rf ../include ; mkdir ../include
320         -./system_ln  ../tmp/conv-*.*h ../include
321         -./system_ln  ../tmp/cc-*.*h ../include
322         if [ -x ./special.sh ] ; then ./special.sh ; fi
323         if [ ! -f conv-common.h ] ; then ( touch conv-common.h ) ; fi
324         touch dirs+sources
325
326 ###############################################################################
327 #
328 # Converse Libraries
329
330 ###############################################################################
331 CLBLIBS=$(L)/libldb-rand.o $(L)/libldb-spray.o $(L)/libldb-neighbor.o $(L)/libldb-none.o $(L)/libldb-test.o $(L)/libldb-bluegene.o
332 TRACELIBS=$(L)/libtrace-projections.a  $(L)/libtrace-summary.a   $(L)/libtrace-utilization.a \
333           $(L)/libtrace-simple.a $(L)/libtrace-controlPoints.a\
334           $(L)/libtrace-counter.a $(L)/libtrace-bluegene.a \
335           $(L)/libtrace-projector.a $(L)/libtrace-all.a $(L)/libtrace-converse.a \
336           $(L)/libtracef_f.a $(L)/libtrace-memory.a
337 MEMLIBS=$(L)/libmemory-default.o $(L)/libmemory-os.o $(L)/libmemory-gnu.o \
338           $(L)/libmemory-gnuold.o $(L)/libmemory-verbose.o      \
339           $(L)/libmemory-paranoid.o \
340           $(L)/libmemory-leak.o $(L)/libmemory-isomalloc.o \
341           $(L)/libmemory-charmdebug.o $(L)/libmemory-charmdebug-mmap.o \
342           $(L)/libmemory-charmdebug-slot.o $(L)/libmemory-charmdebug-mmap-slot.o \
343           $(L)/libmemory-os-verbose.o $(L)/libmemory-os-isomalloc.o \
344           $(L)/libmemory-os-leak.o $(L)/libmemory-os-paranoid.o \
345           $(L)/libmemory-os-lock.o \
346           $(L)/libmemory-os-charmdebug.o $(L)/libmemory-os-wrapper.o \
347           $(L)/libmemory-hooks-charmdebug.o
348 THREADLIBS=$(L)/libthreads-default.o $(L)/libthreads-qt.o       \
349           $(L)/libthreads-context.o $(L)/libthreads-uJcontext.o \
350           $(L)/libthreads-pthreads.o $(L)/libthreads-fibers.o \
351           $(L)/libthreads-stackcopy.o $(L)/libthreads-memoryalias.o \
352           $(L)/libthreads-qt-memoryalias.o      \
353           $(L)/libthreads-context-memoryalias.o \
354           $(L)/libthreads-uJcontext-memoryalias.o
355
356 CVLIBS=$(L)/libconv-core.a \
357         $(L)/libconv-cplus-y.a $(L)/libconv-cplus-n.a \
358         $(L)/libconv-util.a $(L)/libconv-utilf.a \
359         $(CLBLIBS) $(TRACELIBS) $(MEMLIBS) $(THREADLIBS) \
360         $(L)/libccs-client.a
361
362 LIBCONV_CORE= convcore.o conv-conds.o queueing.o msgmgr.o \
363         cpm.o cpthreads.o futures.o cldb.o topology.o random.o \
364         debug-conv.o generate.o edgelist.o conv-ccs.o ccs-builtins.o middle-ccs.o \
365         traceCore.o traceCoreCommon.o tracec.o \
366         converseProjections.o machineProjections.o \
367         quiescence.o isomalloc.o mem-arena.o conv-counter.o \
368         global-nop.o cmipool.o cpuaffinity.o cputopology.o  \
369         memoryaffinity.o modifyScheduler.o
370
371 #############################################
372 #Comlib Core objects that go into libck.a
373 COMLIB_CORE_OBJS = ComlibModuleInterface.o 
374 ##############################################
375
376 LIBCONV_UTIL=pup_util.o pup_toNetwork.o pup_toNetwork4.o                \
377         pup_xlater.o pup_c.o pup_paged.o pup_cmialloc.o                 \
378         ckimage.o ckdll.o ckhashtable.o sockRoutines.o                  \
379         conv-lists.o RTH.o persist-comm.o \
380         ckbitvector.o TopoManager.o CrayNid.o crc32.o
381
382 LIBCONV_UTILF=pup_f.o
383
384 converse: fmain-ok charmrun-target swapglobal-target conv-cpm
385
386 charmrun-target: sockRoutines.c sockRoutines.h ccs-server.c ccs-server.h sockRoutines-seq.o $(L)/libck.a $(CVLIBS)
387         if [ -d charmrun ] ; then ( cd charmrun ; $(MAKE) OPTS='$(OPTS)' -j1 ) ; fi
388         if [ -f charmrun ] ; then ( cp -f charmrun ../bin ) ; fi
389
390 fmain-ok: fmain.f90
391         -@$(CHARMC) -c fmain.f90
392         -@cp fmain.o ../lib
393         -@touch fmain-ok
394
395 QUICK_THREADS: $(CVHEADERS)
396         -( cd QuickThreads && $(MAKE) clean )
397         ( cd QuickThreads;./configure )
398         ( cd QuickThreads ; $(MAKE) qt  OPTS='$(OPTS)' ) || ( echo "Did you try to build net-linux on a 64-bit system? Try net-linux-x86_64" && false )
399         cp -f QuickThreads/libqt.a ../lib/libckqt.a
400         -(CHARMINC=.; . ./conv-config.sh; \
401           test -d ../lib_so && \
402           cp -f QuickThreads/libqt.$$CMK_SHARED_SUF ../lib_so && \
403           cp -f QuickThreads/libqt.$$CMK_SHARED_SUF ../lib_so/libckqt.$$CMK_SHARED_SUF)
404         touch QUICK_THREADS
405
406 METIS:  charm++
407         cd libs/ck-libs/parmetis/METISLib && $(MAKE) OPTS='$(OPTS)'
408
409 CONVLIBS: converse
410         cd libs; $(MAKE) convlibs OPTS='$(OPTS)'
411
412 $(L)/libconv-core.a: $(LIBCONV_CORE)
413         $(CHARMC) $(TAU_LIBS) -o $@ $(LIBCONV_CORE) 
414
415 $(L)/libconv-cplus-y.a: $(L)/libconv-cplus-n.a
416
417 include Makefile.machine
418
419 $(L)/libconv-cplus-n.a: machine.c $(CVHEADERS)
420         @-test -f $(INC)/mpi.h && mv -f $(INC)/mpi.h $(INC)/mpi.BAK || true
421         $(CHARMC) -o machine.o  -DFOR_CPLUS=1 machine.c
422         @-test -f ./bglmachine.C && $(CHARMC) -o machine.o  -DFOR_CPLUS=1 bglmachine.C || true
423         $(CHARMC) -o $(L)/libconv-cplus-y.a machine.o
424         $(CHARMC) -o $(L)/libconv-cplus-n.a -DFOR_CPLUS=0 machine.c
425         @-test -f $(INC)/mpi.BAK && mv -f $(INC)/mpi.BAK $(INC)/mpi.h || true
426
427 $(L)/libconv-util.a: $(LIBCONV_UTIL)
428         $(CHARMC) -o $@ $(LIBCONV_UTIL)
429
430 $(L)/libconv-utilf.a: $(LIBCONV_UTILF)
431         -$(CHARMC) -o $@ $(LIBCONV_UTILF) || touch $@
432
433 $(L)/libccs-client.a: ccs-client.o
434         $(CHARMC) -o $@ ccs-client.o
435
436 ccs-client.o: ccs-client.c $(CVHEADERS)
437         $(CHARMC) ccs-client.c
438
439 sockRoutines.o: sockRoutines.c $(CVHEADERS) $(UTILHEADERS)
440         $(CHARMC) -DCMK_USE_CONVERSE=1 sockRoutines.c
441
442 sockRoutines-seq.o: sockRoutines.c $(CVHEADERS) $(UTILHEADERS)
443         $(SEQCHARMC) -o sockRoutines-seq.o sockRoutines.c
444
445 pup_util.o: pup_util.C $(CVHEADERS) $(UTILHEADERS)
446         $(CHARMC) -o pup_util.o pup_util.C
447
448 pup_toNetwork.o: pup_toNetwork.C $(CVHEADERS) $(UTILHEADERS)
449         $(CHARMC) -I. -o pup_toNetwork.o pup_toNetwork.C
450
451 pup_toNetwork4.o: pup_toNetwork4.C $(CVHEADERS) $(UTILHEADERS)
452         $(CHARMC) -I. -o pup_toNetwork4.o pup_toNetwork4.C
453
454 pup_xlater.o: pup_xlater.C $(CVHEADERS) $(UTILHEADERS)
455         $(CHARMC) -I. -o pup_xlater.o pup_xlater.C
456
457 pup_c.o: pup_c.C $(CVHEADERS) $(UTILHEADERS)
458         $(CHARMC) -o pup_c.o pup_c.C
459
460 pup_paged.o: pup_paged.C $(CVHEADERS) $(UTILHEADERS)
461         $(CHARMC) -o pup_paged.o pup_paged.C
462
463 pup_f.o: pup_f.f90 $(CVHEADERS)
464         -$(CHARMC) -c pup_f.f90 && $(CHARMC) -cpmod ../include pupmod.M || touch pup_f.o
465
466 pup_cmialloc.o: pup_cmialloc.C $(CVHEADERS) $(UTILHEADERS)
467         $(CHARMC) -o pup_cmialloc.o pup_cmialloc.C
468
469 ckhashtable.o: ckhashtable.C ckhashtable.h $(CVHEADERS)
470         $(CHARMC) -o ckhashtable.o ckhashtable.C
471
472 TopoManager.o: TopoManager.C TopoManager.h BGLTorus.h BGPTorus.h XT3Torus.h XT4Torus.h CrayNid.c $(CVHEADERS) $(UTILHEADERS)
473         $(CHARMC) -o TopoManager.o TopoManager.C
474
475 CrayNid.o: CrayNid.c $(CVHEADERS) $(UTILHEADERS)
476         $(CHARMC) -c -o CrayNid.o CrayNid.c
477
478 ckbitvector.o: ckbitvector.C ckbitvector.h $(CVHEADERS)
479         $(CHARMC) -I. -o ckbitvector.o ckbitvector.C
480
481 ckdll.o: ckdll.C ckdll.h $(CVHEADERS)
482         $(CHARMC) -o ckdll.o ckdll.C
483
484 ckimage.o: ckimage.C ckimage.h $(CVHEADERS)
485         $(CHARMC) -o ckimage.o ckimage.C
486
487 RTH.o: RTH.C RTH.h $(CVHEADERS)
488         $(CHARMC) -o RTH.o RTH.C
489
490 persist-comm.o: persist-comm.c persist_impl.h $(CVHEADERS)
491         $(CHARMC) -o persist-comm.o persist-comm.c
492
493 conv-lists.o: conv-lists.C $(UTILHEADERS) $(CVHEADERS)
494         $(CHARMC) -o conv-lists.o conv-lists.C
495         
496 crc32.o: crc32.c crc32.h
497         $(CHARMC) -optimize -o crc32.o crc32.c
498
499 ## Converse load balancers (seed balancers, -balance)
500 $(L)/libldb-none.o: cldb.none.c $(CVHEADERS)
501         $(CHARMC) -o $@ cldb.none.c
502
503 $(L)/libldb-rand.o: cldb.rand.c cldb.h $(CVHEADERS)
504         $(CHARMC) -o $@ cldb.rand.c
505
506 $(L)/libldb-neighbor.o: cldb.neighbor.c cldb.neighbor.h graph.h $(CVHEADERS)
507         $(CHARMC) -o $@ cldb.neighbor.c
508
509 $(L)/libldb-spray.o: cldb.spray.c $(CVHEADERS)
510         $(CHARMC) -o $@ cldb.spray.c
511
512 $(L)/libldb-test.o: cldb.test.c $(CVHEADERS)
513         $(CHARMC) -o $@ cldb.test.c
514
515 $(L)/libldb-bluegene.o: cldb.bluegene.c $(CVHEADERS)
516         $(CHARMC) -o $@ cldb.bluegene.c
517
518 ## Memory allocation libraries (-memory)
519 MEM_DEPS=memory.c memory-gnu.c memory-gnuold.c converse.h conv-mach.h $(CVHEADERS)
520 $(L)/libmemory-default.o: $(MEM_DEPS)
521         $(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_DEFAULT memory.c
522
523 $(L)/libmemory-os.o: $(MEM_DEPS)
524         $(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_OS memory.c
525
526 $(L)/libmemory-os-verbose.o: memory-verbose.c $(MEM_DEPS)
527         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_VERBOSE memory.c || touch $@
528
529 $(L)/libmemory-os-paranoid.o: memory-paranoid.c $(MEM_DEPS)
530         -$(CHARMC) -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_PARANOID memory.c || touch $@
531
532 $(L)/libmemory-os-leak.o: $(MEM_DEPS)
533         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_LEAK memory.c || touch $@
534
535 $(L)/libmemory-os-isomalloc.o: memory-isomalloc.c $(MEM_DEPS)
536         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_ISOMALLOC memory.c || touch $@
537
538 $(L)/libmemory-os-lock.o: memory-lock.c $(MEM_DEPS)
539         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_LOCK memory.c || touch $@
540
541 $(L)/libmemory-os-charmdebug.o: memory-charmdebug.c $(MEM_DEPS)
542         -$(CHARMC) -o $@ -DCMK_MEMORY_BUILD_OS_WRAPPED -DCMK_MEMORY_BUILD_CHARMDEBUG memory.c || touch $@
543
544 $(L)/libmemory-os-wrapper.o: memory-os-wrapper.C $(MEM_DEPS)
545         -$(CHARMC) -o $@ memory-os-wrapper.C || touch $@
546
547 $(L)/libmemory-hooks-charmdebug.o: memory-charmdebug.c $(MEM_DEPS)
548         -$(CHARMC) -o $@ -DCMK_MEMORY_BUILD_GNU_HOOKS -DCMK_MEMORY_BUILD_CHARMDEBUG memory.c || touch $@
549
550 # If the system doesn't have sbrk, these compilations may fail.
551 #  This is OK, but then we can't use "-memory gnu" or friends.
552 $(L)/libmemory-gnu.o: $(MEM_DEPS)
553         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_GNU memory.c || touch $@
554
555 $(L)/libmemory-gnuold.o: $(MEM_DEPS)
556         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_GNUOLD memory.c || touch $@
557
558 $(L)/libmemory-verbose.o: memory-verbose.c $(MEM_DEPS)
559         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_VERBOSE memory.c || touch $@
560
561 $(L)/libmemory-paranoid.o: memory-paranoid.c $(MEM_DEPS)
562         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_PARANOID memory.c || touch $@
563
564 $(L)/libmemory-leak.o: memory-leak.c $(MEM_DEPS)
565         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_LEAK memory.c || touch $@
566
567 $(L)/libmemory-cache.o: memory-cache.c $(MEM_DEPS)
568         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_CACHE memory.c || touch $@
569
570 $(L)/libmemory-isomalloc.o: memory-isomalloc.c $(MEM_DEPS)
571         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_ISOMALLOC memory.c || touch $@
572
573 $(L)/libmemory-charmdebug.o: memory-charmdebug.c $(MEM_DEPS)
574         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_CHARMDEBUG memory.c || touch $@
575
576 $(L)/libmemory-charmdebug-slot.o: memory-charmdebug.c $(MEM_DEPS)
577         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_CHARMDEBUG -DCMK_SEPARATE_SLOT memory.c || touch $@
578
579 $(L)/libmemory-charmdebug-mmap.o: memory-charmdebug.c $(MEM_DEPS)
580         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_CHARMDEBUG -DCPD_USE_MMAP memory.c || touch $@
581
582 $(L)/libmemory-charmdebug-mmap-slot.o: memory-charmdebug.c $(MEM_DEPS)
583         -$(CHARMC) -I. -o $@ -DCMK_MEMORY_BUILD_CHARMDEBUG -DCPD_USE_MMAP -DCMK_SEPARATE_SLOT memory.c || touch $@
584
585 ## Thread libraries (-thread)
586
587 LIBTHREADSDEPS = threads.c $(CVHEADERS) QUICK_THREADS
588
589 $(L)/libthreads-default.o: $(LIBTHREADSDEPS)
590         $(CHARMC) -o $@ -DCMK_THREADS_BUILD_DEFAULT=1 -IQuickThreads -I. threads.c
591
592 $(L)/libthreads-qt.o: $(LIBTHREADSDEPS) 
593         $(CHARMC) -o $@ -DCMK_THREADS_BUILD_QT=1 -IQuickThreads threads.c
594
595 $(L)/libthreads-context.o: $(LIBTHREADSDEPS) 
596         -$(CHARMC) -o $@ -DCMK_THREADS_BUILD_CONTEXT=1 -IQuickThreads threads.c || touch $@
597
598 $(L)/libthreads-uJcontext.o: $(LIBTHREADSDEPS) uJcontext.c
599         -$(CHARMC) -o $@ -DCMK_THREADS_BUILD_JCONTEXT=1 -IQuickThreads -I. threads.c || touch $@
600
601 $(L)/libthreads-pthreads.o: $(LIBTHREADSDEPS) 
602         -$(CHARMC) -o $@ -DCMK_THREADS_BUILD_PTHREADS=1 -IQuickThreads threads.c || touch $@
603
604 $(L)/libthreads-fibers.o: $(LIBTHREADSDEPS)
605         -$(CHARMC) -o $@ -DCMK_THREADS_BUILD_FIBERS=1 -IQuickThreads threads.c 2> /dev/null || touch $@
606
607 $(L)/libthreads-stackcopy.o: $(LIBTHREADSDEPS) 
608         -$(CHARMC) -o $@ -DCMK_THREADS_BUILD_STACKCOPY=1 -IQuickThreads threads.c || touch $@
609
610 $(L)/libthreads-memoryalias.o: $(LIBTHREADSDEPS) 
611         -$(CHARMC) -o $@ -DCMK_THREADS_ALIAS_STACK=1 -DCMK_THREADS_BUILD_DEFAULT=1 -IQuickThreads threads.c || touch $@
612
613 $(L)/libthreads-qt-memoryalias.o: $(LIBTHREADSDEPS) 
614         -$(CHARMC) -o $@ -DCMK_THREADS_ALIAS_STACK=1 -DCMK_THREADS_BUILD_QT=1 -IQuickThreads threads.c || touch $@
615
616 $(L)/libthreads-context-memoryalias.o: $(LIBTHREADSDEPS) 
617         -$(CHARMC) -o $@ -DCMK_THREADS_ALIAS_STACK=1 -DCMK_THREADS_BUILD_CONTEXT=1 -IQuickThreads threads.c || touch $@
618
619 $(L)/libthreads-uJcontext-memoryalias.o: $(LIBTHREADSDEPS) 
620         -$(CHARMC) -o $@ -DCMK_THREADS_ALIAS_STACK=1 -DCMK_THREADS_BUILD_JCONTEXT=1 -IQuickThreads -I. threads.c || touch $@
621
622 ## Global swapping (-swapglobal)
623 swapglobal-target: $(L)/libglobal-swap.o $(L)/libglobal-copy.o $(L)/loadsym.o
624
625 $(L)/libglobal-swap.o: global-elfgot.C $(CVHEADERS)
626         -$(CHARMC) -c global-elfgot.C -o $@ || touch $@
627
628 $(L)/libglobal-copy.o: global-elfcopy.C  $(CVHEADERS)
629         -$(CHARMC) -c global-elfcopy.C -o $@ || touch $@
630
631 $(L)/loadsym.o: loadsym.c  $(CVHEADERS)
632         -$(CHARMC) -c loadsym.c -o $@ || touch $@
633
634 ###############################################################################
635 #
636 # Charm Libraries
637 #
638 ###############################################################################
639
640 CK_LIBS_CORE=$(L)/libck.a
641
642 LIBCK_CORE=trace-common.o tracef.o init.o register.o qd.o ck.o main.o  \
643            msgalloc.o ckfutures.o ckIgetControl.o debug-message.o debug-charm.o ckcallback.o \
644            cklocation.o ckarray.o ckreduction.o ckarrayreductionmgr.o\
645            tempo.o waitqd.o LBDatabase.o lbdb.o lbdbf.o charisma.o ckobjQ.o  \
646            LBAgent.o LBProfit.o ckcheckpoint.o ckmemcheckpoint.o ckevacuation.o ckmessagelogging.o\
647            LBDBManager.o LBComm.o LBObj.o LBMachineUtil.o CentralPredictor.o \
648            BaseLB.o CentralLB.o HybridBaseLB.o NborBaseLB.o WSLB.o \
649            ObjGraph.o graph.o LButil.o Refiner.o RefinerApprox.o  \
650            RefinerComm.o bitvecset.o ckset.o ckheap.o CommLBHeap.o \
651            NullLB.o LBSimulation.o $(COMLIB_CORE_OBJS) \
652            charmProjections.o pathHistory.o
653
654 charm-target: converse $(L)/libck.a $(L)/libckf.a loadbalancers default_libs comlib_objs controlPoints_objs 
655
656 CHARMLIBS: charm++ CONVLIBS
657         cd libs; $(MAKE) charmlibs OPTS='$(OPTS)'
658
659 $(L)/libck.a: $(LIBCK_CORE)
660         $(CHARMC) -o $@ $(LIBCK_CORE)
661
662 CkFutures.def.h: CkFutures.decl.h
663
664 CkFutures.decl.h: ckfutures.ci charmxi
665         $(CHARMXI) ckfutures.ci
666
667 tempo.def.h: tempo.decl.h
668
669 tempo.decl.h: tempo.ci charmxi
670         $(CHARMXI) tempo.ci
671
672 waitqd.def.h: waitqd.decl.h
673
674 waitqd.decl.h: waitqd.ci charmxi
675         $(CHARMXI) waitqd.ci
676
677 LBDatabase.def.h: LBDatabase.decl.h
678
679 LBDatabase.decl.h: LBDatabase.ci charmxi
680         $(CHARMXI) LBDatabase.ci
681
682 NullLB.def.h: NullLB.decl.h
683
684 NullLB.decl.h: NullLB.ci charmxi
685         $(CHARMXI) NullLB.ci
686
687 BaseLB.def.h: BaseLB.decl.h
688
689 BaseLB.decl.h: BaseLB.ci charmxi
690         $(CHARMXI) BaseLB.ci
691
692 TraceProjections.def.h: TraceProjections.decl.h
693
694 TraceProjections.decl.h: trace-projections.ci charmxi
695         $(CHARMXI) trace-projections.ci
696
697 TraceSummary.def.h: TraceSummary.decl.h
698
699 TraceSummary.decl.h: trace-summary.ci charmxi
700         $(CHARMXI) trace-summary.ci
701
702  
703 TraceUtilization.def.h: TraceUtilization.decl.h
704
705 TraceUtilization.decl.h: trace-utilization.ci charmxi
706         $(CHARMXI) trace-utilization.ci 
707
708 TraceSimple.def.h: TraceSimple.decl.h
709
710 TraceSimple.decl.h: trace-simple.ci charmxi
711         $(CHARMXI) trace-simple.ci
712
713 TraceTau.def.h: TraceTau.decl.h
714
715 TraceTau.decl.h: trace-Tau.ci charmxi
716         $(CHARMXI) trace-Tau.ci
717
718 TraceControlPoints.def.h: TraceControlPoints.decl.h
719
720 TraceControlPoints.decl.h: trace-controlPoints.ci charmxi
721         $(CHARMXI) trace-controlPoints.ci
722
723 CkReduction.def.h: CkReduction.decl.h
724
725 CkReduction.decl.h: ckreduction.ci charmxi
726         $(CHARMXI) ckreduction.ci
727
728 CkCheckpoint.def.h: CkCheckpoint.decl.h
729
730 CkCheckpoint.decl.h: ckcheckpoint.ci charmxi
731         $(CHARMXI) ckcheckpoint.ci
732
733 CkMemCheckpoint.def.h: CkMemCheckpoint.decl.h
734
735 CkMemCheckpoint.decl.h: ckmemcheckpoint.ci charmxi
736         $(CHARMXI) ckmemcheckpoint.ci
737
738 CkMarshall.def.h: CkMarshall.decl.h
739
740 CkMarshall.decl.h: ckmarshall.ci charmxi
741         $(CHARMXI) ckmarshall.ci
742
743 CkArrayReductionMgr.def.h: CkArrayReductionMgr.decl.h
744
745 CkArrayReductionMgr.decl.h: ckarrayreductionmgr.ci charmxi
746         $(CHARMXI) ckarrayreductionmgr.ci
747
748 CkArray.def.h: CkArray.decl.h
749
750 CkArray.decl.h : ckarray.ci charmxi
751         $(CHARMXI) ckarray.ci
752
753 CkLocation.def.h: CkLocation.decl.h
754
755 CkLocation.decl.h: cklocation.ci charmxi
756         $(CHARMXI) cklocation.ci
757
758 CkCallback.def.h: CkCallback.decl.h
759
760 CkCallback.decl.h: ckcallback.ci charmxi
761         $(CHARMXI) ckcallback.ci
762
763 charisma.def.h: charisma.decl.h
764
765 charisma.decl.h: charisma.ci charmxi
766         $(CHARMXI) charisma.ci
767
768 ## Charm++ Load balancer (Dynamic load balancer)
769
770 CentralLB.def.h: CentralLB.decl.h
771
772 CentralLB.decl.h: CentralLB.ci charmxi
773         $(CHARMXI) CentralLB.ci
774
775 NborBaseLB.def.h: NborBaseLB.decl.h
776
777 NborBaseLB.decl.h: NborBaseLB.ci charmxi
778         $(CHARMXI) NborBaseLB.ci
779
780 HybridBaseLB.def.h: HybridBaseLB.decl.h
781
782 HybridBaseLB.decl.h: HybridBaseLB.ci charmxi
783         $(CHARMXI) HybridBaseLB.ci
784
785 ## Charm fortran AMPI
786
787 CK_FOR_LIBS_CORE=$(L)/libckf.a
788
789 LIBCKF_CORE=charmf.o charmmod.o
790
791 $(L)/libckf.a: $(LIBCKF_CORE)
792         -$(CHARMC) -o $@ $(LIBCKF_CORE) || touch $@
793
794 charmf.o:  charmf.C $(CKHEADERS) charmf.h
795         $(CHARMC) -c -I. charmf.C
796
797 charmmod.o: charmmod.f90
798         -$(CHARMC) -c charmmod.f90 || touch $@
799         -$(CHARMC) -cpmod ../include charm.M
800
801 ## Tracing libraries (profiling, -tracemode)
802 LIBTRACE_PROJ=trace-projections.o
803 $(L)/libtrace-projections.a: $(LIBTRACE_PROJ)
804         $(CHARMC) -o $@ $(LIBTRACE_PROJ)
805
806 LIBTRACE_SUMM=trace-summary.o
807 $(L)/libtrace-summary.a: $(LIBTRACE_SUMM)
808         $(CHARMC) -o $@ $(LIBTRACE_SUMM)
809  
810 LIBTRACE_UTIL=trace-utilization.o
811 $(L)/libtrace-utilization.a: $(LIBTRACE_UTIL)
812         $(CHARMC) -o $@ $(LIBTRACE_UTIL)
813
814 LIBTRACE_SIMPLE=trace-simple.o
815 $(L)/libtrace-simple.a: $(LIBTRACE_SIMPLE)
816         $(CHARMC) -o $@ $(LIBTRACE_SIMPLE)
817
818 libtrace-Tau.o: trace-Tau.C charm++.h charm.h converse.h conv-config.h \
819   conv-autoconfig.h conv-common.h conv-mach.h conv-mach-opt.h \
820   conv-mach-ifort.h pup_c.h conv-cpm.h conv-cpath.h conv-qd.h \
821   conv-random.h conv-lists.h conv-trace.h persistent.h debug-conv.h pup.h \
822   middle.h middle-conv.h cklists.h ckbitvector.h ckstream.h init.h \
823   ckhashtable.h debug-charm.h CkMarshall.decl.h cksection.h ckcallback.h \
824   conv-ccs.h sockRoutines.h ccs-server.h ckobjQ.h ckreduction.h \
825   CkReduction.decl.h cknodegroupreduction.h CkArrayReductionMgr.decl.h \
826   ckmemcheckpoint.h CkMemCheckpoint.decl.h readonly.h ckarray.h \
827   cklocation.h LBDatabase.h lbdb.h LBDBManager.h LBObj.h LBOM.h LBComm.h \
828   LBMachineUtil.h lbdb++.h LBDatabase.decl.h NullLB.decl.h BaseLB.decl.h \
829   CkLocation.decl.h CkArray.decl.h ComlibArrayListener.h ComlibStrategy.h \
830   convcomlibstrategy.h ComlibLearner.h envelope.h envelope-path.h CkFutures.decl.h \
831   charisma.h charisma.decl.h tempo.h tempo.decl.h waitqd.h waitqd.decl.h \
832   sdag.h ckcheckpoint.h CkCheckpoint.decl.h ckevacuation.h \
833   ckarrayreductionmgr.h trace.h trace-bluegene.h trace-simple.h \
834   register.h trace-common.h trace-simpleBOC.h TraceSimple.decl.h \
835   TraceSimple.def.h
836         $(CHARMC) -c -I. $(TAU_INCLUDE) $(TAU_DEFS) trace-Tau.C -o libtrace-Tau.o
837
838 tau_selective.o: $(TAUROOT)/utils/tau_selective.cpp 
839         $(CHARMC) -I$(TAUROOT)/utils -DTAU_DYNINST $(TAUROOT)/utils/tau_selective.cpp
840
841 $(L)/libtrace-Tau.a: $(TAU_TRACE_OBJ) tau_selective.o
842         $(CHARMC) $(TAU_LIBS) -o $@ $(TAU_TRACE_OBJ) tau_selective.o $(TAU_TRACE_OBJ)
843
844
845 # Note there is a BG/P specific addition to this target in Makefile.machine
846 # Do not change this rule!
847 LIBTRACE_CONTROLPOINTS=trace-controlPoints.o
848 $(L)/libtrace-controlPoints.a: $(LIBTRACE_CONTROLPOINTS)
849         $(CHARMC) -o $@ $^
850 # Do not change this rule!
851
852 LIBTRACE_COUNT=trace-counter.o
853 $(L)/libtrace-counter.a: $(LIBTRACE_COUNT)
854         $(CHARMC) -o $@ $(LIBTRACE_COUNT)
855
856 LIBTRACE_BG=trace-bluegene.o
857 $(L)/libtrace-bluegene.a:$(LIBTRACE_BG)
858         $(CHARMC) -o $@ $(LIBTRACE_BG)
859
860 LIBTRACE_MEMORY=trace-memory.o
861 $(L)/libtrace-memory.a: $(LIBTRACE_MEMORY)
862         $(CHARMC) -o $@ $(LIBTRACE_MEMORY)
863
864 LIBTRACE_ALL=trace-all.o trace-projections.o trace-summary.o trace-simple.o \
865 $(TAU_TRACE_OBJ) trace-projector.o traceCore.o traceCoreCommon.o charmProjections.o converseProjections.o machineProjections.o trace-memory.o trace-controlPoints.o trace-utilization.o
866
867 $(L)/libtrace-all.a: $(LIBTRACE_ALL)
868         $(CHARMC) -o $@ $(LIBTRACE_ALL)
869
870 LIBTRACE_PROJECTOR=trace-projector.o traceCore.o traceCoreCommon.o charmProjections.o converseProjections.o machineProjections.o
871 $(L)/libtrace-projector.a: $(LIBTRACE_PROJECTOR)
872         $(CHARMC) -o  $@ $(LIBTRACE_PROJECTOR)
873
874 LIBTRACE_CONVERSE=trace-converse.o
875 $(L)/libtrace-converse.a: $(LIBTRACE_CONVERSE)
876         $(CHARMC) -o  $@ $(LIBTRACE_CONVERSE)
877
878 LIBTRACE_FOR=tracef_f.o
879 $(L)/libtracef_f.a: $(LIBTRACE_FOR)
880         -$(CHARMC) -o $@ $(LIBTRACE_FOR) || touch $@
881
882 tracef_f.o: tracef_f.f90
883         -$(CHARMC) -o $@ -c tracef_f.f90 && $(CHARMC) -cpmod ../include tracemod.M  || touch $@
884
885 # used for make depends
886 TRACE_OBJS =  trace-projections.o  trace-summary.o  trace-simple.o \
887               trace-counter.o trace-controlPoints.o trace-utilization.o \
888               trace-bluegene.o trace-projector.o trace-converse.o trace-all.o \
889           trace-memory.o
890
891 ######################################################################
892 #
893 #Control Point Library
894 #
895 ######################################################################
896
897
898 CONTROLPOINTS_OBJS = controlPoints.o arrayRedistributor.o cp_effects.o
899
900 ControlPoints.def.h: ControlPoints.decl.h
901
902 ControlPoints.decl.h : controlPoints.ci charmxi
903         $(CHARMXI) controlPoints.ci
904
905 ControlPointsNoTrace.def.h: ControlPointsNoTrace.decl.h
906
907 ControlPointsNoTrace.decl.h : controlPointsNoTrace.ci charmxi
908         $(CHARMXI) controlPointsNoTrace.ci
909
910 controlPoints_objs: $(L)/libmoduleControlPoints.a $(L)/libmoduleControlPointsNoTrace.a
911
912 $(L)/libmoduleControlPoints.a: $(CONTROLPOINTS_OBJS)
913         $(CHARMC) -o $(L)/libmoduleControlPoints.a $(CONTROLPOINTS_OBJS)
914
915 $(L)/libmoduleControlPointsNoTrace.a: controlPointsNoTrace.o arrayRedistributor.o cp_effects.o
916         $(CHARMC) -o $(L)/libmoduleControlPointsNoTrace.a controlPointsNoTrace.o arrayRedistributor.o cp_effects.o
917
918 controlPointsNoTrace.o: controlPoints.C controlPoints.h ControlPointsNoTrace.decl.h
919         $(CHARMC) -I. -c controlPoints.C -o controlPointsNoTrace.o -DCP_DISABLE_TRACING $(OPTS)
920
921 ######################################################################
922 #
923 # Critical Path Library
924 #
925 ######################################################################
926
927
928 PathHistory.def.h: PathHistory.decl.h
929
930 PathHistory.decl.h : pathHistory.ci charmxi
931         $(CHARMXI) pathHistory.ci
932
933
934
935 ###############################################################################
936 #
937 # Dynamic Load Balancers
938 #
939 ###############################################################################
940
941
942 # Automatically generated by script Makefile_lb.sh
943 include Make.lb
944
945 loadbalancers: $(LOADBALANCERS) $(L)/libmoduleEveryLB.a
946 ######################################################################
947 #
948 #Communication Optimization Library
949 #
950 ######################################################################
951
952 STRATEGY_OBJS = MPIStrategy.o StreamingStrategy.o \
953                 DummyStrategy.o NodeMulticast.o ChunkMulticastStrategy.o OneTimeMulticastStrategy.o \
954                 EachToManyMulticastStrategy.o ComlibSectionInfo.o \
955                 AAPLearner.o ComlibStats.o AAMLearner.o \
956                 MsgPacker.o MulticastStrategy.o DirectMulticastStrategy.o \
957                 RingMulticastStrategy.o MultiRingMulticast.o\
958                 PipeBroadcastStrategy.o MeshStreamingStrategy.o \
959                 PrioStreaming.o BroadcastStrategy.o RectMulticastStrategy.o \
960                 convcomlibstrategy.o ComlibManager.o ComlibStrategy.o 
961
962 CONVERSE_COM_OBJS = gridrouter.o hypercuberouter.o treerouter.o petable.o \
963                 3dgridrouter.o graphrouter.o hypercubetopology.o \
964                 routerstrategy.o convcomlibmanager.o pipebroadcastconverse.o \
965                 pipelinestrategy.o prefixrouter.o
966
967
968 comlib.def.h: comlib.decl.h
969
970 comlib.decl.h : ComlibManager.ci charmxi
971         $(CHARMXI) ComlibManager.ci
972
973 COMLIB_OBJS = $(STRATEGY_OBJS) $(CONVERSE_COM_OBJS)
974
975 comlib_objs: $(L)/libmodulecomlib.a $(L)/libconvcom.a
976
977 $(L)/libconvcom.a: $(COMLIB_OBJS)
978         $(CHARMC) -o $(L)/libconvcom.a $(CONVERSE_COM_OBJS)
979
980 #for backward compatibility, keep libmodulecommlib.a with double m.
981 $(L)/libmodulecomlib.a: $(COMLIB_OBJS)
982         $(CHARMC) -o $(L)/libmodulecomlib.a $(COMLIB_OBJS)
983         cp -f $(L)/libmodulecomlib.a $(L)/libmodulecommlib.a
984
985
986 ###############################################################################
987 #
988 # BlueGene Emulator
989 #
990 ###############################################################################
991
992 bigsim:  bigsim-target
993
994 bigemulator: bigsim
995
996 bigsim-target: charm++ $(L)/libconv-bigsim.a $(L)/libconv-bigsim-logs.a $(L)/libconv-bluegene-stub.a $(L)/libblue-standalone.a METIS
997
998 # old (Charm++) Blue Gene emulator
999 BlueGene.decl.h BlueGene.def.h : BlueGene.ci charmxi
1000         $(CHARMXI) BlueGene.ci
1001
1002 $(L)/libbluegene.a: BlueGene.C BlueGene.h BlueGene.decl.h BlueGene.def.h
1003         $(CHARMC) -c BlueGene.C
1004         $(CHARMC) -o $@ BlueGene.o
1005
1006 # (Converse) Blue Gene emulator
1007 BLUE_HEADERS = blue_types.h bigsim_timing.h blue_defs.h bigsim_logs.h blue.h blue_impl.h bigsim_network.h bigsim_record.h bigsim_ooc.h bigsim_debug.h shared-alloc.h
1008 BLUE_OBJS = blue.o bigsim_node.o bigsim_proc.o bigsim_init.o bigsim_timing.o bigsim_record.o bigsim_ooc.o shared_alloc.o
1009 BIGSIM_IO_OBJS = bigsim_read.o bigsim_logs.o bigsim_api.o
1010
1011 LIBBLUE_OBJS = $(BLUE_OBJS) $(BIGSIM_IO_OBJS) blue_stub.o blue_standalone.o
1012
1013 $(L)/libconv-bigsim.a: $(BLUE_OBJS)
1014         $(CHARMC) -o $@  $(BLUE_OBJS)
1015
1016 $(L)/libconv-bigsim-logs.a: $(BIGSIM_IO_OBJS)
1017         $(CHARMC) -o $@  $(BIGSIM_IO_OBJS)
1018
1019 $(L)/libconv-bluegene-stub.a:  blue_stub.o
1020         $(CHARMC) -o $@  blue_stub.o
1021
1022 $(L)/libblue-standalone.a: blue_standalone.o
1023         $(CHARMC) -o $@  blue_standalone.o
1024
1025 ###############################################################################
1026 #
1027 # The CPM scanner
1028 #
1029 ###############################################################################
1030
1031 conv-cpm: conv-cpm.o
1032         $(NATIVECHARMC) -language c -o conv-cpm -cp ../bin/ conv-cpm.o
1033
1034 conv-cpm.o: conv-cpm.c $(CVHEADERS)
1035         $(NATIVECHARMC) conv-cpm.c
1036
1037 ###############################################################################
1038 #
1039 # The interface translator
1040 #
1041 ###############################################################################
1042
1043 XIHEADERS=conv-autoconfig.h xi-symbol.h xi-util.h xi-grammar.tab.h
1044 CHARMXIOBJ=xi-main.o xi-symbol.o xi-grammar.tab.o xi-scan.o xi-util.o
1045 SDAGOBJ=sdag-globals.o CSdagConstruct.o CEntry.o
1046 SDAGHEADERS= CToken.h EToken.h CParsedFile.h \
1047         sdag-globals.h CEntry.h
1048
1049 charmxi: ../bin/charmxi
1050
1051 ../bin/charmxi: $(CHARMXIOBJ) $(SDAGOBJ)
1052         $(NATIVECHARMC) -language c++ -cp ../bin/ -o charmxi $(CHARMXIOBJ) $(SDAGOBJ)
1053
1054 xi-main.o: xi-main.C $(XIHEADERS) $(SDAGHEADERS)
1055         $(NATIVECHARMC) xi-main.C
1056
1057 xi-symbol.o: xi-symbol.C $(XIHEADERS) $(SDAGHEADERS)
1058         $(NATIVECHARMC) xi-symbol.C
1059
1060 xi-util.o: xi-util.C $(XIHEADERS) $(SDAGHEADERS)
1061         $(NATIVECHARMC) xi-util.C
1062
1063 xi-grammar.tab.o: xi-grammar.tab.C $(XIHEADERS) $(SDAGHEADERS)
1064         $(NATIVECHARMC) xi-grammar.tab.C
1065
1066 xi-scan.o: xi-scan.C $(XIHEADERS) $(SDAGHEADERS)
1067         $(NATIVECHARMC) -I. -DYY_NEVER_INTERACTIVE xi-scan.C
1068
1069 sdag-globals.o: sdag-globals.C $(XIHEADERS) $(SDAGHEADERS)
1070         $(NATIVECHARMC) -c sdag-globals.C
1071
1072 CSdagConstruct.o: CSdagConstruct.C $(XIHEADERS) $(SDAGHEADERS)
1073         $(NATIVECHARMC) -c CSdagConstruct.C
1074
1075 CEntry.o: CEntry.C $(XIHEADERS) $(SDAGHEADERS)
1076         $(NATIVECHARMC) -c CEntry.C
1077
1078 ###############################################################################
1079 #
1080 # Simple Messaging
1081 #
1082 ###############################################################################
1083
1084 $(L)/libtsm.a: converse simplemsg.c simplemsg.h
1085         $(CHARMC) -o $@ simplemsg.c
1086
1087 $(L)/libsm.a: converse sm.c sm.h
1088         $(CHARMC) -o $@ sm.c
1089
1090 ###############################################################################
1091 #
1092 # PVM
1093 #
1094 ###############################################################################
1095
1096 PVMC=pvmc_buf.o pvmc_comm.o pvmc_conv.o pvmc_main.o pvmc_pack.o pvmc_groups.o
1097
1098 $(L)/libpvmc.a: $(PVMC)
1099         $(CHARMC) -o $@ $(PVMC)
1100
1101 pvmc_buf.o: pvmc_buf.c pvmc.h pvm3.h converse.h
1102         $(CHARMC) -o $@ pvmc_buf.c
1103
1104 pvmc_conv.o: pvmc_conv.c pvmc.h pvm3.h converse.h
1105         $(CHARMC) -o $@ pvmc_conv.c
1106
1107 pvmc_pack.o: pvmc_pack.c pvmc.h pvm3.h converse.h
1108         $(CHARMC) -o $@ pvmc_pack.c
1109
1110 pvmc_comm.o: pvmc_comm.c pvmc.h pvm3.h converse.h
1111         $(CHARMC) -o $@ pvmc_comm.c
1112
1113 pvmc_groups.o: pvmc_groups.c pvmc.h pvm3.h converse.h
1114         $(CHARMC) -o $@ pvmc_groups.c
1115
1116 pvmc_main.o: pvmc_main.c pvmc.h pvm3.h converse.h
1117         $(CHARMC) -o $@ pvmc_main.c
1118
1119 $(L)/libf90charm.a: charmxi f90main.ci f90main.h f90main.C futil.f90
1120         $(CHARMC) f90main.ci
1121         $(CHARMC) -c -DAMPI_FORTRAN=1 f90main.C
1122         -$(CHARMC) -c futil.f90
1123         -$(CHARMC) -o $@ f90main.o futil.o
1124
1125 ###############################################################################
1126 #
1127 # Make clean
1128 #
1129 ###############################################################################
1130
1131 install:
1132         @test ! -d $(DESTDIR)/include && mkdir -p $(DESTDIR)/include || true
1133         @test ! -d $(DESTDIR)/lib && mkdir -p $(DESTDIR)/lib || true
1134         @test ! -d $(DESTDIR)/lib_so && mkdir -p $(DESTDIR)/lib_so || true
1135         @test ! -d $(DESTDIR)/bin && mkdir -p $(DESTDIR)/bin || true
1136         cp -f ../include/*   $(DESTDIR)/include
1137         cp -f ../lib/*       $(DESTDIR)/lib
1138         cp -f ../lib_so/*    $(DESTDIR)/lib_so
1139 #       cp -f ../bin/*       $(DESTDIR)/bin
1140         for f in ../bin/*; do if test -f $$f; then cp -f $$f $(DESTDIR)/bin; fi; done
1141
1142
1143 clean:
1144         rm -f conv-autoconfig.h config.cache
1145         rm -f QuickThreads/libqt.a
1146         rm -f charmxi conv-cpm
1147         rm -f TAGS basics cmk_extras core
1148         rm -f core *.a
1149         rm -f core *.o
1150         rm -f core #*#
1151         rm -f core *~
1152         if [ -d charmrun ] ; then ( cd charmrun; make clean ) ; fi
1153         -( cd doc && $(MAKE) clean )
1154         ( cd libs; $(MAKE) clean )
1155         ( cd ../examples && $(MAKE) clean )
1156         ( cd ../tests && $(MAKE) clean )
1157
1158 veryclean:
1159         rm -rf ../bin
1160         rm -rf ../lib
1161         rm -rf ../src
1162         rm -rf ../examples
1163         rm -rf ../tests
1164         rm -rf ../include
1165         rm -rf ../doc
1166         mv Makefile .Makefile
1167         mv Make.depends .Make.depends
1168         rm -rf [a-z]* [A-Z]*
1169         mv .Make.depends Make.depends
1170         rm -rf .[a-z]* .[A-Z]*
1171
1172
1173 config: configure.in
1174         autoconf && autoheader
1175
1176 depends: basics
1177         echo "Creating " $(DEPENDFILE) " ...";
1178         if [ -f $(DEPENDFILE) ]; then \
1179            /bin/cp -f $(DEPENDFILE) $(DEPENDFILE).old; \
1180         fi; \
1181         echo '#generated by make depends' > $(DEPENDFILE); \
1182         processFiles='';        \
1183         for i in $(LIBCONV_CORE) $(TRACE_OBJS) $(LIBCK_CORE) $(LB_OBJ) $(LIBBLUE_OBJS) $(COMLIB_OBJS) $(CONTROLPOINTS_OBJS); do \
1184               processed='false';        \
1185               for f in $$processFiles; do       \
1186                 if test $$i = $$f ; then        \
1187                   processed=true;  break;       \
1188                 fi;     \
1189               done;     \
1190               test $$processed = 'true'  && continue;   \
1191               processFiles="$$processFiles $$i";        \
1192               SRCFILE=`basename $$i .o`.C ; \
1193               [ ! -f $$SRCFILE ] && SRCFILE=`basename $$i .o`.c ;       \
1194               echo "checking dependencies for $$SRCFILE" ; \
1195               if g++ -MM -Wno-deprecated -I. -I$(INC) $$SRCFILE  >> $(DEPENDFILE); then   echo '        $$(CHARMC) -c -I. '$$SRCFILE >> $(DEPENDFILE) ; else echo '' ; echo "Compilation of '$$SRCFILE' failed, please fix it first!!!!" ; exit; fi;  \
1196               echo '' >> $(DEPENDFILE) ; \
1197         done;
1198
1199
1200 dependsCaseSensitive: basics
1201         echo "Creating " $(DEPENDFILE) " ...";
1202         if [ -f $(DEPENDFILE) ]; then \
1203            /bin/cp -f $(DEPENDFILE) $(DEPENDFILE).old; \
1204         fi; \
1205         echo '#generated by make depends' > $(DEPENDFILE); \
1206         processFiles='';        \
1207         for i in $(LIBCONV_CORE) $(TRACE_OBJS) $(LIBCK_CORE) $(LB_OBJ) $(LIBBLUE_OBJS) $(COMLIB_OBJS) $(CONTROLPOINTS_OBJS); do \
1208               processed='false';        \
1209               for f in $$processFiles; do       \
1210                 if test $$i = $$f ; then        \
1211                   processed=true;  break;       \
1212                 fi;     \
1213               done;     \
1214               test $$processed = 'true'  && continue;   \
1215               processFiles="$$processFiles $$i";        \
1216               SRCFILE=`basename $$i .o`.C ; \
1217               SRCDIR=`dirname $$i` ; \
1218               found=`/usr/bin/find $$SRCDIR -depth 1 -name $$SRCFILE`; \
1219               [ ! $$found ] && SRCFILE=`basename $$i .o`.c ; \
1220               echo "checking dependencies for $$SRCFILE" ; \
1221               if g++ -MM -Wno-deprecated -I. -I$(INC) $$SRCFILE  >> $(DEPENDFILE); then   echo '        $$(CHARMC) -c -I. '$$SRCFILE >> $(DEPENDFILE) ; else echo '' ; echo "Compilation of '$$SRCFILE' failed, please fix it first!!!!" ; exit; fi;  \
1222               echo '' >> $(DEPENDFILE) ; \
1223         done;
1224
1225
1226