removed mistaken divid by 1Meg for predicted cost.
[dyninst.git] / Makefile
1 #
2 #
3 # First cut at a topLevel makefile for the paradyn system.
4 #
5 #
6
7 # Standalone is the list of standalone binaries.  These get built
8 # first when we "make world", since they include tools for building
9 # the rest of the system.
10 #
11 # Subsystems is the list of all other pieces which should be built.
12 #
13 buildfirst      = igen util thread visi dag hist
14 subsystems      = bininst paradyn paradynd paradyndSIM paradyndPVM \
15                   rtinst rthist
16
17
18 # This rule makes most of the normal recursive stuff.  Just about any
19 # target can be passed down to the lower-level Makefiles by listing it
20 # as a target on the next line:
21
22 # Note that the first item listed in this rule ("all") is what gets
23 # made by default if make is passed no arguments.  Don't add other
24 # target before all!
25
26 all clean install:
27         +for subsystem in $(buildfirst) $(subsystems); do       \
28             if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then    \
29                $(MAKE) -C $$subsystem/$(PLATFORM) $@;           \
30             else                                                \
31                 true;                                           \
32             fi                                                  \
33         done
34
35 # This rules passes down the documentation-related stuff to
36 # lower-level Makefiles in the individual "docs" directories.
37
38 docs install-man:
39         +for subsystem in $(buildfirst) $(subsystems); do       \
40             if [ -f $$subsystem/docs/Makefile ]; then           \
41                $(MAKE) -C $$subsystem/docs $@;                  \
42             else                                                \
43                 true;                                           \
44             fi                                                  \
45         done
46
47
48 # The "make world" target is set up to build things in the "correct"
49 # order for a build from scratch.  It builds things in the
50 # "buildfirst" list first, then builds everything, then installs
51 # everything.
52 #
53 # This make target doesn't go first in the Makefile, though, since we
54 # really only want to make "install" when it's specifically requested.
55 # Note that "world" doesn't do a "clean", since it's nice to be able
56 # to restart a compilation that fails without re-doing a lot of
57 # unnecessary work.
58
59 world:
60         +for subsystem in $(buildfirst); do                     \
61             if [ -f $$subsystem/$(PLATFORM)/Makefile ]; then    \
62                $(MAKE) -C $$subsystem/$(PLATFORM) all install;  \
63             else                                                \
64                 true;                                           \
65             fi                                                  \
66         done
67         $(MAKE) all
68         $(MAKE) install
69
70
71 # The "make nightly" target is what should get run automatically every
72 # night.  It uses "make world" to build things in the right order for
73 # a build from scratch.  
74 #
75
76 # Note that "nightly" should only be run on the primary build site,
77 # and does things like building documentation that don't need to be
78 # built for each different architecture.  Other "non-primary" build
79 # sites that run each night should just run "make clean world".
80
81 nightly:
82         $(MAKE) clean
83         $(MAKE) world
84         $(MAKE) docs
85         $(MAKE) install-man
86         chmod 644 /p/paradyn/man/man?/*