Use a generic error message for gettid failure
[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 VPATH           += ../src
16
17 ifdef STATIC_COMPS
18 ifneq ($(SUITE_NAME),DyninstRT)
19 TARGET := $(TARGET:.so=.a)
20 endif
21 endif
22
23 ifndef NO_STD_OBJS
24
25 OBJS +=         $(filter %.o, $(patsubst %.C, %.o, $(filter %.C,$(notdir $(SRCS)))) \
26                 $(patsubst %.c, %.o, $(filter %.c,$(notdir $(SRCS)))) \
27                 $(patsubst %.y, %.o, $(filter %.y,$(notdir $(SRCS)))) \
28                 $(patsubst %.l, %.o, $(filter %.l,$(notdir $(SRCS)))) \
29                 $(patsubst %.s, %.o, $(filter %.s,$(notdir $(SRCS)))) \
30                 $(patsubst %.S, %.o, $(filter %.S,$(notdir $(SRCS)))) \
31                 $(IGEN_GEN_SRCS:%.C=%.o))
32
33 STATIC_OBJS +=  $(filter %_nopic.o, $(patsubst %.C, %_nopic.o, $(filter %.C,$(notdir $(SRCS)))) \
34                 $(patsubst %.c, %_nopic.o, $(filter %.c,$(notdir $(SRCS)))) \
35                 $(patsubst %.y, %_nopic.o, $(filter %.y,$(notdir $(SRCS)))) \
36                 $(patsubst %.l, %_nopic.o, $(filter %.l,$(notdir $(SRCS)))) \
37                 $(patsubst %.s, %_nopic.o, $(filter %.s,$(notdir $(SRCS)))) \
38                 $(patsubst %.S, %_nopic.o, $(filter %.S,$(notdir $(SRCS)))) \
39                 $(IGEN_GEN_SRCS:%.C=%_nopic.o))
40
41 endif
42
43 XLC_DEPFILES =  $(filter %.u, $(patsubst %.u, %.o, $(filter %.u,$(notdir $(SRCS)))))
44
45 # specify build prerequisite dependencies (for parallel make)
46 ifdef PREREQUISITES
47 $(OBJS): $(PREREQUISITES)
48 endif
49
50 XTARGET= $(basename $(basename $(TARGET)))
51 VOUCHER= V_$(XTARGET)
52
53 ifdef STATIC_COMPS
54 STATIC_LIBRARY = true
55 endif
56
57 $(VOUCHER).c: $(OBJS)
58         @echo Updating build voucher information: $(VOUCHER)
59         $(HIDE_COMP)$(BUILDSTAMP) $(BUILD_ID) $(XTARGET)
60
61 $(VOUCHER).o: $(VOUCHER).c
62         @echo Compiling $@
63         $(HIDE_COMP)$(MODCC) -c $(MODCFLAGS) $(VOUCHER).c
64
65 ifndef OVERRIDE_LINK
66 ifndef STATIC_LIBRARY
67 $(TARGET): $(TARGET).$(SONAME_NUM)
68         @echo Making symlink $(TARGET).$(SONAME_NUM) to $(TARGET)
69         $(HIDE_COMP)-$(LN) -f $(TARGET).$(SONAME_NUM) $(TARGET)
70 $(TARGET).$(SONAME_NUM): $(TARGET).$(RELEASE_NUM)
71         @echo Making symlink $(TARGET).$(RELEASE_NUM) to $(TARGET).$(SONAME_NUM)
72         $(HIDE_COMP)-$(LN) -f $(TARGET).$(RELEASE_NUM) $(TARGET).$(SONAME_NUM)
73 $(TARGET).$(RELEASE_NUM): $(OBJS) $(VOUCHER).o
74         $(HIDE_COMP)$(RM) $(TARGET) $(TARGET).$(RELEASE_NUM)
75         @echo Linking $@
76         $(HIDE_COMP)$(LD) $(LIBDIR) $(SONAME_FLAGS) -o $(TARGET).$(RELEASE_NUM) $(VOUCHER).o $(OBJS) $(LDFLAGS) $(LIBS) 
77
78 else # build a static lib
79 $(TARGET): $(OBJS) $(VOUCHER).o
80         $(HIDE_COMP)$(RM) $(TARGET)
81         @echo Linking $@
82         $(AR) rcs $(TARGET) $(VOUCHER).o $(OBJS)
83 endif # STATIC_LIBRARY
84
85 ifdef STATIC_TARGET
86
87 # pattern rules for building non-PIC .o's
88 %_nopic.o: ../src/%.c
89         @echo "Compiling $< (noPIC)"
90         $(HIDE_COMP)$(CC) -c -o $*_nopic.o $(CFLAGS) $(CPPFLAGS) ../src/$*.c
91
92 %_nopic.o: ../src/%.C
93         @echo "Compiling $< (noPIC)"
94         $(HIDE_COMP)$(CXX) -c -o $*_nopic.o $(CPPFLAGS) $(CXXFLAGS) ../src/$*.C
95
96 %_nopic.o: ../src/%.S
97         @echo "Compiling $< (noPIC)"
98         $(HIDE_COMP)$(AS) $(ASFLAGS) -o $*_nopic.o ../src/$*.S
99
100 %_nopic.o: ../src/%.s
101         @echo "Compiling $< (noPIC)"
102         $(HIDE_COMP)$(AS) $(ASFLAGS) -o $*_nopic.o ../src/$*.s
103
104 ifdef STATIC_CFLAGS
105 $(STATIC_TARGET): CFLAGS = $(STATIC_CFLAGS)
106 endif
107
108 ifdef STATIC_CPPFLAGS
109 $(STATIC_TARGET): CPPFLAGS = $(STATIC_CPPFLAGS)
110 endif
111
112 ifdef STATIC_CXXCFLAGS
113 $(STATIC_TARGET): CXXFLAGS = $(STATIC_CXXFLAGS)
114 endif
115
116 ifdef STATIC_ASFLAGS
117 $(STATIC_TARGET): ASFLAGS = $(STATIC_ASFLAGS)
118 endif
119
120 $(STATIC_TARGET): $(STATIC_OBJS)
121         @echo Linking $@
122         $(HIDE_COMP)$(RM) $(STATIC_TARGET)
123         $(HIDE_COMP)$(AR) rcs $(STATIC_TARGET) $(STATIC_OBJS)
124
125 endif # STATIC_TARGET
126
127 endif  # OVERRIDE_LINK
128
129 ifdef PUBLIC_H
130 $(INCLUDE_DEST)/%.h: $(TO_INC)/%.h
131         @echo Install $@
132         $(HIDE_COMP)$(INSTALL) $^ $(INCLUDE_DEST)
133
134 public_includes: $(patsubst %,$(INCLUDE_DEST)/%,$(PUBLIC_H))
135 else
136 public_includes:
137 endif 
138
139 ifndef DEST
140 DEST            = $(LIBRARY_DEST)
141 endif
142
143 clean:
144         $(RM) *.o *.[hC] *.a *.so* .__afs* $(TARGET) $(STATIC_TARGET)
145
146 distclean: clean
147         $(RM) DEPENDS
148
149 $(DEST)/$(TARGET).$(RELEASE_NUM): $(TARGET).$(RELEASE_NUM) $(TARGET)
150         @echo Installing $(TARGET).$(RELEASE_NUM) to $(DEST)/$(TARGET).$(RELEASE_NUM)
151         $(HIDE_COMP)-$(INSTALL) $(TARGET).$(RELEASE_NUM) $(DEST)/$(TARGET).$(RELEASE_NUM)
152
153 ifndef STATIC_LIBRARY
154 $(DEST)/$(TARGET).$(SONAME_NUM): $(DEST)/$(TARGET).$(RELEASE_NUM)
155         @echo Making symlink $(TARGET).$(RELEASE_NUM) to $(DEST)/$(TARGET).$(SONAME_NUM)
156         $(HIDE_COMP)-$(LN) -f $(TARGET).$(RELEASE_NUM) $(DEST)/$(TARGET).$(SONAME_NUM)
157 $(DEST)/$(TARGET): $(DEST)/$(TARGET).$(SONAME_NUM)
158         @echo Making symlink $(TARGET).$(SONAME_NUM) to $(DEST)/$(TARGET)
159         $(HIDE_COMP)-$(LN) -f $(TARGET).$(SONAME_NUM) $(DEST)/$(TARGET)
160 else
161 $(DEST)/$(TARGET): $(TARGET)
162         @echo Installing $(TARGET) to $(DEST)/$(TARGET)
163         $(HIDE_COMP)-$(INSTALL) $(TARGET) $(DEST)/$(TARGET)
164 endif
165
166 ifdef STATIC_TARGET
167 $(DEST)/$(STATIC_TARGET): $(STATIC_TARGET)
168         @echo Installing $(STATIC_TARGET) to $(DEST)
169         $(HIDE_COMP)-$(INSTALL) $(STATIC_TARGET) $(DEST)
170
171 install_generic: $(DEST)/$(TARGET) public_includes $(DEST)/$(STATIC_TARGET)
172
173 else
174
175 install_generic: $(DEST)/$(TARGET) public_includes
176
177 endif
178
179 # A definition of OVERRIDE_INSTALL will skip this definition, so it shouldn't contain
180 # anything other than "install_generic". 
181 ifndef OVERRIDE_INSTALL
182 install: install_generic
183 endif
184
185 # %.C: %.y
186 #       $(YACC) $(YFLAGS) $<
187 #       $(MV) y.tab.c $@
188
189 # %.C: %.l
190 #       $(LEX) -t $(LFLAGS) $< > $@
191
192 #
193 # dependency generation definitions
194 #
195
196 .PHONY : depend
197 depend:
198         $(RM) DEPENDS
199         $(MAKE) DEPENDS
200
201
202 # Define DEPENDS dependencies such that the DEPENDS files depends on
203 # the .I files, not the .[Ch] files; otherwise, DEPENDS get rebuilt
204 # all the time.  We do need to build the Igen-generated files before
205 # updating DEPENDS, however,
206 #
207 ifndef DEPENDFLAGS
208   DEPENDFLAGS = -MM
209 endif
210
211 DEPENDS:
212         @echo "Building depends files"
213         @touch DEPENDS
214 #       @$(MAKE) $(SRCS)
215 ifdef XLC_BUILD
216   ifeq ($(DEPCC), xlC)
217         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > /dev/null
218         cat *.u > DEPENDS
219         rm -f *.u
220   else
221         $(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
222   endif #aix/power platform
223 else
224 ifeq ($(MODCC),cc)
225         $(HIDE_COMP)$(GCC) -MM $(MODCFLAGS) $(SRCS) > DEPENDS
226 else
227         $(HIDE_COMP)$(DEPCC) $(DEPENDFLAGS) $(MODCFLAGS) $(SRCS) > DEPENDS
228 endif #XLC_BUILD
229 endif
230
231
232 #.depend.% %.C:
233 #       makedepend -fDEPENDS -- $(CFLAGS) $(SRCS)
234
235
236 #
237 # A few pattern rules for simplicity in handling igen-generated files.
238 #
239
240 %.mrnet.CLNT.C %.mrnet.CLNT.h %.mrnet.SRVR.C %.mrnet.SRVR.h %.mrnet.h %.mrnet.temp.C: %.I
241         $(IGEN) -mrnet $(ICFLAGS) $<
242
243 %.xdr.C %.xdr.CLNT.C %.xdr.CLNT.h %.xdr.SRVR.C %.xdr.SRVR.h %.xdr.h %.xdr.temp.C: %.I
244
245         $(IGEN) -xdr $(ICFLAGS) $<
246
247 %.thread.C %.thread.CLNT.h %.thread.SRVR.h %.thread.h: %.I
248         $(IGEN) -thread $(ICFLAGS) $<
249
250 #
251 # include the dependencies.
252 #
253 ifneq ($(MAKECMDGOALS),distclean)
254 include DEPENDS
255 endif
256
257 # platform-specific options
258 include $(TO_CORE)/make.platform.tmpl
259
260 # Let's trying prettyprinting the compile lines...
261
262 %.o : %.c
263         @echo Compiling $<
264         $(HIDE_COMP) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ 
265
266 %.o : %.C
267         @echo Compiling $<
268         $(HIDE_COMP) $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@
269
270 ifneq (x,x$(strip $(LIBDWARF_INC)))
271 MYFLAGS += -I$(LIBDWARF_INC)
272 endif
273
274 ifdef LIBDWARF_PLATFORM
275 ifdef USES_DWARF_DEBUG
276 ifneq (x,x$(strip $(LIBDWARF_LIB)))
277 LIBDWARF_LINK_FLAGS += -L$(LIBDWARF_LIB)
278 endif
279 ifneq (xtrue,x$(LIBDWARF_STATIC))
280 LIBDWARF_LINK_FLAGS += -ldwarf
281 endif
282 LIBS += $(LIBDWARF_LINK_FLAGS)
283 endif
284 endif
285
286
287 ifneq (x,x$(strip $(LIBELF_INC)))
288 MYFLAGS += -I$(LIBELF_INC)
289 endif
290
291 ifdef LIBELF_PLATFORM
292 ifdef USES_LIBELF
293
294 ifneq (x,x$(strip $(LIBELF_LIB)))
295 LIBELF_LINK_FLAGS += -L$(LIBELF_LIB)
296 # If we're dynamic (that is, not static) add an rpath
297 endif # LIBELF_LIB
298 ifneq (xtrue,x$(LIBELF_STATIC))
299 LIBELF_LINK_FLAGS += -lelf
300 endif
301 LIBS += $(LIBELF_LINK_FLAGS)
302 MYFLAGS += -DLIBELF_PLATFORM
303
304 endif
305 endif
306
307 ifdef SUITE_NAME
308 MYFLAGS += -DCOMPONENT_NAME=$(SUITE_NAME)
309 endif
310
311 all: $(TARGET)