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