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