Fix implicit declarations in C files
[namd.git] / Makefile
1 # pass version/platform information to compile
2 NAMD_VERSION = 2.13
3
4 # compiler flags (Win32 overrides)
5 COPTI = -I
6 COPTC = -c
7 COPTD = -D
8 COPTO = -o $(SPACE)
9
10 # Unix commands
11
12 ECHO = echo
13 MOVE = mv
14 MKDIR = mkdir -p
15 COPY = cp
16 RM = rm -f
17 LDD = ldd
18
19 # pass version/platform information to compile
20 RELEASE=$(COPTD)NAMD_VERSION=\"$(NAMD_VERSION)\" $(COPTD)NAMD_PLATFORM=\"$(NAMD_PLATFORM)\" $(RELEASEFLAGS)
21
22 # directories
23 SRCDIR = src
24 DSTDIR = obj
25 INCDIR = inc
26 DPMTADIR=dpmta-2.6
27 DPMEDIR=dpme2
28 PLUGINSRCDIR= plugins/molfile_plugin/src
29 PLUGININCDIR= plugins/include
30 SBSRCDIR = sb/src
31 COLVARSSRCDIR = colvars/src
32 COLVARSINCDIR = colvars/src
33 LEPTONSRCDIR = lepton/src
34 LEPTONINCDIR = lepton/include
35
36 MKDSTDIR = $(DSTDIR)/.exists
37 MKINCDIR = $(INCDIR)/.exists
38
39 # comment/uncomment these lines for (D)PMTA routines
40 #DPMTAINCL=$(COPTI)$(DPMTADIR)/mpole $(COPTI)$(DPMTADIR)/src
41 #DPMTALIB=-L$(DPMTADIR)/mpole -L$(DPMTADIR)/src -ldpmta2 -lmpole -lpvmc
42 #DPMTAFLAGS=$(COPTD)DPMTA
43 #DPMTA=$(DPMTAINCL) $(DPMTAFLAGS)
44 #DPMTALIBS=$(DPMTADIR)/mpole/libmpole.a $(DPMTADIR)/src/libdpmta2.a
45
46 # comment/uncomment these lines for DPME routines
47 #DPMEINCL=$(COPTI)$(DPMEDIR)
48 #DPMELIB=-L$(DPMEDIR) -ldpme
49 #DPMEFLAGS=$(COPTD)DPME
50 #DPME=$(DPMEINCL) $(DPMEFLAGS)
51 #DPMELIBS= $(DPMEDIR)/libdpme.a
52
53 # comment/uncomment these lines for FMM routines
54 #
55 # ufmmlap library from J. Huang - http://fastmultipole.org/Main/FMMSuite/
56 #   (ufmmlap = Uniform FMM Laplace Solver)
57 #
58 # Options below assume building with Gnu compilers.
59 # Define FMMDIR in Make.config file.
60 #
61 #FMMNAME=ufmmlap
62 #FMMINCL=$(COPTI)$(FMMDIR)/src
63 #FMMLIB=-L$(FMMDIR)/src -l$(FMMNAME) -lgfortran
64 #FMMFLAGS=$(COPTD)FMM_SOLVER
65 #FMM=$(FMMINCL) $(FMMFLAGS)
66 #FMMLIBS=$(FMMDIR)/src/lib$(FMMNAME).a
67
68 # to compile a memory optimized version, uncomment or config --with-memopt
69 #MEMOPT=-DMEM_OPT_VERSION
70 # to compile version that uses node-aware proxy send/recv spanning tree,
71 # add -DNODEAWARE_PROXY_SPANNINGTREE to the variable EXTRADEFINES
72 #EXTRADEFINES=-DREMOVE_PROXYDATAMSG_EXTRACOPY -DREMOVE_PROXYRESULTMSG_EXTRACOPY
73 EXTRADEFINES=-DREMOVE_PROXYRESULTMSG_EXTRACOPY -DNODEAWARE_PROXY_SPANNINGTREE -DUSE_NODEPATCHMGR -DBONDED_CUDA -DUSE_HOMETUPLES
74 EXTRAINCS=
75 EXTRALINKLIBS=
76 # to compile namd using PAPI counters to measure flops and modify include and library path
77 # correspondingly
78 #EXTRADEFINES=-DREMOVE_PROXYRESULTMSG_EXTRACOPY -DMEASURE_NAMD_WITH_PAPI
79 #EXTRAINCS=-I$(HOME)/papi/include
80 #EXTRALINKLIBS=-lpapi -L$(HOME)/papi/lib
81
82 #If using the CkLoop library from Charm++ for PME calculation, first define macro
83 # USE_CKLOOP=1 for compiling the code, and then add "-module CkLoop" for linking.
84 CKLOOP = -DUSE_CKLOOP=1
85 CKLOOP_MODULE = -module CkLoop
86
87 # defaults for special cases
88 CXXTHREADOPTS = $(CXXOPTS) 
89 CXXSIMPARAMOPTS = $(CXXOPTS) 
90 CXXNOALIASOPTS = $(CXXOPTS) 
91 CXXCOLVAROPTS = $(CXXOPTS) 
92 CXXMEMUSAGE = $(CXX)
93 CUDACC = $(CXX)
94 CUDAOBJS =
95 NATIVEPATH = echo
96
97 # Math library needs to be redefined for Sameer's POWER-xlC build.
98 # The default below should be correct for everything else.
99 MATHLIBS = -lm
100
101 include Make.config
102
103 # define below Make.config so Win32 can change default target to winall
104 default: all
105
106 # Add new source files here.
107
108 OBJS = \
109         $(DSTDIR)/ComputeMoa.o \
110         $(DSTDIR)/ComputeMsm.o \
111         $(DSTDIR)/ComputeMsmMsa.o \
112         $(DSTDIR)/ComputeMsmSerial.o \
113         $(DSTDIR)/ComputeFmmSerial.o \
114         $(DSTDIR)/msm.o \
115         $(DSTDIR)/msm_longrng.o \
116         $(DSTDIR)/msm_longrng_sprec.o \
117         $(DSTDIR)/msm_setup.o \
118         $(DSTDIR)/msm_shortrng.o \
119         $(DSTDIR)/msm_shortrng_sprec.o \
120         $(DSTDIR)/wkfutils.o \
121         $(DSTDIR)/common.o \
122         $(DSTDIR)/dcdlib.o \
123         $(DSTDIR)/eabf1D.o \
124         $(DSTDIR)/eabf2D.o \
125         $(DSTDIR)/eabffunc.o \
126         $(DSTDIR)/eabfTcl.o \
127         $(DSTDIR)/erf.o \
128         $(DSTDIR)/fitrms.o \
129         $(DSTDIR)/main.o \
130         $(DSTDIR)/mainfunc.o \
131         $(DSTDIR)/memusage.o \
132         $(DSTDIR)/strlib.o \
133         $(DSTDIR)/AlgSeven.o \
134         $(DSTDIR)/AlgRecBisection.o \
135         $(DSTDIR)/AlgNbor.o \
136         $(DSTDIR)/AtomMap.o \
137         $(DSTDIR)/BackEnd.o \
138         $(DSTDIR)/BroadcastMgr.o \
139         $(DSTDIR)/BroadcastClient.o \
140         $(DSTDIR)/CollectionMaster.o \
141         $(DSTDIR)/CollectionMgr.o \
142         $(DSTDIR)/Communicate.o \
143         $(DSTDIR)/Compute.o \
144         $(DSTDIR)/ComputeAngles.o \
145         $(DSTDIR)/ComputeAniso.o \
146         $(DSTDIR)/ComputeBonds.o \
147         $(DSTDIR)/ComputeBondedCUDA.o \
148         $(DSTDIR)/ComputeConsForce.o \
149         $(DSTDIR)/ComputeConsForceMsgs.o \
150         $(DSTDIR)/ComputeCrossterms.o \
151         $(DSTDIR)/ComputeCUDAMgr.o \
152         $(DSTDIR)/ComputeCylindricalBC.o \
153         $(DSTDIR)/ComputeDihedrals.o \
154         $(DSTDIR)/ComputeDPME.o \
155         $(DSTDIR)/ComputeDPMEMsgs.o \
156         $(DSTDIR)/ComputeDPMTA.o \
157         $(DSTDIR)/ComputeEField.o \
158         $(DSTDIR)/ComputeEwald.o \
159         $(DSTDIR)/ComputeExt.o \
160         $(DSTDIR)/ComputeQM.o \
161         $(DSTDIR)/ComputeGBISser.o \
162         $(DSTDIR)/ComputeGBIS.o \
163         $(DSTDIR)/ComputeGromacsPair.o \
164         $(DSTDIR)/ComputeLCPO.o \
165         $(DSTDIR)/ComputeFullDirect.o \
166         $(DSTDIR)/ComputeHomePatch.o \
167         $(DSTDIR)/ComputeHomePatches.o \
168         $(DSTDIR)/ComputeImpropers.o \
169         $(DSTDIR)/ComputeGlobal.o \
170         $(DSTDIR)/ComputeGlobalMsgs.o \
171         $(DSTDIR)/ComputeGridForce.o \
172         $(DSTDIR)/ComputeMap.o \
173         $(DSTDIR)/ComputeMgr.o \
174         $(DSTDIR)/ComputeNonbondedSelf.o \
175         $(DSTDIR)/ComputeNonbondedPair.o \
176         $(DSTDIR)/ComputeNonbondedUtil.o \
177         $(DSTDIR)/ComputeNonbondedStd.o \
178         $(DSTDIR)/ComputeNonbondedFEP.o \
179         $(DSTDIR)/ComputeNonbondedGo.o \
180         $(DSTDIR)/ComputeNonbondedTI.o \
181         $(DSTDIR)/ComputeNonbondedLES.o \
182         $(DSTDIR)/ComputeNonbondedPProf.o \
183         $(DSTDIR)/ComputeNonbondedTabEnergies.o \
184         $(DSTDIR)/ComputeNonbondedCUDA.o \
185         $(DSTDIR)/ComputeNonbondedCUDAExcl.o \
186         $(DSTDIR)/ComputeNonbondedMIC.o \
187         $(DSTDIR)/ComputeNonbondedMICKernel.o \
188         $(DSTDIR)/ComputePatch.o \
189         $(DSTDIR)/ComputePatchPair.o \
190         $(DSTDIR)/ComputePme.o \
191         $(DSTDIR)/ComputePmeCUDA.o \
192         $(DSTDIR)/ComputePmeCUDAMgr.o \
193         $(DSTDIR)/ComputeRestraints.o \
194         $(DSTDIR)/ComputeSphericalBC.o \
195         $(DSTDIR)/ComputeStir.o \
196         $(DSTDIR)/ComputeTclBC.o \
197         $(DSTDIR)/ComputeThole.o \
198         $(DSTDIR)/ConfigList.o \
199         $(DSTDIR)/Controller.o \
200         $(DSTDIR)/CudaComputeNonbonded.o \
201         $(DSTDIR)/CudaNonbondedTables.o \
202         $(DSTDIR)/CudaPmeSolver.o \
203         $(DSTDIR)/CudaPmeSolverUtil.o \
204         $(DSTDIR)/CudaUtils.o \
205         $(DSTDIR)/ccsinterface.o \
206         $(DSTDIR)/DataStream.o \
207         $(DSTDIR)/DeviceCUDA.o \
208         $(DSTDIR)/DumpBench.o \
209         $(DSTDIR)/FreeEnergyAssert.o \
210         $(DSTDIR)/FreeEnergyGroup.o \
211         $(DSTDIR)/FreeEnergyLambda.o \
212         $(DSTDIR)/FreeEnergyLambdMgr.o \
213         $(DSTDIR)/FreeEnergyParse.o \
214         $(DSTDIR)/FreeEnergyRestrain.o \
215         $(DSTDIR)/FreeEnergyRMgr.o \
216         $(DSTDIR)/FreeEnergyVector.o \
217         $(DSTDIR)/fstream_namd.o \
218         $(DSTDIR)/GlobalMaster.o \
219         $(DSTDIR)/GlobalMasterServer.o \
220         $(DSTDIR)/GlobalMasterTest.o \
221         $(DSTDIR)/GlobalMasterIMD.o \
222         $(DSTDIR)/GlobalMasterTcl.o \
223         $(DSTDIR)/GlobalMasterSMD.o \
224         $(DSTDIR)/GlobalMasterTMD.o \
225         $(DSTDIR)/Matrix4Symmetry.o \
226         $(DSTDIR)/GlobalMasterSymmetry.o \
227         $(DSTDIR)/GlobalMasterFreeEnergy.o \
228         $(DSTDIR)/GlobalMasterEasy.o \
229         $(DSTDIR)/GlobalMasterMisc.o \
230         $(DSTDIR)/colvarproxy_namd.o \
231         $(DSTDIR)/GridForceGrid.o \
232         $(DSTDIR)/GromacsTopFile.o \
233         $(DSTDIR)/heap.o \
234         $(DSTDIR)/HomePatch.o \
235         $(DSTDIR)/IMDOutput.o \
236         $(DSTDIR)/InfoStream.o \
237         $(DSTDIR)/LdbCoordinator.o \
238         $(DSTDIR)/LJTable.o \
239         $(DSTDIR)/Measure.o \
240         $(DSTDIR)/MGridforceParams.o \
241         $(DSTDIR)/MStream.o \
242         $(DSTDIR)/MigrateAtomsMsg.o \
243         $(DSTDIR)/Molecule.o \
244         $(DSTDIR)/Molecule2.o \
245         $(DSTDIR)/GoMolecule.o \
246         $(DSTDIR)/MoleculeQM.o \
247         $(DSTDIR)/NamdCentLB.o \
248         $(DSTDIR)/NamdNborLB.o \
249         $(DSTDIR)/NamdHybridLB.o \
250         $(DSTDIR)/NamdDummyLB.o \
251         $(DSTDIR)/NamdState.o \
252         $(DSTDIR)/NamdOneTools.o \
253         $(DSTDIR)/Node.o \
254         $(DSTDIR)/Output.o \
255         $(DSTDIR)/Parameters.o \
256         $(DSTDIR)/ParseOptions.o \
257         $(DSTDIR)/Patch.o \
258         $(DSTDIR)/PatchMgr.o \
259         $(DSTDIR)/PatchMap.o \
260         $(DSTDIR)/PDB.o \
261         $(DSTDIR)/PDBData.o \
262         $(DSTDIR)/PmeKSpace.o \
263         $(DSTDIR)/PmeRealSpace.o \
264         $(DSTDIR)/PmeSolver.o \
265         $(DSTDIR)/ProcessorPrivate.o \
266         $(DSTDIR)/ProxyMgr.o \
267         $(DSTDIR)/ProxyPatch.o \
268         $(DSTDIR)/Rebalancer.o \
269         $(DSTDIR)/RecBisection.o \
270         $(DSTDIR)/ReductionMgr.o \
271         $(DSTDIR)/RefineOnly.o \
272         $(DSTDIR)/RefineTorusLB.o \
273         $(DSTDIR)/ScriptTcl.o \
274         $(DSTDIR)/Sequencer.o \
275         $(DSTDIR)/Set.o \
276         $(DSTDIR)/Settle.o \
277         $(DSTDIR)/SimParameters.o \
278         $(DSTDIR)/SortAtoms.o \
279         $(DSTDIR)/Sync.o \
280         $(DSTDIR)/TclCommands.o \
281         $(DSTDIR)/TorusLB.o \
282         $(DSTDIR)/WorkDistrib.o \
283         $(DSTDIR)/pub3dfft.o \
284         $(DSTDIR)/vmdsock.o \
285         $(DSTDIR)/parm.o \
286         $(DSTDIR)/imd.o \
287         $(DSTDIR)/CompressPsf.o \
288         $(DSTDIR)/PluginIOMgr.o \
289         $(DSTDIR)/DataExchanger.o \
290         $(DSTDIR)/ParallelIOMgr.o 
291
292
293 # Add new modules here.
294
295 CIFILES =       \
296                 $(INCDIR)/ComputeMoaMgr.decl.h \
297                 $(INCDIR)/ComputeMoaMgr.def.h \
298                 $(INCDIR)/ComputeMsmMgr.decl.h \
299                 $(INCDIR)/ComputeMsmMgr.def.h \
300                 $(INCDIR)/ComputeMsmMsaMgr.decl.h \
301                 $(INCDIR)/ComputeMsmMsaMgr.def.h \
302                 $(INCDIR)/ComputeMsmSerialMgr.decl.h \
303                 $(INCDIR)/ComputeMsmSerialMgr.def.h \
304                 $(INCDIR)/ComputeFmmSerialMgr.decl.h \
305                 $(INCDIR)/ComputeFmmSerialMgr.def.h \
306                 $(INCDIR)/BroadcastMgr.decl.h \
307                 $(INCDIR)/BroadcastMgr.def.h \
308                 $(INCDIR)/CollectionMaster.decl.h \
309                 $(INCDIR)/CollectionMaster.def.h \
310                 $(INCDIR)/CollectionMgr.decl.h \
311                 $(INCDIR)/CollectionMgr.def.h \
312                 $(INCDIR)/ComputeCUDAMgr.decl.h \
313                 $(INCDIR)/ComputeCUDAMgr.def.h \
314                 $(INCDIR)/ComputeMgr.decl.h \
315                 $(INCDIR)/ComputeMgr.def.h \
316                 $(INCDIR)/ComputeGridForceMgr.decl.h \
317                 $(INCDIR)/ComputeGridForceMgr.def.h \
318                 $(INCDIR)/ComputePmeMgr.decl.h \
319                 $(INCDIR)/ComputePmeMgr.def.h \
320                 $(INCDIR)/ComputePmeCUDAMgr.decl.h \
321                 $(INCDIR)/ComputePmeCUDAMgr.def.h \
322                 $(INCDIR)/CudaPmeSolver.decl.h \
323                 $(INCDIR)/CudaPmeSolver.def.h \
324                 $(INCDIR)/PmeSolver.decl.h \
325                 $(INCDIR)/PmeSolver.def.h \
326                 $(INCDIR)/ComputeExtMgr.decl.h \
327                 $(INCDIR)/ComputeExtMgr.def.h \
328                 $(INCDIR)/ComputeQMMgr.decl.h \
329                 $(INCDIR)/ComputeQMMgr.def.h \
330                 $(INCDIR)/ComputeGBISserMgr.decl.h \
331                 $(INCDIR)/ComputeGBISserMgr.def.h \
332                 $(INCDIR)/LdbCoordinator.decl.h \
333                 $(INCDIR)/LdbCoordinator.def.h \
334                 $(INCDIR)/NamdCentLB.decl.h \
335                 $(INCDIR)/NamdCentLB.def.h \
336                 $(INCDIR)/NamdNborLB.decl.h \
337                 $(INCDIR)/NamdNborLB.def.h \
338                 $(INCDIR)/NamdHybridLB.decl.h \
339                 $(INCDIR)/NamdHybridLB.def.h \
340                 $(INCDIR)/NamdDummyLB.decl.h \
341                 $(INCDIR)/NamdDummyLB.def.h \
342                 $(INCDIR)/Node.decl.h \
343                 $(INCDIR)/Node.def.h \
344                 $(INCDIR)/PatchMgr.decl.h \
345                 $(INCDIR)/PatchMgr.def.h \
346                 $(INCDIR)/ProxyMgr.decl.h \
347                 $(INCDIR)/ProxyMgr.def.h \
348                 $(INCDIR)/ReductionMgr.decl.h \
349                 $(INCDIR)/ReductionMgr.def.h \
350                 $(INCDIR)/Sync.decl.h \
351                 $(INCDIR)/Sync.def.h \
352                 $(INCDIR)/WorkDistrib.decl.h \
353                 $(INCDIR)/WorkDistrib.def.h \
354                 $(INCDIR)/ParallelIOMgr.decl.h \
355                 $(INCDIR)/ParallelIOMgr.def.h \
356                 $(INCDIR)/DataExchanger.decl.h \
357                 $(INCDIR)/DataExchanger.def.h \
358                 $(INCDIR)/main.decl.h \
359                 $(INCDIR)/main.def.h 
360
361 # Add new source files here.
362
363 PLUGINOBJS = \
364         $(DSTDIR)/dcdplugin.o \
365         $(DSTDIR)/jsplugin.o \
366         $(DSTDIR)/namdbinplugin.o \
367         $(DSTDIR)/pdbplugin.o \
368         $(DSTDIR)/psfplugin.o
369
370 PLUGINLIB = $(PLUGINOBJS)
371
372 CUDAOBJSRAW = \
373         $(DSTDIR)/ComputeBondedCUDAKernel.o \
374         $(DSTDIR)/ComputeNonbondedCUDAKernel.o \
375         $(DSTDIR)/ComputePmeCUDAKernel.o \
376         $(DSTDIR)/CudaComputeGBISKernel.o \
377         $(DSTDIR)/CudaComputeNonbondedKernel.o \
378         $(DSTDIR)/CudaPmeSolverUtilKernel.o \
379         $(DSTDIR)/CudaTileListKernel.o
380
381 CUDAOBJSRAWSTATIC = $(CUDAOBJSRAW) \
382         $(DSTDIR)/CudaPmeSolverUtilKernel_dlink.o
383
384 $(DSTDIR)/CudaPmeSolverUtilKernel_dlink.o: $(DSTDIR)/CudaPmeSolverUtilKernel.o
385         $(CUDACC) $(CUDADLINKOPTS) -v -lcufft_static -dlink $(DSTDIR)/CudaPmeSolverUtilKernel.o $(COPTO)$@
386
387 SBOBJS = $(DSTDIR)/tcl_main.o $(SBLIB)
388
389 SBLIB = \
390         $(DSTDIR)/tcl_psfgen.o \
391         $(DSTDIR)/charmm_file.o \
392         $(DSTDIR)/charmm_parse_topo_defs.o \
393         $(DSTDIR)/extract_alias.o \
394         $(DSTDIR)/hash.o \
395         $(DSTDIR)/hasharray.o \
396         $(DSTDIR)/memarena.o \
397         $(DSTDIR)/pdb_file.o \
398         $(DSTDIR)/pdb_file_extract.o \
399         $(DSTDIR)/psf_file.o \
400         $(DSTDIR)/psf_file_extract.o \
401         $(DSTDIR)/topo_defs.o \
402         $(DSTDIR)/topo_mol.o \
403         $(DSTDIR)/topo_mol_output.o \
404         $(DSTDIR)/topo_mol_pluginio.o \
405         $(DSTDIR)/stringhash.o
406
407 include colvars/src/Makefile.namd
408
409 LEPTONOBJS = \
410         $(DSTDIR)/CompiledExpression.o \
411         $(DSTDIR)/ExpressionProgram.o \
412         $(DSTDIR)/ExpressionTreeNode.o \
413         $(DSTDIR)/Operation.o \
414         $(DSTDIR)/ParsedExpression.o \
415         $(DSTDIR)/Parser.o 
416
417 # definitions for Charm routines
418 CHARMC = $(CHARM)/bin/charmc
419 CHARMXI = $(CHARM)/bin/charmc
420 CHARMINC = $(CHARM)/include $(COPTD)CMK_OPTIMIZE=1
421 CHARMLIB = $(CHARM)/lib
422 CHARM_MODULES = -module NeighborLB -module HybridLB -module RefineLB -module GreedyLB -module CkMulticast $(CKLOOP_MODULE)
423 #CHARM_MODULES = -module NeighborLB -module HybridLB -module RefineLB -module GreedyLB
424 #CHARM_MODULES = -module msa -module NeighborLB -module HybridLB -module RefineLB -module GreedyLB
425 #MSA = -DCHARM_HAS_MSA
426
427 # Libraries we may have changed
428 LIBS = $(CUDAOBJS) $(PLUGINLIB) $(SBLIB) $(COLVARSLIB) $(DPMTALIBS) $(DPMELIBS) $(FMMLIBS) $(TCLDLL) $(LEPTONOBJS)
429
430 # CXX is platform dependent
431 CXXBASEFLAGS = $(COPTI)$(CHARMINC) $(COPTI)$(SRCDIR) $(COPTI)$(INCDIR) $(DPMTA) $(DPME) $(FMM) $(COPTI)$(PLUGININCDIR) $(COPTI)$(COLVARSINCDIR) $(COPTD)STATIC_PLUGIN $(TCL) $(PYTHON) $(FFT) $(CUDA) $(MIC) $(MEMOPT) $(CCS) $(RELEASE) $(EXTRADEFINES) $(TRACEOBJDEF) $(EXTRAINCS) $(MSA) $(CKLOOP)
432 CXXFLAGS = $(CXXBASEFLAGS) $(CXXOPTS)
433 CXXMICFLAGS = $(CXXBASEFLAGS) $(CXXOPTS) $(CXXMICOPTS)
434 CXXTHREADFLAGS = $(CXXBASEFLAGS) $(CXXTHREADOPTS)
435 CXXSIMPARAMFLAGS = $(CXXBASEFLAGS) $(CXXSIMPARAMOPTS)
436 CXXNOALIASFLAGS = $(CXXBASEFLAGS) $(CXXNOALIASOPTS)
437 COLVARSCXXFLAGS = $(CXXBASEFLAGS) $(CXXCOLVAROPTS) $(COPTI)$(LEPTONINCDIR) -DLEPTON -DLEPTON_USE_STATIC_LIBRARIES
438 GXXFLAGS = $(CXXBASEFLAGS) -DNO_STRSTREAM_H
439 CFLAGS = $(COPTI)$(SRCDIR) $(TCL) $(COPTS) $(RELEASE) $(EXTRADEFINES) $(TRACEOBJDEF)
440 PLUGINGCCFLAGS = $(COPTI)$(PLUGINSRCDIR) $(COPTI)$(PLUGININCDIR) $(COPTD)STATIC_PLUGIN
441 PLUGINCFLAGS = $(PLUGINGCCFLAGS) $(COPTS)
442 SBCFLAGS = $(COPTI)$(SBSRCDIR) $(COPTI)$(PLUGININCDIR) $(COPTD)STATIC_PLUGIN -DPSFGEN_USEPLUGINS $(TCL) $(COPTS) $(RELEASE) $(EXTRADEFINES) $(TRACEOBJDEF)
443 SBGCCFLAGS = $(COPTI)$(SBSRCDIR) $(COPTI)$(PLUGININCDIR) $(COPTD)STATIC_PLUGIN -DPSFGEN_USEPLUGINS $(TCL) $(RELEASE) $(EXTRADEFINES) $(TRACEOBJDEF)
444 COLVARSGXXFLAGS= $(GXXFLAGS)
445 LEPTONGCCFLAGS= $(COPTI)$(LEPTONINCDIR)
446 LEPTONCXXFLAGS=$(CXXBASEFLAGS) $(COPTI)$(LEPTONINCDIR) -DLEPTON_BUILDING_STATIC_LIBRARY
447
448 # .ci preprocessing flags
449 CIPPFLAGS = $(CUDAFLAGS) -DBONDED_CUDA
450
451 # Add new executables here.
452
453 BINARIES = namd2 psfgen sortreplicas flipdcd flipbinpdb charmrun
454
455 NAMDUTILS = diffbinpdb dumpdcd loaddcd fixdcd
456
457 # This should be rebuilt at every compile, but not on Win32.
458 BUILDINFO = $(DSTDIR)/buildinfo
459 MAKEBUILDINFO = \
460         $(RM) $(BUILDINFO).C; \
461         echo 'const char *namd_build_date = ' \"`date`\"\; > $(BUILDINFO).C; \
462         echo 'const char *namd_build_user = ' \"$(USER)\"\; >> $(BUILDINFO).C; \
463         echo 'const char *namd_build_machine = ' \"`hostname`\"\; >> $(BUILDINFO).C; \
464         cat $(BUILDINFO).C; \
465         $(CXX) $(CXXFLAGS) $(COPTO)$(BUILDINFO).o $(COPTC) $(BUILDINFO).C
466
467 all:    $(BINARIES) $(LIBCUDARTSO) $(LIBCUFFTSO)
468
469 utils:  $(NAMDUTILS)
470
471 namd2:  $(MKINCDIR) $(MKDSTDIR) $(OBJS) $(LIBS)
472         $(MAKEBUILDINFO)
473         $(CHARMC) -verbose -ld++-option \
474         '$(COPTI)$(CHARMINC) $(COPTI)$(INCDIR) $(COPTI)$(SRCDIR) $(CXXOPTS)' \
475         $(CHARM_MODULES) -language charm++ \
476         $(BUILDINFO).o \
477         $(OBJS) \
478         $(CUDAOBJS) \
479         $(CUDALIB) \
480         $(DPMTALIB) \
481         $(DPMELIB) \
482         $(FMMLIB) \
483         $(TCLLIB) \
484         $(PYTHONLIB) \
485         $(FFTLIB) \
486         $(PLUGINLIB) \
487         $(SBLIB) \
488         $(COLVARSLIB) \
489         $(LEPTONOBJS) \
490         $(CHARMOPTS) \
491         $(EXTRALINKLIBS) \
492         $(MATHLIBS) -o namd2
493
494 charmrun: $(CHARM)/bin/charmrun # XXX
495         $(COPY) $(CHARM)/bin/charmrun $@
496
497 $(LIBCUDARTSO):
498         $(COPY) $(CUDASODIR)/$(LIBCUDARTSO) $@;
499
500 $(LIBCUFFTSO):
501         $(COPY) $(CUDASODIR)/$(LIBCUFFTSO) $@;
502
503 WINDOWSBINARIES = namd2.exe psfgen.exe sortreplicas.exe
504
505 winall: $(WINDOWSBINARIES) $(LIBCUDARTSO) $(LIBCUFFTSO)
506
507 namd2.exe:  $(MKINCDIR) $(MKDSTDIR) $(OBJS) $(LIBS) $(TCLDLL)
508         $(MAKEBUILDINFO)
509         $(CHARMC) -verbose \
510         $(CHARM_MODULES) -language charm++ \
511         $(BUILDINFO).o \
512         $(OBJS) \
513         $(CUDAOBJS) \
514         $(CUDALIB) \
515         $(DPMTALIB) \
516         $(DPMELIB) \
517         $(FMMLIB) \
518         $(TCLLIB) \
519         $(PYTHONLIB) \
520         $(FFTLIB) \
521         $(PLUGINLIB) \
522         $(SBLIB) \
523         $(COLVARSLIB) \
524         $(LEPTONOBJS) \
525         $(CHARMOPTS) \
526         -o namd2
527
528 charmd.exe:
529         $(COPY) $(CHARM)/bin/charmd.exe charmd.exe
530
531 charmd_faceless.exe:
532         $(COPY) $(CHARM)/bin/charmd_faceless.exe charmd_faceless.exe
533
534 charmrun.exe:
535         $(COPY) $(CHARM)/bin/charmrun.exe charmrun.exe
536
537 psfgen: $(MKDSTDIR) $(SBOBJS) $(PLUGINOBJS)
538         $(CC) $(SBCFLAGS) -o psfgen $(SBOBJS) $(PLUGINOBJS) $(TCLLIB) $(TCLAPPLIB) -lm
539
540 psfgen.exe:     $(MKDSTDIR) $(SBOBJS) $(PLUGINOBJS) $(TCLDLL)
541         $(CC) $(SBCFLAGS) -o psfgen $(SBOBJS) $(PLUGINOBJS) $(TCLLIB) $(TCLAPPLIB) -lm
542
543 sortreplicas:   $(MKDSTDIR) $(DSTDIR)/sortreplicas.o $(PLUGINOBJS)
544         $(CC) $(SBCFLAGS) -o sortreplicas $(DSTDIR)/sortreplicas.o $(PLUGINOBJS) -lm
545
546 sortreplicas.exe:       $(MKDSTDIR) $(DSTDIR)/sortreplicas.o $(PLUGINOBJS)
547         $(CC) $(SBCFLAGS) -o sortreplicas $(DSTDIR)/sortreplicas.o $(PLUGINOBJS) -lm
548
549 $(DSTDIR)/sortreplicas.o:       $(MKDSTDIR) $(SRCDIR)/sortreplicas.c
550         $(CC) $(SBCFLAGS) $(COPTO)$(DSTDIR)/sortreplicas.o $(COPTC) $(SRCDIR)/sortreplicas.c
551
552 diffbinpdb:     $(SRCDIR)/diffbinpdb.c
553         $(CC) $(CFLAGS) -o diffbinpdb $(SRCDIR)/diffbinpdb.c -lm
554
555 flipdcd:        $(SRCDIR)/flipdcd.c
556         $(CC) $(CFLAGS) -o $@ $(SRCDIR)/flipdcd.c || \
557         echo "#!/bin/sh\necho unavailable on this platform" > $@; \
558         chmod +x $@
559
560 flipbinpdb:     $(SRCDIR)/flipbinpdb.c
561         $(CC) $(CFLAGS) -o $@ $(SRCDIR)/flipbinpdb.c || \
562         echo "#!/bin/sh\necho unavailable on this platform" > $@; \
563         chmod +x $@
564
565 fixdcd: $(SRCDIR)/fixdcd.c
566         $(CC) $(CFLAGS) -o fixdcd $(SRCDIR)/fixdcd.c
567
568 dumpdcd:        $(SRCDIR)/dumpdcd.c
569         $(CC) $(CFLAGS) -o dumpdcd $(SRCDIR)/dumpdcd.c
570
571 loaddcd:        $(SRCDIR)/loaddcd.c
572         $(CC) $(CFLAGS) -o loaddcd $(SRCDIR)/loaddcd.c
573
574 updatefiles:
575         touch ../src/ComputeSelfTuples.h
576         rm -f obj/ComputeNonbondedPair.o
577         rm -f obj/ComputeNonbondedSelf.o
578         rm -f obj/ComputePme.o
579
580 #To compile tracecomputes, type the command "make tracecomputes TRACEOBJDEF=-DTRACE_COMPUTE_OBJECTS"
581 tracecomputes: updatefiles $(MKINCDIR) $(MKDSTDIR) $(OBJS) $(LIBS)
582         $(MAKEBUILDINFO)
583         $(CHARMC) -verbose -ld++-option \
584         '$(COPTI)$(CHARMINC) $(COPTI)$(INCDIR) $(COPTI)$(SRCDIR) $(CXXOPTS)' \
585         $(CHARM_MODULES) -language charm++ \
586         -tracemode projections \
587         $(BUILDINFO).o \
588         $(OBJS) \
589         $(CUDAOBJS) \
590         $(CUDALIB) \
591         $(DPMTALIB) \
592         $(DPMELIB) \
593         $(FMMLIB) \
594         $(TCLLIB) \
595         $(PYTHONLIB) \
596         $(FFTLIB) \
597         $(PLUGINLIB) \
598         $(SBLIB) \
599         $(COLVARSLIB) \
600         $(LEPTONOBJS) \
601         $(CHARMOPTS) \
602         $(EXTRALINKLIBS) \
603         $(MATHLIBS) -o namd2.tc.prj
604
605 projections: $(MKINCDIR) $(MKDSTDIR) $(OBJS) $(LIBS)
606         $(MAKEBUILDINFO)
607         $(CHARMC) -verbose -ld++-option \
608         '$(COPTI)$(CHARMINC) $(COPTI)$(INCDIR) $(COPTI)$(SRCDIR) $(CXXOPTS)' \
609         $(CHARM_MODULES) -language charm++ \
610         -tracemode projections \
611         $(BUILDINFO).o \
612         $(OBJS) \
613         $(CUDAOBJS) \
614         $(CUDALIB) \
615         $(DPMTALIB) \
616         $(DPMELIB) \
617         $(FMMLIB) \
618         $(TCLLIB) \
619         $(PYTHONLIB) \
620         $(FFTLIB) \
621         $(PLUGINLIB) \
622         $(SBLIB) \
623         $(COLVARSLIB) \
624         $(LEPTONOBJS) \
625         $(CHARMOPTS) \
626         $(EXTRALINKLIBS) \
627         $(MATHLIBS) -o namd2.prj
628
629 summary: $(MKINCDIR) $(MKDSTDIR) $(OBJS) $(LIBS)
630         $(MAKEBUILDINFO)
631         $(CHARMC) -verbose -ld++-option \
632         '$(COPTI)$(CHARMINC) $(COPTI)$(INCDIR) $(COPTI)$(SRCDIR) $(CXXOPTS)' \
633         -module NeighborLB -module CkMulticast -language charm++ \
634         -tracemode summary \
635         $(BUILDINFO).o \
636         $(OBJS) \
637         $(CUDAOBJS) \
638         $(CUDALIB) \
639         $(DPMTALIB) \
640         $(DPMELIB) \
641         $(FMMLIB) \
642         $(TCLLIB) \
643         $(PYTHONLIB) \
644         $(FFTLIB) \
645         $(PLUGINLIB) \
646         $(SBLIB) \
647         $(COLVARSLIB) \
648         $(LEPTONOBJS) \
649         $(CHARMOPTS) \
650         $(EXTRALINKLIBS) \
651         $(MATHLIBS) -o namd2.sum
652
653 $(DPMTADIR)/mpole/libmpole.a: $(DPMTADIR)/src/libdpmta2.a
654
655 $(DPMTADIR)/src/libdpmta2.a:
656         cd $(DPMTADIR) ; $(MAKE) ; cd ..
657
658 $(DPMEDIR)/libdpme.a:
659         cd $(DPMEDIR) ; $(MAKE) ; cd ..
660
661 $(FMMDIR)/src/lib$(FMMNAME).a:
662         cd $(FMMDIR) ; $(MAKE) ; cd ..
663
664
665 # Implicit rules for modules.
666
667 .SECONDARY:
668         # prevent gmake from deleting intermediate files
669
670 $(INCDIR)/%.decl.h $(INCDIR)/%.def.h: $(MKINCDIR) $(SRCDIR)/%.ci
671         cpp -E -P $(CIPPFLAGS) $(SRCDIR)/$*.ci > $(INCDIR)/$*.ci
672         $(CHARMXI) $(INCDIR)/$*.ci
673         $(RM) $(INCDIR)/$*.ci
674         $(MOVE) $*.def.h $(INCDIR)
675         $(MOVE) $*.decl.h $(INCDIR)
676
677
678 # Explicit rules for modules that don't match their file names.
679 # Multiple targets must be a pattern to execute recipe only once.
680 DEPENDFILE = .rootdir/Make.depends
681
682 # This is a CPU killer...  Don't make depends if you don't need to.
683 depends: $(MKINCDIR) $(CIFILES) $(MKDSTDIR) $(DEPENDFILE)
684         $(ECHO) "Creating " $(DEPENDFILE) " ..."; \
685         if [ -f $(DEPENDFILE) ]; then \
686            $(MOVE) -f $(DEPENDFILE) $(DEPENDFILE).old; \
687         fi; \
688         touch $(DEPENDFILE); \
689         for i in $(OBJS) ; do \
690               SRCFILE=$(SRCDIR)/`basename $$i .o`.C ; \
691               COMPILER='$$(CXX)' ; \
692               if [ ! -f $$SRCFILE ]; then \
693                     SRCFILE=$(SRCDIR)/`basename $$i .o`.c ; \
694                     COMPILER='$$(CC)' ; \
695               fi; \
696               $(ECHO) "checking dependencies for $$SRCFILE" ; \
697               g++ -std=c++0x -MM $(GXXFLAGS) $$SRCFILE | \
698               perl $(SRCDIR)/dc.pl $(CHARMINC) $(TCLDIR) $(FFTDIR) /usr/include /usr/local $(CUDADIR) >> $(DEPENDFILE); \
699               $(ECHO) ' '$$COMPILER '$$(CXXFLAGS) $$(COPTO)'$$i '$$(COPTC)' \
700                 $$SRCFILE >> $(DEPENDFILE) ; \
701         done; \
702         for i in $(CUDAOBJSRAW) ; do \
703               SRCFILE=`basename $$i .o`.cu ; \
704               $(ECHO) "checking dependencies for $(SRCDIR)/$$SRCFILE" ; \
705               g++ -x c++ -std=c++0x -MM $(CUDA) $(SRCDIR)/$$SRCFILE | \
706               perl $(SRCDIR)/dc.pl $(CHARMINC) $(TCLDIR) $(FFTDIR) /usr/include /usr/local $(CUDADIR) $(CUBDIR) >> $(DEPENDFILE); \
707               $(ECHO) ' $$(CUDACC) $$(CUDACCOPTS) -Xptxas -v $$(COPTO)'$$i '$$(COPTC)' \
708                 '`$$(NATIVEPATH) $(SRCDIR)/`'$$SRCFILE >> $(DEPENDFILE) ; \
709         done; \
710         for i in $(PLUGINOBJS) ; do \
711               BASENAME=`basename $$i .o` ; \
712               SRCFILE=$(PLUGINSRCDIR)/$$BASENAME.c ; \
713               $(ECHO) "checking dependencies for $$SRCFILE" ; \
714               gcc -MM $(PLUGINGCCFLAGS) $$SRCFILE | \
715               perl $(SRCDIR)/dc.pl /usr/include /usr/local >> $(DEPENDFILE); \
716               $(ECHO) ' $$(CC) $$(PLUGINCFLAGS) $$(COPTO)'$$i '$$(COPTC)' \
717                 '$$(COPTD)'VMDPLUGIN=molfile_$$BASENAME \
718                 $$SRCFILE >> $(DEPENDFILE) ; \
719         done; \
720         for i in $(SBOBJS) ; do \
721               SRCFILE=$(SBSRCDIR)/`basename $$i .o`.c ; \
722               $(ECHO) "checking dependencies for $$SRCFILE" ; \
723               gcc -MM $(SBGCCFLAGS) $$SRCFILE | \
724               perl $(SRCDIR)/dc.pl $(CHARMINC) $(TCLDIR) $(FFTDIR) /usr/include /usr/local >> $(DEPENDFILE); \
725               $(ECHO) ' $$(CC) $$(SBCFLAGS) $$(COPTO)'$$i '$$(COPTC)' \
726                 $$SRCFILE >> $(DEPENDFILE) ; \
727         done; \
728         for i in $(COLVARSLIB) ; do \
729               SRCFILE=$(COLVARSSRCDIR)/`basename $$i .o`.cpp ; \
730               $(ECHO) "checking dependencies for $$SRCFILE" ; \
731               gcc -MM $(COLVARSGXXFLAGS) $$SRCFILE | \
732               perl $(SRCDIR)/dc.pl $(CHARMINC) $(TCLDIR) $(FFTDIR) /usr/include /usr/local >> $(DEPENDFILE); \
733               $(ECHO) ' $$(CXX) $$(COLVARSCXXFLAGS) $$(COPTO)'$$i '$$(COPTC)' \
734                 $$SRCFILE >> $(DEPENDFILE) ; \
735         done; \
736         for i in $(LEPTONOBJS) ; do \
737               SRCFILE=$(LEPTONSRCDIR)/`basename $$i .o`.cpp ; \
738               $(ECHO) "checking dependencies for $$SRCFILE" ; \
739               gcc -MM $(LEPTONGCCFLAGS) $$SRCFILE | \
740               perl $(SRCDIR)/dc.pl $(CHARMINC) $(TCLDIR) $(FFTDIR) /usr/include /usr/local >> $(DEPENDFILE); \
741               $(ECHO) ' $$(CXX) $$(LEPTONCXXFLAGS) $$(COPTO)'$$i '$$(COPTC)' \
742                 $$SRCFILE >> $(DEPENDFILE) ; \
743         done; \
744         $(RM) $(DEPENDFILE).sed; \
745         sed -e "/obj\/Controller.o/ s/CXXFLAGS/CXXTHREADFLAGS/" \
746             -e "/obj\/Sequencer.o/ s/CXXFLAGS/CXXTHREADFLAGS/" \
747             -e "/obj\/ComputeFullDirect.o/ s/CXXFLAGS/CXXTHREADFLAGS/" \
748             -e "/obj\/ReductionMgr.o/ s/CXXFLAGS/CXXTHREADFLAGS/" \
749             -e "/obj\/SimParameters.o/ s/CXXFLAGS/CXXSIMPARAMFLAGS/" \
750             -e "/obj\/ComputeNonbondedStd.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
751             -e "/obj\/ComputeNonbondedFEP.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
752             -e "/obj\/ComputeNonbondedTI.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
753             -e "/obj\/ComputeNonbondedLES.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
754             -e "/obj\/ComputeNonbondedPProf.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
755             -e "/obj\/ComputeNonbondedTabEnergies.o/ s/CXXFLAGS/CXXNOALIASFLAGS/" \
756             -e "/obj\/ComputeNonbondedMIC.o/ s/CXXFLAGS/CXXMICFLAGS/" \
757             -e "/obj\/ComputeNonbondedMICKernel.o/ s/CXXFLAGS/CXXMICFLAGS/" \
758             -e "/obj\/colvarproxy_namd.o/ s/CXXFLAGS/COLVARSCXXFLAGS/" \
759             -e "/obj\/memusage.o/ s/CXX/CXXMEMUSAGE/" \
760             $(DEPENDFILE) > $(DEPENDFILE).sed; \
761         $(MOVE) -f $(DEPENDFILE).sed $(DEPENDFILE);
762
763 $(DEPENDFILE):
764         touch $(DEPENDFILE)
765
766 include Make.depends
767
768 $(MKDSTDIR):
769         if [ ! -d $(DSTDIR) ]; then $(MKDIR) $(DSTDIR); fi
770         if [ ! -f $(MKDSTDIR) ]; then touch $(MKDSTDIR); fi
771
772 $(MKINCDIR):
773         if [ ! -d $(INCDIR) ]; then $(MKDIR) $(INCDIR); fi
774         if [ ! -f $(MKINCDIR) ]; then touch $(MKINCDIR); fi
775
776 clean:
777         rm -rf ptrepository Templates.DB SunWS_cache $(DSTDIR) $(INCDIR)
778
779 veryclean:      clean
780         rm -f $(BINARIES) $(NAMDUTILS)
781
782 RELEASE_DIR_NAME = NAMD_$(NAMD_VERSION)_$(NAMD_PLATFORM)
783
784 DOC_FILES = README.txt announce.txt license.txt notes.txt
785
786 RELEASE_FILES = $(LIBCUDARTSO) $(LIBCUFFTSO) flipdcd flipbinpdb sortreplicas psfgen charmrun namd2
787
788 WINDOWS_RELEASE_FILES = $(LIBCUDARTSO) $(LIBCUFFTSO) $(WINDOWSBINARIES) $(TCLDLL)
789
790 release: all
791         $(ECHO) Creating release $(RELEASE_DIR_NAME)
792         mkdir $(RELEASE_DIR_NAME)
793         cp $(RELEASE_FILES) $(COMPILERRUNTIMELIBS) $(RELEASE_DIR_NAME)
794         for f in $(DOC_FILES); do cp .rootdir/$$f $(RELEASE_DIR_NAME); done
795         cp -r .rootdir/lib $(RELEASE_DIR_NAME)
796         for f in `find $(RELEASE_DIR_NAME)/lib -name CVS`; do \
797           /bin/rm -rf $$f; \
798         done
799         if [ -r $(CHARM)/bin/charmd ]; then \
800           $(COPY) $(CHARM)/bin/charmd $(RELEASE_DIR_NAME); \
801         fi
802         if [ -r $(CHARM)/bin/charmd_faceless ]; then \
803           $(COPY) $(CHARM)/bin/charmd_faceless $(RELEASE_DIR_NAME); \
804         fi
805         chmod -R a+rX $(RELEASE_DIR_NAME)
806         tar cf $(RELEASE_DIR_NAME).tar $(RELEASE_DIR_NAME)
807         gzip $(RELEASE_DIR_NAME).tar
808         echo $(CHARM)
809         ls -l $(CHARM)/lib
810         -for f in $(RELEASE_FILES); do echo $$f; $(LDD) $(RELEASE_DIR_NAME)/$$f; done
811
812 winrelease: winall
813         $(ECHO) Creating release $(RELEASE_DIR_NAME)
814         mkdir $(RELEASE_DIR_NAME)
815         cp $(WINDOWS_RELEASE_FILES) $(RELEASE_DIR_NAME)
816         for f in $(DOC_FILES); do \
817           perl -p -i -e 's/(?<!\r)\n$$/\r\n/' < .rootdir/$$f > $(RELEASE_DIR_NAME)/$$f; \
818         done
819         cp -r .rootdir/lib $(RELEASE_DIR_NAME)
820         for f in `find $(RELEASE_DIR_NAME)/lib -name CVS`; do \
821           /bin/rm -rf $$f; \
822         done
823         for f in `find $(RELEASE_DIR_NAME)/lib -type f`; do \
824           perl -p -i -e 's/(?<!\r)\n$$/\r\n/' < $$f > $$f.wintxt; \
825           mv $$f.wintxt $$f; \
826         done
827         chmod -R a+rX $(RELEASE_DIR_NAME)
828         echo $(CHARM)
829         ls -l $(CHARM)/lib
830         echo $(CHARM)
831         zip -r $(RELEASE_DIR_NAME).zip $(RELEASE_DIR_NAME)
832