Fork me on GitHub

source: git/doc/genMakefile.tcl @ 9189af2

Last change on this file since 9189af2 was 9189af2, checked in by Pavel Demin <pavel.demin@…>, 8 weeks ago

remove validation directory from Makefile

  • Property mode set to 100644
File size: 13.4 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# check consistency
228ifneq ($(PROMC),)
229ifneq ($(PROIO),)
230$(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.)
231endif
232endif
233
234ifneq ($(PROMC),)
235HAS_PROMC = true
236$(info ProMC event reader is requested)
237CXXFLAGS += -I$(PROMC)/include -I$(PROMC)/src
238OPT_LIBS += -L$(PROMC)/lib -lpromc -lprotoc -lprotobuf -lprotobuf-lite -lcbook -lz
239endif
240
241ifneq ($(PROIO),)
242HAS_PROIO = true
243$(info ProIO reader is requested)
244ifeq ($(PROTOBUF),)
245$(error but PROTOBUF variable is not set.)
246endif
247PROTOBUF_FILE=$(PROTOBUF)/lib/libprotobuf.a
248ifeq ("$(wildcard $(PROTOBUF_FILE))","")
249$(error PROTOBUF variable is set, but it does not point to valid $(PROTOBUF_FILE))
250endif
251ifeq ($(LZ4),)
252$(error but LZ4 variable is not set.)
253endif
254LZ4_FILE=$(LZ4)/lib/liblz4.so
255ifeq ("$(wildcard $(LZ4_FILE))","")
256$(error LZ4 variable is set,  but it does not point to valid $(LZ4_FILE))
257endif
258CXXFLAGS += -I$(PROIO)/include -I$(PROTOBUF)/include -I$(LZ4)/include -I$(PROIO)/src
259OPT_LIBS += -L$(PROTOBUF)/lib -lprotobuf -L$(PROIO)/lib -lproio -lproio.pb -lz -L$(LZ4)/lib -llz4
260endif
261
262ifeq ($(HAS_PYTHIA8),true)
263ifneq ($(PYTHIA8),)
264CXXFLAGS += -I$(PYTHIA8)/include
265CXXFLAGS += -I$(PYTHIA8)/include/Pythia8
266OPT_LIBS += -L$(PYTHIA8)/lib -lpythia8 -ldl -lz
267endif
268endif
269
270DELPHES_LIBS += $(OPT_LIBS)
271DISPLAY_LIBS += $(OPT_LIBS)
272
273###
274
275NOFASTJET = libDelphesNoFastJet.$(DllSuf)
276NOFASTJETLIB = libDelphesNoFastJet.lib
277
278DELPHES = libDelphes.$(DllSuf)
279DELPHESLIB = libDelphes.lib
280
281DISPLAY = libDelphesDisplay.$(DllSuf)
282DISPLAYLIB = libDelphesDisplay.lib
283
284VERSION = x.y.z
285DISTDIR = Delphes-$(VERSION)
286DISTTAR = $(DISTDIR).tar.gz
287
288all:
289
290}
291
292executableDeps {converters/*.cpp} {examples/*.cpp}
293
294executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} {readers/DelphesROOT.cpp}
295
296puts {ifeq ($(HAS_CMSSW),true)}
297executableDeps {readers/DelphesCMSFWLite.cpp}
298puts {endif}
299puts {}
300
301puts {ifeq ($(HAS_PROMC),true)}
302executableDeps {readers/DelphesProMC.cpp}
303puts {endif}
304puts {}
305
306puts {ifeq ($(HAS_PROIO),true)}
307executableDeps {readers/DelphesProIO.cpp}
308puts {endif}
309puts {}
310
311puts {ifeq ($(HAS_PYTHIA8),true)}
312executableDeps {readers/DelphesPythia8.cpp}
313dictDeps {DELPHES_DICT} {modules/Pythia8LinkDef.h}
314puts {endif}
315puts {}
316
317dictDeps {DELPHES_DICT} {classes/ClassesLinkDef.h} {modules/ModulesLinkDef.h} {external/ExRootAnalysis/ExRootAnalysisLinkDef.h}
318
319dictDeps {FASTJET_DICT} {modules/FastJetLinkDef.h}
320
321dictDeps {DISPLAY_DICT} {display/DisplayLinkDef.h}
322
323sourceDeps {DELPHES} {classes/*.cc} {modules/*.cc} {external/ExRootAnalysis/*.cc} {external/Hector/*.cc} {external/TrackCovariance/*.cc}
324
325sourceDeps {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}
326
327sourceDeps {DISPLAY} {display/*.cc}
328
329tclDeps
330
331headerDeps
332
333puts {
334
335###
336
337ifeq ($(ROOT_MAJOR),6)
338all: $(NOFASTJET) $(DELPHES) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(EXECUTABLE)
339display: $(DISPLAY) $(DISPLAY_DICT_PCM)
340else
341all: $(NOFASTJET) $(DELPHES) $(EXECUTABLE)
342display: $(DISPLAY)
343endif
344
345$(NOFASTJET): $(DELPHES_DICT_OBJ) $(DELPHES_OBJ) $(TCL_OBJ)
346        @mkdir -p $(@D)
347        @echo ">> Building $@"
348ifeq ($(ARCH),aix5)
349        @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
350else
351ifeq ($(PLATFORM),macosx)
352# We need to make both the .dylib and the .so
353        @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
354ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
355ifeq ($(MACOSX_MINOR),4)
356        @ln -sf $@ $(subst .$(DllSuf),.so,$@)
357endif
358endif
359else
360ifeq ($(PLATFORM),win32)
361        @bindexplib $* $^ > $*.def
362        @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(NOFASTJETLIB)
363        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
364        @$(MT_DLL)
365else
366        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
367        @$(MT_DLL)
368endif
369endif
370endif
371
372$(DELPHES): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
373        @mkdir -p $(@D)
374        @echo ">> Building $@"
375ifeq ($(ARCH),aix5)
376        @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
377else
378ifeq ($(PLATFORM),macosx)
379# We need to make both the .dylib and the .so
380        @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
381ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
382ifeq ($(MACOSX_MINOR),4)
383        @ln -sf $@ $(subst .$(DllSuf),.so,$@)
384endif
385endif
386else
387ifeq ($(PLATFORM),win32)
388        @bindexplib $* $^ > $*.def
389        @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DELPHESLIB)
390        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
391        @$(MT_DLL)
392else
393        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
394        @$(MT_DLL)
395endif
396endif
397endif
398
399$(DISPLAY): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ)
400        @mkdir -p $(@D)
401        @echo ">> Building $@"
402ifeq ($(ARCH),aix5)
403        @$(MAKESHARED) $(OutPutOpt) $@ $(DISPLAY_LIBS) -p 0 $^
404else
405ifeq ($(PLATFORM),macosx)
406# We need to make both the .dylib and the .so
407        @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
408ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
409ifeq ($(MACOSX_MINOR),4)
410        @ln -sf $@ $(subst .$(DllSuf),.so,$@)
411endif
412endif
413else
414ifeq ($(PLATFORM),win32)
415        @bindexplib $* $^ > $*.def
416        @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DISPLAYLIB)
417        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DISPLAY_LIBS) $(OutPutOpt)$@
418        @$(MT_DLL)
419else
420        @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
421        @$(MT_DLL)
422endif
423endif
424endif
425
426clean:
427        @rm -f $(DELPHES_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ) core
428        @rm -rf tmp
429
430distclean: clean
431        @rm -f $(NOFASTJET) $(NOFASTJETLIB) $(DELPHES) $(DELPHESLIB) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(DISPLAY) $(DISPLAYLIB) $(DISPLAY_DICT_PCM) $(EXECUTABLE)
432
433dist:
434        @echo ">> Building $(DISTTAR)"
435        @mkdir -p $(DISTDIR)
436        @cp -a AUTHORS CHANGELOG CMakeLists.txt COPYING DelphesEnv.sh LICENSE NOTICE README README_4LHCb Makefile MinBias.pileup configure cards classes converters display doc examples external modules python readers validation $(DISTDIR)
437        @find $(DISTDIR) -depth -name .\* -exec rm -rf {} \;
438        @tar -czf $(DISTTAR) $(DISTDIR)
439        @rm -rf $(DISTDIR)
440
441###
442
443.SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf) $(PcmSuf)
444
445%Dict.$(SrcSuf):
446        @mkdir -p $(@D)
447        @echo ">> Generating $@"
448        @rootcint -f $@ -c -Iexternal $<
449        @mv $@ $@.base
450        @cat $< $@.base > $@
451        @rm $@.base
452
453$(DELPHES_DICT_PCM): %Dict$(PcmSuf):
454        @echo ">> Copying $@"
455        @cp $< $@
456
457$(FASTJET_DICT_PCM): %Dict$(PcmSuf):
458        @echo ">> Copying $@"
459        @cp $< $@
460
461$(DISPLAY_DICT_PCM): %Dict$(PcmSuf):
462        @echo ">> Copying $@"
463        @cp $< $@
464
465$(DELPHES_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
466        @mkdir -p $(@D)
467        @echo ">> Compiling $<"
468        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
469
470$(FASTJET_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
471        @mkdir -p $(@D)
472        @echo ">> Compiling $<"
473        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
474
475$(DISPLAY_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
476        @mkdir -p $(@D)
477        @echo ">> Compiling $<"
478        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
479
480$(DELPHES_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
481        @mkdir -p $(@D)
482        @echo ">> Compiling $<"
483        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
484
485$(FASTJET_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
486        @mkdir -p $(@D)
487        @echo ">> Compiling $<"
488        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
489
490$(DISPLAY_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
491        @mkdir -p $(@D)
492        @echo ">> Compiling $<"
493        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
494
495$(TCL_OBJ): tmp/%.$(ObjSuf): %.c
496        @mkdir -p $(@D)
497        @echo ">> Compiling $<"
498        @$(CC) $(patsubst -std=%,,$(CXXFLAGS)) -c $< $(OutPutOpt)$@
499
500$(EXECUTABLE_OBJ): tmp/%.$(ObjSuf): %.cpp
501        @mkdir -p $(@D)
502        @echo ">> Compiling $<"
503        @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
504
505$(EXECUTABLE): %$(ExeSuf): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
506        @echo ">> Building $@"
507        @$(LD) $(LDFLAGS) $^ $(DELPHES_LIBS) $(OutPutOpt)$@
508
509###
510
511}
Note: See TracBrowser for help on using the repository browser.