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