Added new target 'distclean' that removes DEPENDS files in addition to
[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 # $Id: make.program.tmpl,v 1.23 2004/05/07 08:53:21 jodom Exp $
8 #
9
10 BUILD_ID= -s $(SUITE_NAME) -v $(RELEASE_NUM)$(BUILD_MARK)$(BUILD_NUM)
11
12 ifndef DEST
13 DEST            = $(TO_CORE)/$(PROGRAM_DEST)
14 endif
15
16 ifndef TARGETS
17 VOUCHER = V_$(TARGET)
18 $(VOUCHER):
19         @echo Updating build voucher information: $(VOUCHER)
20         $(BUILDSTAMP) $(BUILD_ID) $(TARGET)
21         $(MODCC) -c $(MODCFLAGS) $(VOUCHER).c
22 endif
23
24 OBJS =          $(filter %.o, $(patsubst %.C, %.o, $(filter %.C,$(notdir $(SRCS)))) \
25                 $(patsubst %.c, %.o, $(filter %.c,$(notdir $(SRCS)))) \
26                 $(patsubst %.y, %.o, $(filter %.y,$(notdir $(SRCS)))) \
27                 $(patsubst %.l, %.o, $(filter %.l,$(notdir $(SRCS)))) \
28                 $(patsubst %.s, %.o, $(filter %.s,$(notdir $(SRCS)))) \
29                 $(patsubst %.S, %.o, $(filter %.S,$(notdir $(SRCS)))) \
30                 $(IGEN_GEN_SRCS:%.C=%.o))
31
32 ifndef UNCOMMON_LINK
33 ifneq ($(TARGET),test11)
34 $(TARGET): $(OBJS)
35         @$(MAKE) $(VOUCHER)
36         $(MODCC) -o $(TARGET) $(LDFLAGS) $(VOUCHER).o $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
37 endif
38 endif
39
40 ifndef UNCOMMON_LINK
41 # The user may set APP_PURE_OPTIONS for application-specific purify options
42 pure: $(OBJS)
43         @$(MAKE) $(VOUCHER)
44         purify $(APP_PURE_OPTIONS) -cache-dir=/tmp \
45                 -$(MODCC) -collector=$(COLLECTOR) $(MODCC) -o $(TARGET) \
46                 $(LDFLAGS) $(VOUCHER).o $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
47 endif
48
49 ifndef UNCOMMON_LINK
50 quantify: $(OBJS)
51         @$(MAKE) $(VOUCHER)
52         quantify -cache-dir=/tmp \
53                 -$(MODCC) -collector=$(COLLECTOR) $(MODCC) -o $(TARGET) \
54                 $(LDFLAGS) $(VOUCHER).o $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS)
55 endif
56
57 ifndef UNCOMMON_LINK
58 qpt: $(OBJS)
59         @$(MAKE) $(VOUCHER)
60         $(MODCC) -Xlinker -Bstatic -o $(TARGET) \
61                 $(LDFLAGS) $(VOUCHER).o $(OBJS) $(LIBDIR) $(LIBS) $(SYSLIBS) \
62                 -Xlinker -Bdynamic -ldl -Xlinker -Bstatic -lintl
63         # qpt's quick profiling may produce incorrect results in programs
64         # executing interprocedural jumps; this includes setjmp/longjmp.
65         # Hence we must use the -s option for paradyn:
66         /unsup/qpt2/bin/qpt2 -s $(TARGET)
67 endif
68
69 VPATH           += ../src:$(TO_CORE)/$(LIBRARY_DEST):$(TO_CORE)/../lib/$(PLATFORM):$(BACKUP_CORE)/../lib/$(PLATFORM)
70
71
72 echo:
73         echo $(VPATH)
74
75 # Allow this to be ammended by modules
76 clean::
77         $(RM) *.o *.[hC] $(TARGET) $(TARGETS)
78
79 distclean:: clean
80         $(RM) DEPENDS
81
82 ifndef UNCOMMON_INSTALL
83 install:  $(DEST)/$(TARGET)
84
85 $(DEST)/$(TARGET): $(TARGET)
86         -$(CP) $(TARGET) $(DEST)
87 endif
88
89 .PHONY : depend
90 depend:
91         $(RM) DEPENDS
92         $(MAKE) DEPENDS
93
94
95 # Define DEPENDS dependencies such that the DEPENDS files depends on
96 # the .I files, not the .[Ch] files; otherwise, DEPENDS get rebuilt
97 # all the time.  We do need to build the Igen-generated files before
98 # updating DEPENDS, however,
99 #
100 ifndef DEPENDFLAGS
101   DEPENDFLAGS = -MM
102 endif
103 ifdef IGEN_ISRCS
104 ifdef EXPLICIT_DEPENDS
105 DEPENDS:
106 else
107 DEPENDS: $(SRCS) $(IGEN_ISRCS)
108 endif
109         touch DEPENDS
110         $(MAKE) $(IGEN_GEN_SRCS)
111         $(MAKE) $(SRCS)
112         $(MODCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) $(filter %.C,$(IGEN_GEN_SRCS)) > DEPENDS
113 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS) $(IGEN_SRCS) $(NOPED_SRCS)
114 else
115 ifdef EXPLICIT_DEPENDS
116 DEPENDS:
117 else
118 DEPENDS: $(SRCS)
119 endif
120         touch DEPENDS
121         $(MAKE) $(SRCS)
122         $(MODCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
123
124 ifdef IBM_BPATCH_COMPAT 
125 ifeq (aix,$(findstring aix,$(PLATFORM)))
126         cat *.u > DEPENDS
127         rm -f *.u
128 endif
129 endif
130
131 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
132 endif
133
134
135
136 # A few pattern rules for simplicity.  The default lex rule is
137 # redefined, just for the sake of cleanliness.  More important are the
138 # igen rules; they "automatically" pick the correct type of igen to
139 # run.  Actually, we can't do this completely "right" unless igen is
140 # changed to generate different output files for the various type of
141 # interfaces.
142 #
143  
144 %.C: %.y
145         $(YACC) $(YFLAGS) $<
146         $(MV) y.tab.c $@
147
148 %.C: %.l
149         $(LEX) -t $(LFLAGS) $< > $@
150
151 %.xdr.C %.xdr.CLNT.C %.xdr.CLNT.h %.xdr.SRVR.C %.xdr.SRVR.h %.xdr.h: %.I
152         $(IGEN) -xdr $(ICFLAGS) $<
153
154 %.thread.C %.thread.CLNT.h %.thread.SRVR.h %.thread.h: %.I
155         $(IGEN) -thread $(ICFLAGS) $<
156
157 #
158 # include the dependencies.
159 #
160 ifneq ($(MAKECMDGOALS),distclean)
161 include DEPENDS
162 endif
163
164 # platform-specific options
165 include $(TO_CORE)/make.platform.tmpl