# Makefile is a part of the PYTHIA event generator. # Copyright (C) 2023 Torbjorn Sjostrand. # PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details. # Please respect the MCnet Guidelines, see GUIDELINES for details. # Author: Philip Ilten, September 2014. # # This is is the Makefile used to build PYTHIA examples on POSIX systems. # Example usage is: # make main01 # For help using the make command please consult the local system documentation, # i.e. "man make" or "make --help". ################################################################################ # VARIABLES: Definition of the relevant variables from the configuration script. ################################################################################ # Set the shell. SHELL=/usr/bin/env bash # Include the configuration. -include Makefile.inc # Check distribution (use local version first, then installed version). ifneq ("$(wildcard ../lib/libpythia8.*)","") PREFIX_LIB=../lib PREFIX_INCLUDE=../include endif CXX_COMMON:=-I$(PREFIX_INCLUDE) $(CXX_COMMON) $(GZIP_LIB) CXX_COMMON+= -L$(PREFIX_LIB) -Wl,-rpath,$(PREFIX_LIB) -lpythia8 -ldl PYTHIA=$(PREFIX_LIB)/libpythia8$(LIB_SUFFIX) # Fix missing runtime paths from RIVET. ifeq ($(RIVET_USE),true) COMMA=, RIVET_LPATH=$(filter -L%,$(shell $(RIVET_BIN)$(RIVET_CONFIG) --ldflags)) RIVET_RPATH=$(subst -L,-Wl$(COMMA)-rpath$(COMMA),$(RIVET_LPATH)) endif ################################################################################ # RULES: Definition of the rules used to build the PYTHIA examples. ################################################################################ # Rules without physical targets (secondary expansion for specific rules). .SECONDEXPANSION: .PHONY: all clean # All targets (no default behavior). all: $(info Usage: make mainXX) # PYTHIA library. $(PYTHIA): $(error Error: PYTHIA must be built, please run "make"\ in the top PYTHIA directory) # Examples without external dependencies. main%: $(PYTHIA) main%.cc $(CXX) $@.cc -o $@ $(CXX_COMMON) # Internally used tests, without external dependencies. test%: $(PYTHIA) test%.cc $(CXX) $@.cc -o $@ $(CXX_COMMON) # MixMax (remove warnings). main23: $(PYTHIA) $$@.cc $(CXX) $@.cc -o $@ -w $(CXX_COMMON) # HEPMC2 or HEPMC3 (use HEPMC3 if both). main41 main42 main43 main44 main45 main85 main86 main87 main88 main89 main280:\ $(PYTHIA) $$@.cc ifeq ($(HEPMC3_USE),true) $(CXX) $@.cc -o $@ $(CXX_COMMON) $(HEPMC3_INCLUDE) $(HEPMC3_LIB)\ -DHEPMC3 else ifeq ($(HEPMC2_USE),true) $(CXX) $@.cc -o $@ $(CXX_COMMON) $(HEPMC2_INCLUDE) $(HEPMC2_LIB)\ -DHEPMC2 else $(error Error: $@ requires HEPMC2 or HEPMC3) endif # MPICH, HDF5, HIGHFIVE, and HepMC2 or HepMC3. main46: $(PYTHIA) $$@.cc ifeq ($(MPICH_USE)$(HDF5_USE)$(HIGHFIVE_USE)$(HEPMC3_USE),truetruetruetrue) $(MPICH_BIN)mpic++ $@.cc -o $@ -w $(CXX_COMMON) $(MPICH_INCLUDE)\ $(HDF5_INCLUDE) $(HIGHFIVE_INCLUDE) $(HEPMC3_INCLUDE)\ $(MPICH_LIB) $(HDF5_LIB) $(HEPMC3_LIB) -DHEPMC3 else ifeq ($(MPICH_USE)$(HDF5_USE)$(HIGHFIVE_USE)$(HEPMC2_USE),truetruetruetrue) $(MPICH_BIN)mpic++ $@.cc -o $@ -w $(CXX_COMMON) $(MPICH_INCLUDE)\ $(HDF5_INCLUDE) $(HIGHFIVE_INCLUDE) $(HEPMC2_INCLUDE)\ $(MPICH_LIB) $(HDF5_LIB) $(HEPMC2_LIB) -DHEPMC2 else $(error Error: $@ requires MPICH, HDF5, HIGHFIVE, and HEPMC2 or HEPMC3) endif # EVTGEN. main48: $(PYTHIA) $$@.cc ifeq ($(EVTGEN_USE)$(HEPMC2_USE),truetrue) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(EVTGEN_INCLUDE)\ -DEVTGEN_PYTHIA -DEVTGEN_EXTERNAL $(EVTGEN_LIB) else $(error Error: $@ requires EVTGEN) endif # FASTJET3. main71 main72 main75 main81 main82 main83: $(PYTHIA) $$@.cc ifeq ($(FASTJET3_USE),true) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(FASTJET3_INCLUDE) $(FASTJET3_LIB) else $(error Error: $@ requires FASTJET3) endif # FASTJET3 with recursive tools. main74: $(PYTHIA) $$@.cc ifeq ($(FASTJET3_USE),true) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(FASTJET3_INCLUDE)\ $(FASTJET3_LIB) -lfastjettools -lRecursiveTools else $(error Error: $@ requires FASTJET3) endif # FASTJET3 and HEPMC3. main84: $(PYTHIA) $$@.cc ifeq ($(FASTJET3_USE)$(HEPMC3_USE),truetrue) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(FASTJET3_INCLUDE)\ $(HEPMC3_INCLUDE) $(FASTJET3_LIB) $(HEPMC3_LIB) else $(error Error: $@ requires FASTJET3 and HEPMC3) endif # Plugin libraries. lib%.so: %.cc $(PYTHIA) $(CXX) $< -o $@ -w $(CXX_COMMON) $(CXX_SHARED) -Wl,--no-as-needed # ROOT libraries generated via CINT. main%.so: main%Dct.cc main%.h $(CXX) $^ -o $@ -DPY8ROOT -w $(CXX_SHARED) $(CXX_COMMON)\ $(ROOT_LIB) $(shell $(ROOT_CONFIG) --cflags) main%Dct.cc: main%.h main%LinkDef.h ifeq ($(ROOT_USE),true) $(ROOT_BIN)rootcint -f $@ -DPY8ROOT -I$(PREFIX_INCLUDE) $^ else $(error Error: $@ requires ROOT) endif # General ROOT examples without other external dependencies. main91 main94: $(PYTHIA) $$@.cc ifeq ($(ROOT_USE),true) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(ROOT_LIB)\ $(shell $(ROOT_CONFIG) --cflags --glibs) else $(error Error: $@ requires ROOT) endif # RIVET with optional ROOT (if RIVET, use C++14). main93: $(PYTHIA) $$@.cc $(if $(filter true,$(ROOT_USE)),main93.so) ifeq ($(RIVET_USE),true) $(CXX) $@.cc -o $@ -w $(CXX_COMMON:c++11=c++14) -Wl,-rpath,./\ $(if $(filter true,$(ROOT_USE)),main93.so -DPY8ROOT\ $(ROOT_LIB) $(shell $(ROOT_CONFIG) --cflags --glibs))\ $(RIVET_RPATH) $(shell $(RIVET_BIN)$(RIVET_CONFIG) --cppflags --libs) else $(error Error: $@ requires RIVET) endif # ROOT with FastJet. main95: $(PYTHIA) $$@.cc ifeq ($(ROOT_USE)$(FASTJET3_USE),truetrue) $(CXX) $@.cc -o $@ -w $(CXX_COMMON) $(FASTJET3_INCLUDE)\ $(FASTJET3_LIB) $(ROOT_LIB) $(shell $(ROOT_CONFIG) --cflags --glibs) else $(error Error: $@ requires ROOT and FASTJET3) endif # RIVET (if RIVET use C++14). mymain31 main111: $(PYTHIA) $$@.cc ifeq ($(RIVET_USE),true) $(CXX) $@.cc -o $@ -w $(CXX_COMMON:c++11=c++14) -DRIVET\ $(shell $(RIVET_BIN)$(RIVET_CONFIG) --cppflags --libs) $(RIVET_RPATH) else $(CXX) $@.cc -o $@ -w $(CXX_COMMON) endif # HEPMC3. main300: $(PYTHIA) $$@.cc ifeq ($(HEPMC3_USE),true) $(CXX) $@.cc -o $@ $(CXX_COMMON) $(HEPMC3_INCLUDE) $(HEPMC3_LIB)\ -DHEPMC3 else $(CXX) $@.cc -o $@ $(CXX_COMMON) endif # # User-written examples for tutorials, without external dependencies. # mymain%: $(PYTHIA) mymain%.cc # $(CXX) $@.cc -o $@ $(CXX_COMMON) # Clean. clean: @rm -f main[0-9][0-9]; rm -f out[0-9][0-9];\ rm -f main[0-9][0-9][0-9]; rm -f out[0-9][0-9][0-9];\ rm -f mymain[0-9][0-9]; rm -f myout[0-9][0-9];\ rm -f test[0-9][0-9][0-9]; rm -f *.dat;\ rm -f weakbosons.lhe; rm -f hist.root;\ rm -f *~; rm -f \#*; rm -f core*; rm -f *Dct.*; rm -f *.so;\ rm -f *.log; rm -f *plot.py; rm -f *.pcm; rm -f *.mpi;\ rm -f *.hepmc; rm -f *.yoda; rm -f *.root;