simplify syntax, introduce dependency from module.tpl
[u/mrichter/AliRoot.git] / Makefile.flat
1 # Top level Makefile for AliRoot System
2 #
3 # Author: Jan-Erik Revsbech (revsbech@fys.ku.dk)
4 #         Developed on idea of Boris Polichtchouk (Boris.Polichtchouk@cern.ch), 15/4/2001
5
6
7 ##### include general path/location macros #####
8 override ALICE_ROOT=$(shell pwd)
9
10 ifdef ALIVERBOSE
11 MUTE:=
12 else
13 MUTE:=@
14 endif
15
16 include build/Makefile.config
17 ################################################################## 
18
19 #            Where to install libraries and binaries 
20 #                 and common header files
21
22 LIBPATH=lib/tgt_$(ALICE_TARGET)
23 BINPATH=bin/tgt_$(ALICE_TARGET)
24 EXPORTDIR = $(ALICE_ROOT)/include
25 ##################################################################
26
27 ##################################################################
28 # include machine dependent macros 
29
30 -include build/Makefile.$(ALICE_TARGET)
31 ##################################################################
32
33 ##################################################################
34
35 #               Check if called with debug
36
37 ifeq ($(ALIDEBUG),YES)
38 override ALICE_TARGET:=$(ALICE_TARGET)DEBUG
39 FFLAGS := -g $(filter-out -O%,$(FFLAGS))
40 CXXFLAGS := -g $(filter-out -O%,$(CXXLAGS))
41 CFLAGS := -g $(filter-out -O%,$(CLAGS))
42 SOFLAGS := -g $(filter-out -O%,$(SOFLAGS))
43 LDFLAGS := -g $(filter-out -O%,$(LDFLAGS))
44 endif
45 ##################################################################
46
47 ##################################################################
48 #
49 #                   Modules to build 
50
51 # COMMENTED OUT FOR TEST PURPOSES
52
53 ALIROOTMODULES:= STEER \
54          TGeant3 PHOS TRD TPC ZDC MUON PMD FMD TOF ITS \
55          CASTOR RICH START STRUCT EVGEN RALICE ALIFAST \
56          THijing CONTAINERS MEVSIM TMEVSIM THbtp HBTP EMCAL HBTAN
57
58 CERNMODULES:= PDF PYTHIA PYTHIA6 GEANT321 MINICERN HIJING
59
60 MODULES:=$(ALIROOTMODULES) $(CERNMODULES)
61
62 ##################################################################
63
64 MODULES += ALIROOT 
65
66 MODDIRS := MODULES
67
68 #############################################################
69
70 #               Default include dirs for 
71 #          C++, Fortran, Cint, and dependencies 
72 #      The module directory will be added by each module
73 #
74
75 CXXFLAGS += -I$(ALICE_ROOT)/include
76 CXXFLAGS += $(patsubst %,-I%,$(ROOTSYS)/include)
77
78 CINTFLAGS += -I$(ALICE_ROOT)/include
79 CINTFLAGS += $(patsubst %,-I%,$(ROOTSYS)/include)
80
81 DEPINC  += -I$(ALICE_ROOT)/include
82 DEPINC += $(patsubst %,-I%,$(ROOTSYS)/include)
83 #############################################################
84
85
86 #############################################################
87 #
88 #             Libraries to link binaries against
89 #            Libraries will be linked againstSHLIB
90 LIBS := $(ROOTLIBS) $(SYSLIBS) $(GLIBS)
91 #############################################################
92
93
94 # default target
95 default:     alilibs  aliroot
96
97
98 #############################################################
99 #
100 #            Each module will add to this
101
102 ALLLIBS      :=
103 ALLEXECS     :=
104 INCLUDEFILES :=
105 BINLIBS      := 
106 EXPORTFILES  := 
107 #############################################################
108
109 BINLIBDIRS   := -L$(ALICE_ROOT)/$(LIBPATH)
110
111
112 #Dependencies of module.mk files
113
114 include build/module.dep
115
116 #############################################################
117
118 #        Check if module.mk is present for the library
119 %.mk: build/module.tpl
120 ifndef ALIQUIET
121         @echo "***** Creating $@ file *****";
122 endif
123         @share/alibtool mkmodule  $(patsubst %/module.mk,%,$@) > $@;
124 #############################################################
125
126 # **************************************************************************
127 #
128 #               If cleaning, do not include 
129 #             dependencies or module.mk files.
130
131 ifeq ($(findstring $(MAKECMDGOALS), clean clean-all clean-dicts clean-modules clean-depend clean-objects clean-libs clean-bins),)
132
133 #            If making modules, not not include
134 #                       anything
135
136 ifneq ($(findstring modules,$(MAKECMDGOALS)),modules)
137
138 #############################################################
139
140 #                Include the modules
141 -include $(patsubst %,%/module.mk,$(MODULES))
142 #############################################################
143
144 #############################################################
145 #
146 #          include dependencies if not making them!
147 ifneq ($(MAKECMDGOALS),depend )
148 #           Don't include if cleaning of any sort
149 ifneq ($(findstring clean,$(MAKECMDGOALS)),clean)
150 include $(INCLUDEFILES)
151 endif
152 endif
153 #############################################################
154
155 endif
156 endif
157 # **************************************************************************
158
159 #############################################################
160 #
161 #              include dummy dependency file
162 #               *MUST* be last includefile
163 include build/dummy.d
164 #############################################################
165
166
167 # targets
168
169 .PHONY:         alilibs aliroot makedistr clean
170
171 modules: $(patsubst %,%/module.mk,$(MODULES))   
172
173 aliroot: $(BINPATH) $(ALLEXECS) alilibs bin
174
175 alilibs: $(LIBPATH) $(ALLLIBS) lib modules
176
177 # Single Makefile "distribution": Makefile + modules + mkdepend scripts
178 makedistr: $(MODULES)    
179          tar -cvf MakeDistr.tar $(patsubst %,%/*.pkg,$(MODULES)) \
180                 Makefile create build/* 
181
182 all: aliroot
183
184 depend: $(INCLUDEFILES) 
185
186 debug:
187 ifndef ALIQUIET
188         @echo "***** Entering DEBUG mode. *****"
189 endif
190         @(export ALIDEBUG=YES && $(MAKE) -f Makefile.flat )
191 lib: 
192         @mkdir lib
193         @mkdir lib/tgt_$(ALICE_TARGET)
194
195 bin: 
196         @mkdir bin
197         @mkdir bin/tgt_$(ALICE_TARGET)
198
199 $(MODULES):
200 ifndef ALIQUIET
201         @echo "***** Making $@ *****"
202 endif
203         @mkdir -p $@
204
205 $(BINPATH):
206 ifndef ALIQUIET
207         @echo "***** Making $@ *****"
208 endif
209         @mkdir -p $@
210
211 $(LIBPATH):
212 ifndef ALIQUIET
213         @echo "***** Making $@ *****"
214 endif
215         @mkdir -p $@
216
217 build/dummy.d: $(EXPORTFILES)
218         @(if [ ! -f $@ ] ; then \
219            touch $@; \
220         fi)
221
222 clean:
223         @echo "***** No targen clean, use one of these *****"
224         @echo " clean-aliroot     : Clean up all aliroot libraries"
225         @echo " clean-MODULENAME  : Clean everything from module MODULENAME"
226         @echo " clean-all         : Cleans up everything, including cern libraires"
227         @echo " clean-modules     : Clean all module.mk file in all modules"
228         @echo " clean-libs        : Clean all libraries (not object files)"
229         @echo "********************************************"
230
231 clean-all: clean-modules clean-libs clean-bins
232 ifndef ALIQUIET
233         @echo "***** Cleaning up everything ****"
234 endif
235         $(MUTE)rm -rf $(patsubst %,%/tgt_$(ALICE_TARGET),$(MODULES))
236         $(MUTE)rm -rf $(EXPORTDIR)
237
238 #This cleans only libraries that are not CERN-libraries
239
240 clean-aliroot:   $(patsubst %,%/module.mk,$(ALIROOTMODULES)) $(patsubst %,clean-%,$(ALIROOTMODULES))
241
242 clean-dicts:
243 ifndef ALIQUIET
244         @echo "***** Cleaning up G__ files *****"
245 endif
246         $(MUTE)rm -rf */tgt_$(ALICE_TARGET)/G__*
247
248 clean-modules:
249 ifndef ALIQUIET
250         @echo "***** Cleaning up module.mk files *****"
251 endif
252         $(MUTE)rm -rf $(patsubst %,%/module.mk,$(MODULES)) 
253
254 clean-depend:
255 ifndef ALIQUIET
256         @echo "***** Cleaning up dependencies *****"
257 endif
258         $(MUTE)echo rm `find . -name "*.d"`
259
260 clean-objects:
261 ifndef ALIQUIET
262         @echo "***** Cleaning up .o files *****"
263 endif
264         $(MUTE)echo rm `find . -name "*.o"`
265
266 clean-libs:
267 ifndef ALIQUIET
268         @echo "***** Cleaning up library files *****"
269 endif
270         $(MUTE)rm -rf lib/tgt_$(ALICE_TARGET)/*
271
272 clean-bins:
273 ifndef ALIQUIET
274         @echo "***** Cleaning up binary files *****"
275 endif
276         $(MUTE)rm -rf bin/tgt_$(ALICE_TARGET)