2
# Libraries Makefile. Some ideas from Geant4 Makefiles
4
# M. Kirsanov 07.04.2006
6
# 26.03.2008 CLHEP dependency removed
7
# N. Lavesson 28.04.2009 clean/distclean separated
8
# M. Kirsanov 21.07.2009 Mac-OSX flags added
18
CXXFLAGSSHARED = -fPIC
22
ifneq (x$(HEPMCLOCATION),x)
23
ifeq ($(wildcard $(HEPMCLOCATION)/include/HepMC/*.h),)
24
HEPMCERROR= HepMC interface: ERROR, no HepMC headers found in ${HEPMCLOCATION}/include/HepMC
28
# Location of directories.
34
LIBDIRARCH=lib/archive
37
# Location of libraries to be built.
38
ifeq ($(SHAREDLIBS),yes)
39
targets=$(LIBDIRARCH)/libpythia8.a
40
targets+=$(LIBDIR)/libpythia8.$(SHAREDSUFFIX)
41
targets+=$(LIBDIRARCH)/liblhapdfdummy.a
42
targets+=$(LIBDIR)/liblhapdfdummy.$(SHAREDSUFFIX)
44
targets=$(LIBDIRARCH)/libpythia8.a
45
targets+=$(LIBDIRARCH)/liblhapdfdummy.a
48
ifneq (x$(HEPMCLOCATION),x)
49
targets+=$(LIBDIRARCH)/libhepmcinterface.a
50
ifeq ($(SHAREDLIBS),yes)
51
targets+=$(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX)
56
all: $(targets) config.mk
58
config.mk: ./configure
61
# Main part: build Pythia8 library.
63
$(MYTMPDIR)/%.o : $(SRCDIR)/%.cc
65
$(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
67
$(MYTMPDIR)/archive/%.o : $(SRCDIR)/%.cc
68
@mkdir -p $(MYTMPDIR)/archive
69
$(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
71
$(MYTMPDIR)/%.o : lhapdfdummy/%.cc
73
$(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) -c -I$(INCDIR) $< -o $@
75
$(MYTMPDIR)/archive/%.o : lhapdfdummy/%.cc
76
@mkdir -p $(MYTMPDIR)/archive
77
$(CXX) $(CXXFLAGS) -c -I$(INCDIR) $< -o $@
79
# Creating the dependency files *.d
80
# The compiler with option -M is used to build the dependency strings. They
81
# are further edited with sed (stream editor). The first sed command adds the
82
# dependency for the *.d files themselves, the second one is needed because
83
# object files are put in the directory different from src. The last line
84
# removes empty *.d files produced in case of error.
86
ifeq ($(SHAREDLIBS),yes)
87
$(MYTMPDIR)/%.d : $(SRCDIR)/%.cc
88
@echo Making dependency for file $<; \
89
mkdir -p $(MYTMPDIR); \
90
$(CC) -M -I$(INCDIR) $< | \
91
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
92
sed 's/$*\.o/$(MYTMPDIR)\/$*.o/' > $@; \
96
$(MYTMPDIR)/archive/%.d : $(SRCDIR)/%.cc
97
@echo Making dependency for file $<; \
98
mkdir -p $(MYTMPDIR)/archive; \
99
$(CC) -M -I$(INCDIR) $< | \
100
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
101
sed 's/$*\.o/$(MYTMPDIR)\/archive\/$*.o/' > $@; \
102
[ -s $@ ] || rm -f $@
104
objects := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.o,$(wildcard $(SRCDIR)/*.cc))
105
objectsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard $(SRCDIR)/*.cc))
107
$(LIBDIR)/libpythia8.$(SHAREDSUFFIX): $(objects)
109
$(CXX) $(LDFLAGSSHARED) -o $@ $(objects) $(LDFLAGLIBNAME),$(notdir $@)
111
$(LIBDIRARCH)/libpythia8.a: $(objectsarch)
112
@mkdir -p $(LIBDIRARCH)
113
ar cru $@ $(objectsarch)
115
objdum := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/%.o,$(wildcard lhapdfdummy/*.cc))
116
objdumarch := $(patsubst lhapdfdummy/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard lhapdfdummy/*.cc))
118
$(LIBDIR)/liblhapdfdummy.$(SHAREDSUFFIX): $(objdum)
120
$(CXX) $(LDFLAGSSHARED) -o $@ $(objdum) $(LDFLAGLIBNAME),$(notdir $@)
122
$(LIBDIRARCH)/liblhapdfdummy.a: $(objdumarch)
123
@mkdir -p $(LIBDIRARCH)
124
ar cru $@ $(objdumarch)
126
deps := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/%.d,$(wildcard $(SRCDIR)/*.cc))
127
depsarch := $(patsubst $(SRCDIR)/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard $(SRCDIR)/*.cc))
130
# The "if" below is needed in order to avoid producing the dependency files
131
# when you want to just clean
133
ifeq (,$(findstring clean, $(MAKECMDGOALS)))
138
# Build HepMC interface part if HepMC location is set.
140
ifneq (x$(HEPMCLOCATION),x)
141
HEPMCINCLUDE=-I$(HEPMCLOCATION)/include
143
ifeq (x$(HEPMCERROR),x)
145
$(MYTMPDIR)/%.o : hepmcinterface/%.cc config.mk
146
@mkdir -p $(MYTMPDIR)
147
$(CXX) $(CXXFLAGS) $(CXXFLAGSSHARED) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
149
$(MYTMPDIR)/archive/%.o : hepmcinterface/%.cc config.mk
150
@mkdir -p $(MYTMPDIR)/archive
151
$(CXX) $(CXXFLAGS) $(HEPMCVFLAG) -c -I$(INCDIR) $(HEPMCINCLUDE) $< -o $@
153
$(MYTMPDIR)/%.d : hepmcinterface/%.cc
154
@echo Making dependency for file $<; \
155
mkdir -p $(MYTMPDIR); \
156
$(CC) -M -I$(INCDIR) $(HEPMCINCLUDE) $< | \
157
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
158
sed 's/$*.o/$(MYTMPDIR)\/$*.o/' > $@; \
159
[ -s $@ ] || rm -f $@
161
$(MYTMPDIR)/archive/%.d : hepmcinterface/%.cc
162
@echo Making dependency for file $<; \
163
mkdir -p $(MYTMPDIR)/archive; \
164
$(CC) -M -I$(INCDIR) $(HEPMCINCLUDE) $< | \
165
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' | \
166
sed 's/$*.o/$(MYTMPDIR)\/archive\/$*.o/' > $@; \
167
[ -s $@ ] || rm -f $@
169
objectsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.o,$(wildcard hepmcinterface/*.cc))
170
objectsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.o,$(wildcard hepmcinterface/*.cc))
172
$(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) : $(objectsI)
174
$(CXX) $(LDFLAGSSHARED) $(objectsI) -o $@ $(LDFLAGLIBNAME),$(notdir $@)
176
$(LIBDIRARCH)/libhepmcinterface.a : $(objectsIarch)
177
@mkdir -p $(LIBDIRARCH)
178
ar cru $(LIBDIRARCH)/libhepmcinterface.a $(objectsIarch)
180
depsI := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/%.d,$(wildcard hepmcinterface/*.cc))
181
depsIarch := $(patsubst hepmcinterface/%.cc,$(MYTMPDIR)/archive/%.d,$(wildcard hepmcinterface/*.cc))
183
ifeq (,$(findstring clean, $(MAKECMDGOALS)))
185
-include $(depsIarch)
190
$(LIBDIRARCH)/libhepmcinterface.a $(LIBDIR)/libhepmcinterface.$(SHAREDSUFFIX) :
199
# Clean up: remove (almost?) everything that cannot be recreated.
201
.PHONY: clean distclean
207
cd examples; rm -rf bin; rm -f *.exe; cd -
208
cd rootexamples; rm -f *.exe; cd -
213
cd $(SRCDIR); rm -f *~; rm -f \#*; cd -
214
cd $(INCDIR); rm -f *~; rm -f \#*; cd -
215
cd xmldoc; rm -f *~; rm -f \#*; cd -
216
cd htmldoc; rm -f *~; rm -f \#*; cd -
217
cd phpdoc; rm -f *~; rm -f \#*; cd -
218
cd hepmcinterface; rm -f *~; rm -f \#*; cd -
219
cd lhapdfdummy; rm -f *~; rm -f \#*; cd -
220
cd examples; rm -f *~; rm -f \#*; rm -f core*; rm -f config.*; cd -
221
cd rootexamples; rm -f *~; rm -f \#*; rm -f core*; rm -f config.*; cd -