Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-05-18 07:43:47

0001 # project name
0002 PROJECT = EpicAnalysis
0003 
0004 # check environment
0005 ifndef EPIC_ANALYSIS_HOME
0006 $(error "ERROR: run 'source environ.sh' before building")
0007 endif
0008 
0009 
0010 # compiler and flags
0011 #################################################################
0012 
0013 CXX := g++
0014 FLAGS = -Wno-deprecated -fPIC
0015 FLAGS += -fmax-errors=3
0016 # FLAGS += -fvisibility=hidden # FIXME: required by pybind, but causes unresolved symbols in cling...
0017 ROOTCLING = rootcling
0018 
0019 
0020 # dependencies
0021 #################################################################
0022 
0023 # ROOT
0024 DEP_INCLUDES  = -I$(shell root-config --incdir)
0025 DEP_LIBRARIES = $(shell root-config --glibs)
0026 #DEP_LIBRARIES += -lMinuit -lRooFitCore -lRooFit -lRooStats -lProof -lMathMore
0027 
0028 # Data Model (PODIO + EDM4hep + EDM4eic)
0029 DEP_LIBRARIES += -L/usr/local/lib -ledm4hep -ledm4eic
0030 ifdef INCLUDE_PODIO
0031         DEP_LIBRARIES += -L/usr/local/lib -lpodio -lpodioRootIO
0032         FLAGS += -DINCLUDE_PODIO
0033 endif
0034 
0035 # Miscellaneous
0036 DEP_LIBRARIES += -lfmt
0037 
0038 # Delphes
0039 ifdef EXCLUDE_DELPHES
0040         # optionally build without Delphes (for CI speedup)
0041         FLAGS += -DEXCLUDE_DELPHES
0042 else
0043         DEP_INCLUDES  += -I${DELPHES_HOME} -I${DELPHES_HOME}/external
0044         DEP_LIBRARIES += -L${DELPHES_HOME} -lDelphes
0045 endif
0046 
0047 # Delphes plugin: Fastjet Centauro
0048 ifdef INCLUDE_CENTAURO
0049         DEP_INCLUDES  += -I${DELPHES_HOME}/external/fastjet/plugins/Centauro
0050         DEP_LIBRARIES += -L${DELPHES_HOME}/external/fastjet/plugins/Centauro -lCentauro
0051         FLAGS += -DINCLUDE_CENTAURO
0052 endif
0053 
0054 # MSTWPDF
0055 DEP_INCLUDES  += -I${MSTWPDF_HOME}
0056 DEP_LIBRARIES += -L${MSTWPDF_HOME} -lmstwpdf
0057 DEP_TARGETS   =  ${MSTWPDF_HOME}/libmstwpdf.so
0058 
0059 # ADAGE
0060 DEP_INCLUDES  += -I${ADAGE_HOME}/include
0061 DEP_LIBRARIES += -L${ADAGE_HOME}/lib -lAdage 
0062 DEP_TARGETS   += ${ADAGE_HOME}/lib/libAdage.so
0063 
0064 
0065 # epic-analysis objects
0066 #################################################################
0067 
0068 PREFIX                  := ${EPIC_ANALYSIS_HOME}/lib
0069 EPIC_ANALYSIS_LIB       := $(PREFIX)/lib$(PROJECT).so
0070 EPIC_ANALYSIS_PCM       := $(PROJECT)Dict_rdict.pcm
0071 EPIC_ANALYSIS_DICT      := src/$(PROJECT)Dict.cxx
0072 EPIC_ANALYSIS_LINKDEF   := src/LinkDef.h
0073 EPIC_ANALYSIS_INCLUDES  := -I${EPIC_ANALYSIS_HOME}/src
0074 EPIC_ANALYSIS_LIBRARIES := -L$(PREFIX) -l$(PROJECT)
0075 
0076 # epic-analysis source code (with $(EPIC_ANALYSIS_DICT) and $(EPIC_ANALYSIS_LINKDEF) moved to end of lists for rootcling)
0077 #################################################################
0078 
0079 # move $(EPIC_ANALYSIS_DICT) and $(EPIC_ANALYSIS_LINKDEF) to end of lists for rootcling
0080 SOURCES := $(filter-out $(EPIC_ANALYSIS_DICT),    $(wildcard src/*.cxx) $(wildcard src/sfset/*.cxx) $(wildcard src/interp/*.cxx)) $(EPIC_ANALYSIS_DICT)
0081 HEADERS := $(filter-out $(EPIC_ANALYSIS_LINKDEF), $(wildcard src/*.h)   $(wildcard src/sfset/*.h)   $(wildcard src/interp/*.h)    $(wildcard src/interp/*.ipp)) $(EPIC_ANALYSIS_LINKDEF)
0082 
0083 # filter out Delphes-dependent code (if needed)
0084 ifdef EXCLUDE_DELPHES
0085         SOURCES := $(filter-out src/AnalysisDelphes.cxx, $(SOURCES))
0086         HEADERS := $(filter-out src/AnalysisDelphes.h,   $(HEADERS))
0087         ROOTCLING += -D=EXCLUDE_DELPHES
0088 endif
0089 
0090 
0091 # epic-analysis builds
0092 #################################################################
0093 
0094 all: epic-analysis
0095 all-clean: deps-clean clean
0096 
0097 debug: FLAGS += -g
0098 debug: DEP_RECIPE = debug
0099 debug: clean all
0100 release: FLAGS += -O3
0101 release: DEP_RECIPE = release
0102 release: clean all
0103 
0104 epic-analysis: deps epic-analysis-header $(EPIC_ANALYSIS_LIB) hpc
0105         @echo "Done.\n"
0106 epic-analysis-header:
0107         @echo "\n===== $(PROJECT) ====="
0108 
0109 $(EPIC_ANALYSIS_LIB): $(EPIC_ANALYSIS_DICT) $(HEADERS) $(SOURCES)
0110         @echo "\n----- $(PROJECT) library -----"
0111         @if [ -z "${EXCLUDE_DELPHES}" ]; then \
0112                 ln -svf ${DELPHES_HOME}/external ./; \
0113         fi
0114         @echo "target: $@"
0115         $(CXX) $(SOURCES) -shared -o $@ $(FLAGS) $(DEP_LIBRARIES) $(DEP_INCLUDES) -I${EPIC_ANALYSIS_HOME}
0116 
0117 $(EPIC_ANALYSIS_DICT): $(HEADERS) $(DEP_TARGETS)
0118         @echo "\n----- $(PROJECT) dictionary -----"
0119         @echo "target: $@"
0120         $(ROOTCLING) -f $@ $(DEP_INCLUDES) $(HEADERS)
0121         @mkdir -p $(PREFIX)
0122         @mv src/$(EPIC_ANALYSIS_PCM) $(PREFIX)/
0123 
0124 # dependency builds
0125 #################################################################
0126 
0127 deps: delphes mstwpdf adage
0128 deps-clean: delphes-clean mstwpdf-clean adage-clean
0129 delphes:
0130         @if [ -z "${EXCLUDE_DELPHES}" ]; then \
0131                 echo "\n===== $@ ====="; \
0132                 $(MAKE) -C ${DELPHES_HOME}; \
0133         fi
0134 delphes-clean:
0135         @if [ -z "${EXCLUDE_DELPHES}" ]; then \
0136                 echo "\n===== $@ ====="; \
0137                 $(MAKE) -C ${DELPHES_HOME} clean; \
0138         fi
0139 mstwpdf:
0140         @echo "\n===== $@ ====="
0141         $(MAKE) -C ${MSTWPDF_HOME} $(DEP_RECIPE)
0142 mstwpdf-clean:
0143         @echo "\n===== $@ ====="
0144         $(MAKE) -C ${MSTWPDF_HOME} clean
0145 adage:
0146         @echo "\n===== $@ ====="
0147         $(MAKE) -C ${ADAGE_HOME} $(DEP_RECIPE)
0148 adage-clean:
0149         @echo "\n===== $@ ====="
0150         $(MAKE) -C ${ADAGE_HOME} clean
0151 
0152 
0153 # HPC executables
0154 #################################################################
0155 
0156 HPC_SOURCES     := $(basename $(wildcard hpc/src/*.cpp))
0157 HPC_EXECUTABLES := $(addsuffix .exe, $(HPC_SOURCES))
0158 
0159 hpc: hpc-header $(HPC_EXECUTABLES)
0160 hpc-header:
0161         @echo "\n===== HPC executables ====="
0162 hpc/src/%.exe: hpc/src/%.cpp $(EPIC_ANALYSIS_LIB) 
0163         @echo "----- build $@.o -----"
0164         $(CXX) -c $< -o $@.o $(FLAGS) $(DEP_INCLUDES) $(EPIC_ANALYSIS_INCLUDES)
0165         @echo "--- make executable $@"
0166         $(CXX) -o $@ $@.o $(DEP_LIBRARIES) $(EPIC_ANALYSIS_LIBRARIES)
0167         $(RM) $@.o
0168 
0169 
0170 # clean
0171 #################################################################
0172 clean:
0173         @echo "\n===== CLEAN $(PROJECT) ====="
0174         $(RM) $(EPIC_ANALYSIS_LIB) $(PREFIX)/$(EPIC_ANALYSIS_PCM) $(EPIC_ANALYSIS_DICT) $(HPC_EXECUTABLES)