added APP_PURE_OPTIONS for application-specific purify options
[dyninst.git] / make.program.tmpl
1 #
2 # This file defines the things that should be common to all "programs"
3 # in the paradyn build tree.  It depends on things like SRCS and
4 # TARGET being set correctly in the module-specific template and the
5 # architecture-specific Makefile.
6
7 # $Log: make.program.tmpl,v $
8 # Revision 1.10  1996/04/29 03:27:55  tamches
9 # added APP_PURE_OPTIONS for application-specific purify options
10 #
11 # Revision 1.9  1996/01/05 19:52:09  tamches
12 # igen --> $(IGEN)
13 #
14 # Revision 1.8  1995/11/29 00:14:12  tamches
15 # added -cache-dir=/tmp option to purify so we don't run out of disk space
16 # while purify works.  Added quantify; added qpt.
17 #
18 # Revision 1.7  1995/08/29  20:18:17  krisna
19 # removed the "tmp" directory references
20 # changed "cp" BACK TO "mv" for yacc output
21 #
22 # Revision 1.6  1995/08/24 15:00:55  hollings
23 # AIX/SP-2 port (including option for split instruction/data heaps)
24 # Tracing of rexec (correctly spawns a paradynd if needed)
25 # Added rtinst function to read getrusage stats (can now be used in metrics)
26 # Critical Path
27 # Improved Error reporting in MDL sematic checks
28 # Fixed MDL Function call statement
29 # Fixed bugs in TK usage (strings passed where UID expected)
30 #
31 # Revision 1.5  1995/03/15  19:12:13  jcargill
32 # Added real pure rule, and fixed LDFLAGS
33 #
34 # Revision 1.4  1995/02/27  17:37:06  jcargill
35 # Added support for suppressing implicit dependency generation
36 # (EXPLICIT_DEPENDS) and removed PD_NO_DEPENDS support
37 #
38 # Revision 1.3  1995/02/16  07:56:46  markc
39 # Added flag to prevent generation of DEPENDS file if PD_NO_DEPENDS is true
40 # to save time during recompiles.
41 #
42 # Revision 1.2  1995/01/30  21:26:15  jcargill
43 # Better use of TO_CORE for modules below top-level (e.g. visiClients)
44 #
45 # Revision 1.1  1995/01/30  18:08:21  jcargill
46 # Major build system reorganization
47 #
48 #
49
50 OBJS =          $(patsubst %.C, %.o, $(filter %.C,$(notdir $(SRCS)))) \
51                 $(patsubst %.c, %.o, $(filter %.c,$(notdir $(SRCS)))) \
52                 $(patsubst %.y, %.o, $(filter %.y,$(notdir $(SRCS)))) \
53                 $(patsubst %.l, %.o, $(filter %.l,$(notdir $(SRCS)))) \
54                 $(patsubst %.s, %.o, $(filter %.s,$(notdir $(SRCS)))) \
55                 $(patsubst %.S, %.o, $(filter %.S,$(notdir $(SRCS)))) \
56                 $(IGEN_GEN_SRCS:%.C=%.o)
57
58 ifndef UNCOMMON_LINK
59 $(TARGET): $(OBJS) $(LIBS)
60         $(MODCC) -o $(TARGET) $(LDFLAGS) $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
61 endif
62
63 ifndef UNCOMMON_LINK
64 # The user may set APP_PURE_OPTIONS for application-specific purify options
65 pure: $(OBJS) $(LIBS)
66         purify $(APP_PURE_OPTIONS) -cache-dir=/tmp -$(MODCC) -collector=$(COLLECTOR) $(MODCC) -o $(TARGET) $(LDFLAGS) $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
67 endif
68
69 ifndef UNCOMMON_LINK
70 quantify: $(OBJS) $(LIBS)
71         quantify -cache-dir=/tmp -$(MODCC) -collector=$(COLLECTOR) $(MODCC) -o $(TARGET) $(LDFLAGS) $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
72 endif
73
74 ifndef UNCOMMON_LINK
75 qpt: $(OBJS) $(LIBS)
76         $(MODCC) -static -o $(TARGET) $(LDFLAGS) $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
77         # qpt's quick profiling may produce incorrect results in programs
78         # executing interprocedural jumps; this includes setjmp/longjmp.
79         # Hence we must use the -s option for paradyn:
80         qpt2 -s $(TARGET)
81 endif
82
83 ifndef DEST
84 DEST            = $(TO_CORE)/../bin/$(PLATFORM)
85 endif
86
87 VPATH           += ../src:$(TO_CORE)/../lib/$(PLATFORM):/p/paradyn/lib/$(PLATFORM)
88
89
90 echo:
91         echo $(VPATH)
92
93 clean:
94         rm -f *.o *.[hC] $(TARGET)
95
96 install:  $(DEST)/$(TARGET)
97
98 $(DEST)/$(TARGET): $(TARGET)
99         cp $(TARGET) $(DEST)
100
101 .PHONY : depend
102 depend:
103         rm -f DEPENDS
104         $(MAKE) DEPENDS
105
106
107 # Define DEPENDS dependencies such that the DEPENDS files depends on
108 # the .I files, not the .[Ch] files; otherwise, DEPENDS get rebuilt
109 # all the time.  We do need to build the Igen-generated files before
110 # updating DEPENDS, however,
111 #
112 ifdef IGEN_ISRCS
113 ifdef EXPLICIT_DEPENDS
114 DEPENDS:
115 else
116 DEPENDS: $(SRCS) $(IGEN_ISRCS)
117 endif
118         touch DEPENDS
119         $(MAKE) $(IGEN_GEN_SRCS)
120         $(MAKE) $(SRCS)
121         $(MODCC) -MM $(MODCFLAGS) $(SRCS) $(IGEN_GEN_SRCS) > DEPENDS
122 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS) $(IGEN_SRCS) $(NOPED_SRCS)
123 else
124 ifdef EXPLICIT_DEPENDS
125 DEPENDS:
126 else
127 DEPENDS: $(SRCS)
128 endif
129         touch DEPENDS
130         $(MAKE) $(SRCS)
131         $(MODCC) -MM $(MODCFLAGS) $(SRCS) > DEPENDS
132 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
133 endif
134
135
136
137 # A few pattern rules for simplicity.  The default lex rule is
138 # redefined, just for the sake of cleanliness.  More important are the
139 # igen rules; they "automatically" pick the correct type of igen to
140 # run.  Actually, we can't do this completely "right" unless igen is
141 # changed to generate different output files for the various type of
142 # interfaces.
143 #
144
145 %.C: %.y
146         $(YACC) $(YFLAGS) $<
147         mv y.tab.c $@
148
149 %.C: %.l
150         $(LEX) -t $(LFLAGS) $< > $@
151
152 %.xdr.C %.xdr.CLNT.C %.xdr.CLNT.h %.xdr.SRVR.C %.xdr.SRVR.h %.xdr.h: %.I
153         $(IGEN) -xdr $(ICFLAGS) $<
154
155 %.thread.C %.thread.CLNT.h %.thread.SRVR.h %.thread.h: %.I
156         $(IGEN) -thread $(ICFLAGS) $<
157
158 #
159 # include the dependencies.
160 #
161 include DEPENDS