Fork me on GitHub

source: git/doc/genMakefile.tcl@ ef97f2a

ImprovedOutputFile Timing dual_readout llp
Last change on this file since ef97f2a was 71efbfe, checked in by Chekanov <chekanov@…>, 6 years ago

Includes reader DelphesProIO for ProIO data format

  • Property mode set to 100644
File size: 13.6 KB
Line 
1#!/usr/bin/env tclsh
2
3set prefix "tmp/"
4set suffix " \\\n\t"
5
6set srcSuf {.$(SrcSuf)}
7set objSuf {.$(ObjSuf)}
8set pcmSuf {$(PcmSuf)}
9set exeSuf {$(ExeSuf)}
10
11proc dependencies {fileName firstLine {force 1} {command {}}} {
12 global suffix headerFiles sourceFiles
13
14 if {[info exists sourceFiles($fileName)]} return
15
16 set sourceFiles($fileName) 1
17
18 set list {}
19 set fid [open $fileName]
20 while {! [eof $fid]} {
21 set line [gets $fid]
22 if [regexp -- {^\s*#include\s*"((\w+/)+\w+\.(h|hh))"} $line] {
23 set elements [split $line {"}]
24 set file [lindex $elements 1]
25 if [file exists $file] {
26 lappend list $file
27 set headerFiles($file) 1
28 } elseif [file exists external/$file] {
29 lappend list external/$file
30 set headerFiles(external/$file) 1
31 }
32 }
33 }
34
35 if {[llength $list] > 0} {
36 puts -nonewline $firstLine
37 foreach file $list {puts -nonewline $suffix$file}
38 if {$command != {}} {
39 puts {}
40 puts $command
41 }
42 puts {}
43 } elseif {$force} {
44 puts -nonewline $firstLine
45 if {$command != {}} {
46 puts {}
47 puts $command
48 }
49 puts {}
50 }
51
52 close $fid
53}
54
55proc dictDeps {dictPrefix args} {
56
57 global prefix suffix srcSuf objSuf pcmSuf
58
59 set dict [lsort [eval glob -nocomplain $args]]
60
61 set dictSrcFiles {}
62 set dictObjFiles {}
63
64 foreach fileName $dict {
65 regsub {LinkDef\.h} $fileName {Dict} dictName
66 set dictName $prefix$dictName
67
68 lappend dictSrcFiles $dictName$srcSuf
69 lappend dictObjFiles $dictName$objSuf
70 lappend dictPcmFiles [file tail $dictName$pcmSuf]
71
72 dependencies $fileName "$dictName$srcSuf:$suffix$fileName"
73
74 puts -nonewline $dictName$pcmSuf:$suffix
75 puts -nonewline $dictName$srcSuf
76 puts {}
77
78 puts -nonewline [file tail $dictName$pcmSuf]:$suffix
79 puts -nonewline $dictName$pcmSuf
80 puts {}
81 }
82
83 puts -nonewline "${dictPrefix}_OBJ += $suffix"
84 puts [join $dictObjFiles $suffix]
85 puts {}
86
87 puts -nonewline "${dictPrefix}_PCM += $suffix"
88 puts [join $dictPcmFiles $suffix]
89 puts {}
90}
91
92proc sourceDeps {srcPrefix args} {
93
94 global prefix suffix srcSuf objSuf
95
96 set source [lsort [eval glob -nocomplain $args]]
97
98 set srcObjFiles {}
99 set srcObjFilesFastJet {}
100 set srcObjFilesPythia8 {}
101
102 foreach fileName $source {
103 regsub {\.cc} $fileName {} srcName
104 set srcObjName $prefix$srcName
105
106 if {$fileName == "modules/PileUpMergerPythia8.cc"} {
107 lappend srcObjFilesPythia8 $srcObjName$objSuf
108 } elseif {([string match {modules/FastJet*.cc} $fileName] || [string match {modules/RunPUPPI.cc} $fileName]) && $srcPrefix != {FASTJET}} {
109 continue
110 } else {
111 lappend srcObjFiles $srcObjName$objSuf
112 }
113
114 dependencies $fileName "$srcObjName$objSuf:$suffix$srcName$srcSuf"
115 }
116
117 puts -nonewline "${srcPrefix}_OBJ += $suffix"
118 puts [join $srcObjFiles $suffix]
119 puts {}
120
121 puts {ifeq ($(HAS_PYTHIA8),true)}
122 puts -nonewline "${srcPrefix}_OBJ += $suffix"
123 puts [join $srcObjFilesPythia8 $suffix]
124 puts {endif}
125 puts {}
126}
127
128proc tclDeps {} {
129
130 global prefix suffix srcSuf objSuf
131
132 set source [lsort [glob -nocomplain {external/tcl/*.c}]]
133
134 set srcObjFiles {}
135
136 foreach fileName $source {
137 if {$fileName == "tcl/tclc.c" || $fileName == "tcl/tcl.c"} continue
138
139 regsub {\.c} $fileName {} srcName
140 set srcObjName $prefix$srcName
141
142 lappend srcObjFiles $srcObjName$objSuf
143
144 dependencies $fileName "$srcObjName$objSuf:$suffix$fileName"
145 }
146
147 puts -nonewline "TCL_OBJ += $suffix"
148 puts [join $srcObjFiles $suffix]
149 puts {}
150}
151
152proc executableDeps {args} {
153
154 global prefix suffix objSuf exeSuf
155
156 set executable [lsort [eval glob -nocomplain $args]]
157
158 set exeFiles {}
159
160 foreach fileName $executable {
161 regsub {\.cpp} $fileName {} exeObjName
162 set exeObjName $prefix$exeObjName
163 set exeName [file tail $exeObjName]
164
165 lappend exeFiles $exeName$exeSuf
166 lappend exeObjFiles $exeObjName$objSuf
167
168 puts "$exeName$exeSuf:$suffix$exeObjName$objSuf"
169 puts {}
170
171 dependencies $fileName "$exeObjName$objSuf:$suffix$fileName"
172 }
173
174 if [info exists exeFiles] {
175 puts -nonewline "EXECUTABLE += $suffix"
176 puts [join $exeFiles $suffix]
177 puts {}
178 }
179 if [info exists exeObjFiles] {
180 puts -nonewline "EXECUTABLE_OBJ += $suffix"
181 puts [join $exeObjFiles $suffix]
182 puts {}
183 }
184}
185
186proc headerDeps {} {
187 global suffix headerFiles
188
189 foreach fileName [array names headerFiles] {
190 dependencies $fileName "$fileName:" 0 "\t@touch \$@"
191 }
192}
193
194puts {
195#
196# Makefile for ExRootAnalysis
197#
198# Author: P. Demin - UCL, Louvain-la-Neuve
199#
200# multi-platform configuration is taken from ROOT (root/test/Makefile.arch)
201#
202
203include doc/Makefile.arch
204
205ROOT_MAJOR := $(shell $(RC) --version | cut -d'.' -f1)
206
207SrcSuf = cc
208PcmSuf = _rdict.pcm
209
210CXXFLAGS += $(ROOTCFLAGS) -Wno-write-strings -D_FILE_OFFSET_BITS=64 -DDROP_CGAL -I. -Iexternal -Iexternal/tcl
211DELPHES_LIBS = $(shell $(RC) --libs) -lEG $(SYSLIBS)
212DISPLAY_LIBS = $(shell $(RC) --evelibs) -lGuiHtml $(SYSLIBS)
213
214ifneq ($(CMSSW_FWLITE_INCLUDE_PATH),)
215HAS_CMSSW = true
216CXXFLAGS += -std=c++0x -I$(subst :, -I,$(CMSSW_FWLITE_INCLUDE_PATH))
217OPT_LIBS += -L$(subst include,lib,$(subst :, -L,$(CMSSW_FWLITE_INCLUDE_PATH)))
218ifneq ($(CMSSW_RELEASE_BASE),)
219CXXFLAGS += -I$(CMSSW_RELEASE_BASE)/src
220endif
221ifneq ($(LD_LIBRARY_PATH),)
222OPT_LIBS += -L$(subst include,lib,$(subst :, -L,$(LD_LIBRARY_PATH)))
223endif
224OPT_LIBS += -lGenVector -lFWCoreFWLite -lDataFormatsFWLite -lDataFormatsCommon -lDataFormatsPatCandidates -lDataFormatsLuminosity -lSimDataFormatsGeneratorProducts -lCommonToolsUtils -lDataFormatsCommon
225endif
226
227
228# check consistency
229ifneq ($(PROMC),)
230 ifneq ($(PROIO),)
231 $(error Attention: PROMC and PROIO env. variables are set simultaneously. You cannot compile ProMC and ProIO readers in one compilation process due to an inconsistency in protocol buffers libraries. The suggestion is to compile these two readers in two steps. First unset PROIO variable and then \"configure; make\". After this, unset PROMC, set PROIO, and run \"configure; make\". During runs, make sure shared libraries are set correctly. )
232 endif
233endif
234
235
236ifneq ($(PROMC),)
237HAS_PROMC = true
238$(info ProMC event reader is requested)
239CXXFLAGS += -I$(PROMC)/include -I$(PROMC)/src
240OPT_LIBS += -L$(PROMC)/lib -lpromc -lprotoc -lprotobuf -lprotobuf-lite -lcbook -lz
241endif
242
243ifneq ($(PROIO),)
244HAS_PROIO = true
245$(info ProIO reader is requested)
246 ifeq ($(PROTOBUF),)
247 $(error but PROTOBUF variable is not set.)
248 endif
249
250 PROTOBUF_FILE=$(PROTOBUF)/lib/libprotobuf.a
251 ifeq ("$(wildcard $(PROTOBUF_FILE))","")
252 $(error PROTOBUF variable is set, but it does not point to valid $(PROTOBUF_FILE))
253 endif
254
255 ifeq ($(LZ4),)
256 $(error but LZ4 variable is not set.)
257 endif
258 LZ4_FILE=$(LZ4)/lib/liblz4.so
259 ifeq ("$(wildcard $(LZ4_FILE))","")
260 $(error LZ4 variable is set, but it does not point to valid $(LZ4_FILE))
261 endif
262
263
264CXXFLAGS += -I$(PROIO)/include -I$(PROTOBUF)/include -I$(LZ4)/include -I$(PROIO)/src
265OPT_LIBS += -L$(PROTOBUF)/lib -lprotobuf -L$(PROIO)/lib -lproio -lproio.pb -lz -L$(LZ4)/lib -llz4
266endif
267
268ifeq ($(HAS_PYTHIA8),true)
269ifneq ($(PYTHIA8),)
270CXXFLAGS += -I$(PYTHIA8)/include
271CXXFLAGS += -I$(PYTHIA8)/include/Pythia8
272OPT_LIBS += -L$(PYTHIA8)/lib -lpythia8 -ldl -lz
273endif
274endif
275
276DELPHES_LIBS += $(OPT_LIBS)
277DISPLAY_LIBS += $(OPT_LIBS)
278
279###
280
281NOFASTJET = libDelphesNoFastJet.$(DllSuf)
282NOFASTJETLIB = libDelphesNoFastJet.lib
283
284DELPHES = libDelphes.$(DllSuf)
285DELPHESLIB = libDelphes.lib
286
287DISPLAY = libDelphesDisplay.$(DllSuf)
288DISPLAYLIB = libDelphesDisplay.lib
289
290VERSION = $(shell cat VERSION)
291DISTDIR = Delphes-$(VERSION)
292DISTTAR = $(DISTDIR).tar.gz
293
294all:
295
296}
297
298executableDeps {converters/*.cpp} {examples/*.cpp} {validation/*.cpp}
299
300executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} {readers/DelphesROOT.cpp}
301
302puts {ifeq ($(HAS_CMSSW),true)}
303executableDeps {readers/DelphesCMSFWLite.cpp}
304puts {endif}
305puts {}
306
307puts {ifeq ($(HAS_PROMC),true)}
308executableDeps {readers/DelphesProMC.cpp}
309puts {endif}
310puts {}
311
312puts {ifeq ($(HAS_PROIO),true)}
313executableDeps {readers/DelphesProIO.cpp}
314puts {endif}
315puts {}
316
317puts {ifeq ($(HAS_PYTHIA8),true)}
318executableDeps {readers/DelphesPythia8.cpp}
319dictDeps {DELPHES_DICT} {modules/Pythia8LinkDef.h}
320puts {endif}
321puts {}
322
323dictDeps {DELPHES_DICT} {classes/ClassesLinkDef.h} {modules/ModulesLinkDef.h} {external/ExRootAnalysis/ExRootAnalysisLinkDef.h}
324
325dictDeps {FASTJET_DICT} {modules/FastJetLinkDef.h}
326
327dictDeps {DISPLAY_DICT} {display/DisplayLinkDef.h}
328
329sourceDeps {DELPHES} {classes/*.cc} {modules/*.cc} {external/ExRootAnalysis/*.cc} {external/Hector/*.cc}
330
331sourceDeps {FASTJET} {modules/FastJet*.cc} {modules/RunPUPPI.cc} {external/PUPPI/*.cc} {external/fastjet/*.cc} {external/fastjet/tools/*.cc} {external/fastjet/plugins/*/*.cc} {external/fastjet/contribs/*/*.cc}
332
333sourceDeps {DISPLAY} {display/*.cc}
334
335tclDeps
336
337headerDeps
338
339puts {
340
341###
342
343ifeq ($(ROOT_MAJOR),6)
344all: $(NOFASTJET) $(DELPHES) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(EXECUTABLE)
345display: $(DISPLAY) $(DISPLAY_DICT_PCM)
346else
347all: $(NOFASTJET) $(DELPHES) $(EXECUTABLE)
348display: $(DISPLAY)
349endif
350
351$(NOFASTJET): $(DELPHES_DICT_OBJ) $(DELPHES_OBJ) $(TCL_OBJ)
352 @mkdir -p $(@D)
353 @echo ">> Building $@"
354ifeq ($(ARCH),aix5)
355 @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
356else
357ifeq ($(PLATFORM),macosx)
358# We need to make both the .dylib and the .so
359 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
360ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
361ifeq ($(MACOSX_MINOR),4)
362 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
363endif
364endif
365else
366ifeq ($(PLATFORM),win32)
367 @bindexplib $* $^ > $*.def
368 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(NOFASTJETLIB)
369 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
370 @$(MT_DLL)
371else
372 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
373 @$(MT_DLL)
374endif
375endif
376endif
377
378$(DELPHES): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
379 @mkdir -p $(@D)
380 @echo ">> Building $@"
381ifeq ($(ARCH),aix5)
382 @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
383else
384ifeq ($(PLATFORM),macosx)
385# We need to make both the .dylib and the .so
386 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
387ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
388ifeq ($(MACOSX_MINOR),4)
389 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
390endif
391endif
392else
393ifeq ($(PLATFORM),win32)
394 @bindexplib $* $^ > $*.def
395 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DELPHESLIB)
396 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
397 @$(MT_DLL)
398else
399 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
400 @$(MT_DLL)
401endif
402endif
403endif
404
405$(DISPLAY): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ)
406 @mkdir -p $(@D)
407 @echo ">> Building $@"
408ifeq ($(ARCH),aix5)
409 @$(MAKESHARED) $(OutPutOpt) $@ $(DISPLAY_LIBS) -p 0 $^
410else
411ifeq ($(PLATFORM),macosx)
412# We need to make both the .dylib and the .so
413 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
414ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
415ifeq ($(MACOSX_MINOR),4)
416 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
417endif
418endif
419else
420ifeq ($(PLATFORM),win32)
421 @bindexplib $* $^ > $*.def
422 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DISPLAYLIB)
423 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DISPLAY_LIBS) $(OutPutOpt)$@
424 @$(MT_DLL)
425else
426 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
427 @$(MT_DLL)
428endif
429endif
430endif
431
432clean:
433 @rm -f $(DELPHES_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ) core
434 @rm -rf tmp
435
436distclean: clean
437 @rm -f $(NOFASTJET) $(NOFASTJETLIB) $(DELPHES) $(DELPHESLIB) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(DISPLAY) $(DISPLAYLIB) $(DISPLAY_DICT_PCM) $(EXECUTABLE)
438
439dist:
440 @echo ">> Building $(DISTTAR)"
441 @mkdir -p $(DISTDIR)
442 @cp -a AUTHORS CHANGELOG CMakeLists.txt COPYING DelphesEnv.sh LICENSE NOTICE README README_4LHCb VERSION Makefile MinBias.pileup configure cards classes converters display doc examples external modules python readers validation $(DISTDIR)
443 @find $(DISTDIR) -depth -name .\* -exec rm -rf {} \;
444 @tar -czf $(DISTTAR) $(DISTDIR)
445 @rm -rf $(DISTDIR)
446
447###
448
449.SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf) $(PcmSuf)
450
451%Dict.$(SrcSuf):
452 @mkdir -p $(@D)
453 @echo ">> Generating $@"
454 @rootcint -f $@ -c -Iexternal $<
455 @mv $@ $@.base
456 @cat $< $@.base > $@
457 @rm $@.base
458
459$(DELPHES_DICT_PCM): %Dict$(PcmSuf):
460 @echo ">> Copying $@"
461 @cp $< $@
462
463$(FASTJET_DICT_PCM): %Dict$(PcmSuf):
464 @echo ">> Copying $@"
465 @cp $< $@
466
467$(DISPLAY_DICT_PCM): %Dict$(PcmSuf):
468 @echo ">> Copying $@"
469 @cp $< $@
470
471$(DELPHES_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
472 @mkdir -p $(@D)
473 @echo ">> Compiling $<"
474 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
475
476$(FASTJET_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
477 @mkdir -p $(@D)
478 @echo ">> Compiling $<"
479 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
480
481$(DISPLAY_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
482 @mkdir -p $(@D)
483 @echo ">> Compiling $<"
484 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
485
486$(DELPHES_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
487 @mkdir -p $(@D)
488 @echo ">> Compiling $<"
489 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
490
491$(FASTJET_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
492 @mkdir -p $(@D)
493 @echo ">> Compiling $<"
494 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
495
496$(DISPLAY_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
497 @mkdir -p $(@D)
498 @echo ">> Compiling $<"
499 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
500
501$(TCL_OBJ): tmp/%.$(ObjSuf): %.c
502 @mkdir -p $(@D)
503 @echo ">> Compiling $<"
504 @$(CC) $(patsubst -std=%,,$(CXXFLAGS)) -c $< $(OutPutOpt)$@
505
506$(EXECUTABLE_OBJ): tmp/%.$(ObjSuf): %.cpp
507 @mkdir -p $(@D)
508 @echo ">> Compiling $<"
509 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
510
511$(EXECUTABLE): %$(ExeSuf): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
512 @echo ">> Building $@"
513 @$(LD) $(LDFLAGS) $^ $(DELPHES_LIBS) $(OutPutOpt)$@
514
515###
516
517}
Note: See TracBrowser for help on using the repository browser.