fixes the "nightly" target in the core Makefile - - - - - - - - - - - -
[dyninst.git] / Makefile
1 #
2 # TopLevel Makefile for the Paradyn (and DyninstAPI) system.
3 #
4 # $Id: Makefile,v 1.93 2008/08/12 15:50:40 carl Exp $
5 #
6
7 TO_CORE = .
8 # Include additional local definitions (if available)
9 -include ./make.config.local
10 # Include the make configuration specification (site configuration options)
11 include ./make.config
12
13 BUILD_ID = "$(SUITE_NAME) v$(RELEASE_NUM)$(BUILD_MARK)$(BUILD_NUM)"
14
15 # "basicComps" is the list of components which need to be built first
16 # with "make world", since they are used building the rest of the system.
17 #
18 # "subSystems" is the list of all other pieces which should be built
19 # as part of Paradyn.
20 #
21 # "DyninstAPI" is the list of additional API components (optional).
22
23 basicComps      = igen mrnet pdutil 
24 ParadynD        = pdutil igen mrnet sharedMem rtinst symtabAPI dyninstAPI dyninstAPI_RT paradynd
25 ParadynFE       = pdthread paradyn
26 ParadynVC       = visi \
27                 visiClients/tclVisi visiClients/barchart \
28                 visiClients/tableVisi visiClients/phaseTable \
29                 visiClients/histVisi visiClients/terrain \
30                 visiClients/termWin
31
32 subSystems      = $(ParadynD) $(ParadynFE) $(ParadynVC)
33 SymtabAPI       = ready common symtabAPI dynutil
34 StackwalkerAPI = ready common symtabAPI stackwalk
35 DyninstAPI      = ready common symtabAPI dyninstAPI_RT dyninstAPI dynutil instructionAPI
36 InstructionAPI  = ready common instructionAPI dynutil
37
38 testsuites = dyninstAPI/tests testsuite 
39
40 allSubdirs      = $(subSystems) common dyninstAPI/tests testsuite dynutil instructionAPI stackwalk newtestsuite
41 allSubdirs_noinstall =
42
43 # We're not building the new test suite on all platforms yet
44 ifeq ($(DONT_BUILD_NEWTESTSUITE),false)
45 testsuites += newtestsuite
46 allSubdirs_noinstall += newtestsuite
47 endif
48
49 # "fullSystem" is the list of all Paradyn & DyninstAPI components to build:
50 # set DONT_BUILD_PARADYN or DONT_BUILD_DYNINST in make.config.local if desired
51 ifndef DONT_BUILD_PARADYN
52 fullSystem      += $(basicComps)
53 Build_list      += basicComps
54 ifndef DONT_BUILD_FE
55 fullSystem      += $(ParadynFE)
56 Build_list      += ParadynFE
57 endif
58 ifndef DONT_BUILD_DAEMON
59 fullSystem      += $(ParadynD)
60 Build_list      += ParadynD
61 endif
62 ifndef DONT_BUILD_VISIS
63 fullSystem      += $(ParadynVC)
64 Build_list      += ParadynVC
65 endif
66 endif
67
68 ifndef DONT_BUILD_DYNINST
69 fullSystem      += $(DyninstAPI)
70 Build_list      += DyninstAPI
71 endif
72
73 # Note that the first rule listed ("all") is what gets made by default,
74 # i.e., if make is given no arguments.  Don't add other targets before all!
75
76 all: ready world
77
78 # This rule makes most of the normal recursive stuff.  Just about any
79 # target can be passed down to the lower-level Makefiles by listing it
80 # as a target here:
81
82 clean depend distclean:
83         +@for subsystem in $(fullSystem); do                    \
84             if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then    \
85                         $(MAKE) -C $$subsystem/$(PLATFORM) $@;          \
86             else                                                \
87                         true;                                           \
88             fi                                                  \
89         done
90
91 install:        ready world
92         +@for subsystem in $(fullSystem); do                    \
93                 if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then        \
94                         $(MAKE) -C $$subsystem/$(PLATFORM) install;             \
95                 elif [ -f $$subsytem/Makefile ]; then                   \
96                         $(MAKE) -C $$subsystem install; \
97            else \
98                         true;                                           \
99            fi                                                   \
100         done    
101
102 # Check that the main installation directories, etc., are ready for a build,
103 # creating them if they don't already exist!  Also touch make.config.local
104 # if needed.
105
106 ready:
107         +@for installdir in $(LIBRARY_DEST) $(PROGRAM_DEST) $(INCLUDE_DEST); do \
108             if [ -d $$installdir ]; then                        \
109                 echo "Installation directory $$installdir exists...";   \
110                 true;                                           \
111             else                                                \
112                 echo "Creating installation directory $$installdir ...";\
113                 mkdir -p $$installdir;                          \
114             fi                                                  \
115         done
116
117         +@if [ ! -f make.config.local ]; then   \
118             touch make.config.local;            \
119         fi
120
121         +@echo "Primary compiler for Paradyn build is:"
122         +@if [ `basename $(CXX)` = "xlC" ]; then                \
123                echo "xlC"; \
124         elif [ `basename $(CXX)` = "insure" ]; then \
125                 echo "insure"; \
126         else \
127           $(CXX) -v; \
128      true; \
129         fi
130
131 # The "make world" target is set up to build things in the "correct"
132 # order for a build from scratch.  It builds and installs things in the
133 # "basicComps" list first, then builds and installs the remaining
134 # Paradyn "subSystems" (excluding the currently optional DyninstAPI).
135 # NB: "make world" has also been set up locally to build the DyninstAPI,
136 # however, this is optional and can be removed if desired.
137 #
138 # This make target doesn't go first in the Makefile, though, since we
139 # really only want to make "install" when it's specifically requested.
140 # Note that "world" doesn't do a "clean", since it's nice to be able
141 # to restart a compilation that fails without re-doing a lot of
142 # unnecessary work.
143
144 intro:
145         @echo "Build of $(BUILD_ID) starting for $(PLATFORM)!"
146 ifdef DONT_BUILD_PARADYN
147         @echo "Build of Paradyn components skipped!"
148 endif
149 ifdef DONT_BUILD_FE
150         @echo "Build of Paradyn front-end components skipped!"
151 endif
152 ifdef DONT_BUILD_DAEMON
153         @echo "Build of Paradyn daemon components skipped!"
154 endif
155 ifdef DONT_BUILD_VISIS
156         @echo "Build of Paradyn visi client components skipped!"
157 endif
158 ifdef DONT_BUILD_PD_MT
159         @echo "Build of ParadynMT components skipped!"
160 endif
161 ifdef DONT_BUILD_DYNINST
162         @echo "Build of DyninstAPI components skipped!"
163 endif
164
165 world: intro
166         $(MAKE) $(fullSystem)
167         @echo "Build of $(BUILD_ID) complete for $(PLATFORM)!"
168
169 # "make Paradyn" and "make DyninstAPI" are also useful and valid build targets!
170
171 Paradyn ParadynD ParadynFE ParadynVC DyninstAPI SymtabAPI StackwalkerAPI basicComps subSystems testsuites InstructionAPI: 
172         $(MAKE) $($@)
173         @echo "Build of $@ complete."
174         @date
175
176 # Low-level directory-targets  (used in the sets defined above)
177 # Explicit specification of these rules permits better parallelization
178 # than building subsystems using a for loop
179
180 .PHONY: $(allSubdirs) $(allSubdirs_noinstall)
181
182 $(allSubdirs): 
183         @if [ -f $@/$(PLATFORM)/Makefile ]; then \
184                 $(MAKE) -C $@/$(PLATFORM) && \
185                 $(MAKE) -C $@/$(PLATFORM) install; \
186         elif [ -f $@/Makefile ]; then \
187                 $(MAKE) -C $@ && \
188                 $(MAKE) -C $@ install; \
189         else \
190                 echo $@ has no Makefile; \
191                 false; \
192         fi
193
194 $(allSubdirs_noinstall):
195         @echo "***allSubdirs_noinstall***"
196         +@if [ -f $@/$(PLATFORM)/Makefile ]; then \
197                 $(MAKE) -C $@/$(PLATFORM); \
198         elif [ -f $@/Makefile ]; then \
199                 $(MAKE) -C $@; \
200         else \
201                 @echo $@ has no Makefile; \
202                 false; \
203         fi
204
205 # Generate targets of the form install_<target> for all directories in
206 # allSubdirs_noinstall
207 allSubdirs_explicitInstall = $(patsubst %,install_%,$(allSubdirs_noinstall))
208
209 $(allSubdirs_explicitInstall): install_%: %
210         +@if [ -f $(@:install_%=%)/$(PLATFORM)/Makefile ]; then \
211                 $(MAKE) -C $(@:install_%=%)/$(PLATFORM) install \
212         elif [ -f $(@:install_%=%)/Makefile ]; then \
213                 $(MAKE) -C $(@:install_%=%) install; \
214         else \
215                 @echo $(@:install_%=%) has no Makefile; \
216                 false; \
217         fi
218
219
220 # dependencies -- keep parallel make from building out of order
221 symtabAPI igen: common
222 stackwalk: symtabAPI dynutil
223 dyninstAPI: symtabAPI instructionAPI
224 symtabAPI dyninstAPI: dynutil
225 paradynd:  pdutil dyninstAPI 
226 paradyn: pdutil pdthread 
227 pdthread: igen mrnet 
228 visi:  pdutil
229 pdutil: igen
230 visiClients/tclVisi: visi
231 visiClients/barchart: visi
232 visiClients/tableVisi: visi
233 visiClients/phaseTable: visi
234 visiClients/histVisi: visi
235 visiClients/terrain: visi
236 visiClients/termWin: visi mrnet pdthread
237 dyner codeCoverage dyninstAPI/tests testsuite newtestsuite: dyninstAPI
238 rtinst: igen dyninstAPI_RT 
239
240 # This rule passes down the documentation-related make stuff to
241 # lower-level Makefiles in the individual "docs" directories.
242
243 docs install-man:
244         +for subsystem in $(fullSystem); do                     \
245             if [ -f $$subsystem/docs/Makefile ]; then           \
246                 $(MAKE) -C $$subsystem/docs $@;                 \
247             else                                                \
248                 true;                                           \
249             fi                                                  \
250         done
251
252
253 # The "make nightly" target is what should get run automatically every
254 # night.  It uses "make world" to build things in the right order for
255 # a build from scratch.  
256 #
257 # Note that "nightly" should only be run on the primary build site,
258 # and does things like building documentation that don't need to be
259 # built for each different architecture.  Other "non-primary" build
260 # sites that run each night should just run "make clean world".
261
262 umd-nightly:
263         $(MAKE) clean
264         $(MAKE) DyninstAPI
265
266 # Used for nightly builds
267 nightly: DyninstAPI testsuites
268
269 #nightly:
270 #       $(MAKE) clean
271 #       $(MAKE) world
272 ##      $(MAKE) DyninstAPI
273 #       $(MAKE) docs
274 #       $(MAKE) install-man
275 #       chmod 644 /p/paradyn/man/man?/*