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