Fixes compile error and Merge branch 'Defensive' of ssh://coriander.cs.wisc.edu/u...
[dyninst.git] / make.library.tmpl
1 # -*- makefile -*-
2 # This file defines the things that should be common to all "libraries"
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.library.tmpl,v 1.31 2008/03/12 20:08:25 legendre Exp $
8 #
9
10 BUILD_ID= -s $(SUITE_NAME) -v $(RELEASE_NUM)$(BUILD_MARK)$(BUILD_NUM)
11
12 XTARGET = $(basename $(basename $(TARGET)))
13 VOUCHER = V_$(XTARGET)
14
15 $(VOUCHER):
16         @echo Updating build voucher information: $(VOUCHER)
17         $(HIDE_COMP)$(BUILDSTAMP) $(BUILD_ID) $(XTARGET)
18         $(HIDE_COMP)$(MODCC) -c $(MODCFLAGS) $(VOUCHER).c
19
20 VPATH           += ../src
21
22 ifndef NO_STD_OBJS
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 STATIC_OBJS +=  $(filter %_nopic.o, $(patsubst %.C, %_nopic.o, $(filter %.C,$(notdir $(SRCS)))) \
33                 $(patsubst %.c, %_nopic.o, $(filter %.c,$(notdir $(SRCS)))) \
34                 $(patsubst %.y, %_nopic.o, $(filter %.y,$(notdir $(SRCS)))) \
35                 $(patsubst %.l, %_nopic.o, $(filter %.l,$(notdir $(SRCS)))) \
36                 $(patsubst %.s, %_nopic.o, $(filter %.s,$(notdir $(SRCS)))) \
37                 $(patsubst %.S, %_nopic.o, $(filter %.S,$(notdir $(SRCS)))) \
38                 $(IGEN_GEN_SRCS:%.C=%_nopic.o))
39
40 endif
41
42 XLC_DEPFILES =  $(filter %.u, $(patsubst %.u, %.o, $(filter %.u,$(notdir $(SRCS)))))
43
44 # specify build prerequisite dependencies (for parallel make)
45 ifdef PREREQUISITES
46 $(OBJS): $(PREREQUISITES)
47 endif
48
49 XTARGET= $(basename $(basename $(TARGET)))
50 VOUCHER= V_$(XTARGET)
51
52 ifdef STATIC_COMPS
53 STATIC_LIBRARY = true
54 endif
55
56 ifndef OVERRIDE_LINK
57 ifndef STATIC_LIBRARY
58 $(TARGET): $(OBJS) $(EXTRA_LIBS)
59         $(HIDE_COMP)$(RM) $(TARGET)
60         $(HIDE_COMP)$(MAKE) $(VOUCHER)
61         $(LD) $(LIBDIR) $(LDFLAGS) -o $(TARGET) $(VOUCHER).o $(OBJS) $(LIBS)
62 else # build a static lib
63 $(TARGET): $(OBJS) $(EXTRA_LIBS)
64         $(HIDE_COMP)$(RM) $(TARGET)
65         $(HIDE_COMP)$(MAKE) $(VOUCHER)
66         $(AR) rcs $(TARGET) $(VOUCHER).o $(OBJS)
67 endif # STATIC_LIBRARY
68
69 ifdef STATIC_TARGET
70
71 # pattern rules for building non-PIC .o's
72 %_nopic.o: ../src/%.c
73         @echo "Compiling $< (noPIC)"
74         $(HIDE_COMP)$(CC) -c -o $*_nopic.o $(CFLAGS) $(CPPFLAGS) ../src/$*.c
75
76 %_nopic.o: ../src/%.C
77         @echo "Compiling $< (noPIC)"
78         $(HIDE_COMP)$(CXX) -c -o $*_nopic.o $(CPPFLAGS) $(CXXFLAGS) ../src/$*.C
79
80 %_nopic.o: ../src/%.S
81         @echo "Compiling $< (noPIC)"
82         $(HIDE_COMP)$(AS) $(ASFLAGS) -o $*_nopic.o ../src/$*.S
83
84 %_nopic.o: ../src/%.s
85         @echo "Compiling $< (noPIC)"
86         $(HIDE_COMP)$(AS) $(ASFLAGS) -o $*_nopic.o ../src/$*.s
87
88 ifdef STATIC_CFLAGS
89 $(STATIC_TARGET): CFLAGS = $(STATIC_CFLAGS)
90 endif
91
92 ifdef STATIC_CPPFLAGS
93 $(STATIC_TARGET): CPPFLAGS = $(STATIC_CPPFLAGS)
94 endif
95
96 ifdef STATIC_CXXCFLAGS
97 $(STATIC_TARGET): CXXFLAGS = $(STATIC_CXXFLAGS)
98 endif
99
100 ifdef STATIC_ASFLAGS
101 $(STATIC_TARGET): ASFLAGS = $(STATIC_ASFLAGS)
102 endif
103
104 $(STATIC_TARGET): $(STATIC_OBJS)
105         $(HIDE_COMP)$(RM) $(STATIC_TARGET)
106         $(AR) rcs $(STATIC_TARGET) $(STATIC_OBJS)
107
108 endif # STATIC_TARGET
109
110 endif  # OVERRIDE_LINK
111
112 ifdef PUBLIC_H
113 $(INCLUDE_DEST)/%.h: $(TO_INC)/%.h
114         $(CP) $^ $(INCLUDE_DEST)
115
116 public_includes: $(patsubst %,$(INCLUDE_DEST)/%,$(PUBLIC_H))
117 else
118 public_includes:
119 endif 
120
121 ifndef DEST
122 DEST            = $(LIBRARY_DEST)
123 endif
124
125 echo:
126         echo $(OBJS)
127
128 clean:
129         $(RM) *.o *.[hC] *.a *.so* .__afs* $(TARGET) $(STATIC_TARGET)
130
131 distclean: clean
132         $(RM) DEPENDS
133
134 RELEASE_MAJOR ?= $(RELEASE_NUM)
135 RELEASE_NUM = $(RELEASE_MAJOR).$(RELEASE_MINOR)
136
137 ifdef STATIC_COMPS
138 $(DEST)/$(TARGET): $(TARGET)
139         -$(CP) $(TARGET) $(DEST)/$(TARGET)
140 else
141 $(DEST)/$(TARGET): $(TARGET)
142         -$(CP) $(TARGET) $(DEST)/$(TARGET).$(RELEASE_NUM)
143         -cd $(DEST); $(LN) -f $(TARGET).$(RELEASE_NUM) $(TARGET).$(RELEASE_MAJOR)
144         -cd $(DEST); $(LN) -f $(TARGET).$(RELEASE_MAJOR) $(TARGET)
145 endif
146
147 ifdef STATIC_TARGET
148 $(DEST)/$(STATIC_TARGET): $(STATIC_TARGET)
149         -$(CP) $(STATIC_TARGET) $(DEST)
150
151 install_generic: $(DEST)/$(TARGET) public_includes $(DEST)/$(STATIC_TARGET)
152
153 else
154
155 install_generic: $(DEST)/$(TARGET) public_includes
156
157 endif
158
159 # A definition of OVERRIDE_INSTALL will skip this definition, so it shouldn't contain
160 # anything other than "install_generic". 
161 ifndef OVERRIDE_INSTALL
162 install: install_generic
163 endif
164
165 # %.C: %.y
166 #       $(YACC) $(YFLAGS) $<
167 #       $(MV) y.tab.c $@
168
169 # %.C: %.l
170 #       $(LEX) -t $(LFLAGS) $< > $@
171
172 #
173 # dependency generation definitions
174 #
175
176 .PHONY : depend
177 depend:
178         $(RM) DEPENDS
179         $(MAKE) DEPENDS
180
181
182 # Define DEPENDS dependencies such that the DEPENDS files depends on
183 # the .I files, not the .[Ch] files; otherwise, DEPENDS get rebuilt
184 # all the time.  We do need to build the Igen-generated files before
185 # updating DEPENDS, however,
186 #
187 ifndef DEPENDFLAGS
188   DEPENDFLAGS = -MM
189 endif
190
191 DEPENDS:
192         @echo "Building depends files"
193         @touch DEPENDS
194 #       @$(MAKE) $(SRCS)
195 ifdef XLC_BUILD
196   ifeq ($(DEPCC), xlC)
197         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > /dev/null
198         cat *.u > DEPENDS
199         rm -f *.u
200   else
201         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
202   endif #aix/power platform
203 else
204 ifeq ($(MODCC),cc)
205         $(HIDE_COMP)$(GCC) -MM $(MODCFLAGS) $(SRCS) > DEPENDS
206 else
207         $(HIDE_COMP)$(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
208 endif #XLC_BUILD
209 endif
210
211
212 #.depend.% %.C:
213 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
214
215
216 #
217 # A few pattern rules for simplicity in handling igen-generated files.
218 #
219
220 %.mrnet.CLNT.C %.mrnet.CLNT.h %.mrnet.SRVR.C %.mrnet.SRVR.h %.mrnet.h %.mrnet.temp.C: %.I
221         $(IGEN) -mrnet $(ICFLAGS) $<
222
223 %.xdr.C %.xdr.CLNT.C %.xdr.CLNT.h %.xdr.SRVR.C %.xdr.SRVR.h %.xdr.h %.xdr.temp.C: %.I
224
225         $(IGEN) -xdr $(ICFLAGS) $<
226
227 %.thread.C %.thread.CLNT.h %.thread.SRVR.h %.thread.h: %.I
228         $(IGEN) -thread $(ICFLAGS) $<
229
230 #
231 # include the dependencies.
232 #
233 ifneq ($(MAKECMDGOALS),distclean)
234 include DEPENDS
235 endif
236
237 # platform-specific options
238 include $(TO_CORE)/make.platform.tmpl
239
240 # Let's trying prettyprinting the compile lines...
241
242 %.o : %.c
243         @echo Compiling $<
244         $(HIDE_COMP) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ 
245
246 %.o : %.C
247         @echo Compiling $<
248         $(HIDE_COMP) $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@