|
1 # |
|
2 # This Source Code Form is subject to the terms of the Mozilla Public |
|
3 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
5 |
|
6 #! gmake |
|
7 |
|
8 MOD_DEPTH = ../.. |
|
9 topsrcdir = @top_srcdir@ |
|
10 srcdir = @srcdir@ |
|
11 VPATH = @srcdir@ |
|
12 |
|
13 include $(MOD_DEPTH)/config/autoconf.mk |
|
14 |
|
15 include $(topsrcdir)/config/config.mk |
|
16 |
|
17 DIRS = io linking malloc md memory misc threads |
|
18 |
|
19 ifeq ($(USE_PTHREADS), 1) |
|
20 DIRS += pthreads |
|
21 endif |
|
22 |
|
23 ifeq ($(USE_BTHREADS), 1) |
|
24 DIRS += bthreads |
|
25 endif |
|
26 |
|
27 ifeq ($(USE_CPLUS), 1) |
|
28 DIRS += cplus |
|
29 endif |
|
30 |
|
31 # |
|
32 # Define platform-dependent OS_LIBS |
|
33 # |
|
34 |
|
35 ifeq ($(OS_ARCH),SunOS) |
|
36 MAPFILE = $(OBJDIR)/nsprmap.sun |
|
37 GARBAGE += $(MAPFILE) |
|
38 ifdef NS_USE_GCC |
|
39 ifdef GCC_USE_GNU_LD |
|
40 MKSHLIB += -Wl,--version-script,$(MAPFILE) |
|
41 else |
|
42 MKSHLIB += -Wl,-M,$(MAPFILE) |
|
43 endif |
|
44 else |
|
45 MKSHLIB += -M $(MAPFILE) |
|
46 endif |
|
47 # |
|
48 # In Solaris 2.6 or earlier, -lrt is called -lposix4. |
|
49 # |
|
50 LIBRT_TEST=$(firstword $(sort 5.7 $(OS_RELEASE))) |
|
51 ifeq (5.7, $(LIBRT_TEST)) |
|
52 LIBRT=-lrt |
|
53 else |
|
54 LIBRT=-lposix4 |
|
55 endif |
|
56 |
|
57 ifdef USE_PTHREADS |
|
58 OS_LIBS = -lpthread ${LIBRT} -lsocket -lnsl -ldl -lc |
|
59 else |
|
60 OS_LIBS = -lsocket -lnsl -ldl -lc |
|
61 endif # USE_PTHREADS |
|
62 ifeq ($(CPU_ARCH),sparc) |
|
63 ifndef USE_64 |
|
64 DSO_LDOPTS += -Wl,-f,\$$ORIGIN/cpu/\$$ISALIST/lib$(ULTRASPARC_LIBRARY)$(LIBRARY_VERSION).so |
|
65 endif |
|
66 endif # sparc |
|
67 endif # SunOS |
|
68 |
|
69 ifeq ($(OS_ARCH), IRIX) |
|
70 ifeq ($(USE_PTHREADS), 1) |
|
71 OS_LIBS = -lpthread |
|
72 endif |
|
73 OS_LIBS += -lc |
|
74 endif |
|
75 |
|
76 ifeq ($(OS_ARCH),AIX) |
|
77 DSO_LDOPTS += -binitfini::_PR_Fini |
|
78 OS_LIBS = -lodm -lcfg |
|
79 ifeq ($(CLASSIC_NSPR),1) |
|
80 ifeq ($(OS_RELEASE),4.1) |
|
81 OS_LIBS += -lsvld -lc |
|
82 else |
|
83 OS_LIBS += -ldl -lc |
|
84 endif |
|
85 else |
|
86 ifeq ($(OS_RELEASE),4.1) |
|
87 OS_LIBS += -lpthreads -lsvld -lC_r -lC -lc_r -lm /usr/lib/libc.a |
|
88 else |
|
89 OS_LIBS += -lpthreads -ldl -lC_r -lC -lc_r -lm /usr/lib/libc.a |
|
90 endif |
|
91 endif |
|
92 endif |
|
93 |
|
94 # On AIX, we override malloc in non-pthread versions. On AIX 4.2 or |
|
95 # above, this requires that we use the rtl-enabled version of libc.a. |
|
96 ifeq ($(OS_ARCH),AIX) |
|
97 ifneq (,$(filter-out 3.2 4.1,$(OS_RELEASE))) |
|
98 ifneq ($(USE_PTHREADS),1) |
|
99 BUILD_AIX_RTL_LIBC = 1 |
|
100 AIX_RTL_LIBC = $(OBJDIR)/libc.a |
|
101 endif |
|
102 endif |
|
103 endif |
|
104 |
|
105 ifeq ($(OS_ARCH),OS2) |
|
106 MAPFILE = $(OBJDIR)/$(LIBRARY_NAME)$(LIBRARY_VERSION).def |
|
107 ADD_TO_DEF_FILE = cat $(srcdir)/os2extra.def >> $(MAPFILE) |
|
108 GARBAGE += $(MAPFILE) |
|
109 MKSHLIB += $(MAPFILE) |
|
110 endif |
|
111 |
|
112 ifeq ($(OS_ARCH),OSF1) |
|
113 ifeq ($(USE_PTHREADS), 1) |
|
114 OS_LIBS = -lpthread -lrt |
|
115 endif |
|
116 ifneq ($(OS_RELEASE),V2.0) |
|
117 OS_LIBS += -lc_r |
|
118 endif |
|
119 endif |
|
120 |
|
121 # Linux, GNU/Hurd, and GNU/kFreeBSD systems |
|
122 ifneq (,$(filter Linux GNU%,$(OS_ARCH))) |
|
123 ifeq ($(USE_PTHREADS), 1) |
|
124 ifeq ($(OS_TARGET),Android) |
|
125 # Android has no libpthread.so in NDK |
|
126 OS_LIBS = -ldl |
|
127 else |
|
128 OS_LIBS = -lpthread -ldl |
|
129 endif |
|
130 else |
|
131 OS_LIBS = -ldl |
|
132 endif |
|
133 ifneq ($(OS_TARGET),Android) |
|
134 # Android has no librt - realtime functions are in libc |
|
135 OS_LIBS += -lrt |
|
136 endif |
|
137 endif |
|
138 |
|
139 ifeq ($(OS_ARCH),HP-UX) |
|
140 ifeq ($(USE_PTHREADS), 1) |
|
141 ifeq (,$(filter-out B.10.10 B.10.20,$(OS_RELEASE))) |
|
142 OS_LIBS = -ldce |
|
143 else |
|
144 OS_LIBS = -lpthread -lrt |
|
145 endif |
|
146 endif |
|
147 ifeq ($(PTHREADS_USER), 1) |
|
148 OS_LIBS = -lpthread |
|
149 endif |
|
150 ifeq ($(basename $(OS_RELEASE)),A.09) |
|
151 OS_LIBS += -ldld -L/lib/pa1.1 -lm |
|
152 else |
|
153 OS_LIBS += -ldld -lm -lc |
|
154 endif |
|
155 ifneq ($(OS_TEST),ia64) |
|
156 ifndef USE_64 |
|
157 DSO_LDOPTS += +I PR_HPUX10xInit |
|
158 endif |
|
159 endif |
|
160 endif |
|
161 |
|
162 ifeq ($(OS_ARCH),UNIXWARE) |
|
163 OS_LIBS = -lsocket -lc |
|
164 endif |
|
165 |
|
166 ifeq ($(OS_ARCH),WINNT) |
|
167 ifdef NS_USE_GCC |
|
168 OS_LIBS = -ladvapi32 -lws2_32 -lwinmm |
|
169 else |
|
170 OS_LIBS = advapi32.lib ws2_32.lib winmm.lib |
|
171 endif |
|
172 endif |
|
173 |
|
174 ifeq ($(OS_ARCH),WINCE) |
|
175 OS_LIBS = ws2.lib |
|
176 endif |
|
177 |
|
178 ifeq ($(OS_TARGET),Android) |
|
179 OS_LIBS += -llog |
|
180 endif |
|
181 |
|
182 ifeq ($(OS_TARGET),MacOSX) |
|
183 OS_LIBS = -framework CoreServices -framework CoreFoundation |
|
184 endif |
|
185 |
|
186 EXTRA_LIBS += $(OS_LIBS) |
|
187 |
|
188 # |
|
189 # Define platform-dependent OBJS |
|
190 # |
|
191 |
|
192 OBJS = \ |
|
193 $(OBJDIR)/prvrsion.$(OBJ_SUFFIX) \ |
|
194 io/$(OBJDIR)/prfdcach.$(OBJ_SUFFIX) \ |
|
195 io/$(OBJDIR)/prmwait.$(OBJ_SUFFIX) \ |
|
196 io/$(OBJDIR)/prmapopt.$(OBJ_SUFFIX) \ |
|
197 io/$(OBJDIR)/priometh.$(OBJ_SUFFIX) \ |
|
198 io/$(OBJDIR)/pripv6.$(OBJ_SUFFIX) \ |
|
199 io/$(OBJDIR)/prlayer.$(OBJ_SUFFIX) \ |
|
200 io/$(OBJDIR)/prlog.$(OBJ_SUFFIX) \ |
|
201 io/$(OBJDIR)/prmmap.$(OBJ_SUFFIX) \ |
|
202 io/$(OBJDIR)/prpolevt.$(OBJ_SUFFIX) \ |
|
203 io/$(OBJDIR)/prprf.$(OBJ_SUFFIX) \ |
|
204 io/$(OBJDIR)/prscanf.$(OBJ_SUFFIX) \ |
|
205 io/$(OBJDIR)/prstdio.$(OBJ_SUFFIX) \ |
|
206 threads/$(OBJDIR)/prcmon.$(OBJ_SUFFIX) \ |
|
207 threads/$(OBJDIR)/prrwlock.$(OBJ_SUFFIX) \ |
|
208 threads/$(OBJDIR)/prtpd.$(OBJ_SUFFIX) \ |
|
209 linking/$(OBJDIR)/prlink.$(OBJ_SUFFIX) \ |
|
210 malloc/$(OBJDIR)/prmalloc.$(OBJ_SUFFIX) \ |
|
211 malloc/$(OBJDIR)/prmem.$(OBJ_SUFFIX) \ |
|
212 md/$(OBJDIR)/prosdep.$(OBJ_SUFFIX) \ |
|
213 memory/$(OBJDIR)/prshm.$(OBJ_SUFFIX) \ |
|
214 memory/$(OBJDIR)/prshma.$(OBJ_SUFFIX) \ |
|
215 memory/$(OBJDIR)/prseg.$(OBJ_SUFFIX) \ |
|
216 misc/$(OBJDIR)/pralarm.$(OBJ_SUFFIX) \ |
|
217 misc/$(OBJDIR)/pratom.$(OBJ_SUFFIX) \ |
|
218 misc/$(OBJDIR)/prcountr.$(OBJ_SUFFIX) \ |
|
219 misc/$(OBJDIR)/prdtoa.$(OBJ_SUFFIX) \ |
|
220 misc/$(OBJDIR)/prenv.$(OBJ_SUFFIX) \ |
|
221 misc/$(OBJDIR)/prerr.$(OBJ_SUFFIX) \ |
|
222 misc/$(OBJDIR)/prerror.$(OBJ_SUFFIX) \ |
|
223 misc/$(OBJDIR)/prerrortable.$(OBJ_SUFFIX) \ |
|
224 misc/$(OBJDIR)/prinit.$(OBJ_SUFFIX) \ |
|
225 misc/$(OBJDIR)/prinrval.$(OBJ_SUFFIX) \ |
|
226 misc/$(OBJDIR)/pripc.$(OBJ_SUFFIX) \ |
|
227 misc/$(OBJDIR)/prlog2.$(OBJ_SUFFIX) \ |
|
228 misc/$(OBJDIR)/prlong.$(OBJ_SUFFIX) \ |
|
229 misc/$(OBJDIR)/prnetdb.$(OBJ_SUFFIX) \ |
|
230 misc/$(OBJDIR)/praton.$(OBJ_SUFFIX) \ |
|
231 misc/$(OBJDIR)/prolock.$(OBJ_SUFFIX) \ |
|
232 misc/$(OBJDIR)/prrng.$(OBJ_SUFFIX) \ |
|
233 misc/$(OBJDIR)/prsystem.$(OBJ_SUFFIX) \ |
|
234 misc/$(OBJDIR)/prthinfo.$(OBJ_SUFFIX) \ |
|
235 misc/$(OBJDIR)/prtpool.$(OBJ_SUFFIX) \ |
|
236 misc/$(OBJDIR)/prtrace.$(OBJ_SUFFIX) \ |
|
237 misc/$(OBJDIR)/prtime.$(OBJ_SUFFIX) |
|
238 |
|
239 ifdef USE_PTHREADS |
|
240 OBJS += \ |
|
241 pthreads/$(OBJDIR)/ptsynch.$(OBJ_SUFFIX) \ |
|
242 pthreads/$(OBJDIR)/ptio.$(OBJ_SUFFIX) \ |
|
243 pthreads/$(OBJDIR)/ptthread.$(OBJ_SUFFIX) \ |
|
244 pthreads/$(OBJDIR)/ptmisc.$(OBJ_SUFFIX) |
|
245 else |
|
246 OBJS += \ |
|
247 io/$(OBJDIR)/prdir.$(OBJ_SUFFIX) \ |
|
248 io/$(OBJDIR)/prfile.$(OBJ_SUFFIX) \ |
|
249 io/$(OBJDIR)/prio.$(OBJ_SUFFIX) \ |
|
250 io/$(OBJDIR)/prsocket.$(OBJ_SUFFIX) \ |
|
251 misc/$(OBJDIR)/pripcsem.$(OBJ_SUFFIX) |
|
252 |
|
253 ifndef USE_BTHREADS |
|
254 OBJS += \ |
|
255 threads/$(OBJDIR)/prcthr.$(OBJ_SUFFIX) \ |
|
256 threads/$(OBJDIR)/prdump.$(OBJ_SUFFIX) \ |
|
257 threads/$(OBJDIR)/prmon.$(OBJ_SUFFIX) \ |
|
258 threads/$(OBJDIR)/prsem.$(OBJ_SUFFIX) \ |
|
259 threads/combined/$(OBJDIR)/prucpu.$(OBJ_SUFFIX) \ |
|
260 threads/combined/$(OBJDIR)/prucv.$(OBJ_SUFFIX) \ |
|
261 threads/combined/$(OBJDIR)/prulock.$(OBJ_SUFFIX) \ |
|
262 threads/combined/$(OBJDIR)/prustack.$(OBJ_SUFFIX) \ |
|
263 threads/combined/$(OBJDIR)/pruthr.$(OBJ_SUFFIX) |
|
264 endif |
|
265 |
|
266 endif |
|
267 |
|
268 ifeq ($(USE_CPLUS), 1) |
|
269 OBJS += \ |
|
270 cplus/$(OBJDIR)/rcbase.$(OBJ_SUFFIX) \ |
|
271 cplus/$(OBJDIR)/rccv.$(OBJ_SUFFIX) \ |
|
272 cplus/$(OBJDIR)/rcfileio.$(OBJ_SUFFIX) \ |
|
273 cplus/$(OBJDIR)/rcinrval.$(OBJ_SUFFIX) \ |
|
274 cplus/$(OBJDIR)/rcio.$(OBJ_SUFFIX) \ |
|
275 cplus/$(OBJDIR)/rclock.$(OBJ_SUFFIX) \ |
|
276 cplus/$(OBJDIR)/rcnetdb.$(OBJ_SUFFIX) \ |
|
277 cplus/$(OBJDIR)/rcnetio.$(OBJ_SUFFIX) \ |
|
278 cplus/$(OBJDIR)/rcthread.$(OBJ_SUFFIX) \ |
|
279 cplus/$(OBJDIR)/rctime.$(OBJ_SUFFIX) |
|
280 endif |
|
281 |
|
282 ifeq ($(OS_ARCH), WINNT) |
|
283 RES=$(OBJDIR)/nspr.res |
|
284 RESNAME=nspr.rc |
|
285 endif # WINNT |
|
286 |
|
287 include $(srcdir)/md/$(PR_MD_ARCH_DIR)/objs.mk |
|
288 ifdef USE_BTHREADS |
|
289 include $(srcdir)/bthreads/objs.mk |
|
290 endif |
|
291 |
|
292 LIBRARY_NAME = nspr |
|
293 LIBRARY_VERSION = $(MOD_MAJOR_VERSION) |
|
294 |
|
295 RELEASE_LIBS = $(TARGETS) |
|
296 |
|
297 include $(topsrcdir)/config/rules.mk |
|
298 |
|
299 ifeq ($(BUILD_AIX_RTL_LIBC),1) |
|
300 TARGETS += $(AIX_RTL_LIBC) |
|
301 # XXX is this a shared library? |
|
302 endif |
|
303 |
|
304 # |
|
305 # Version information generation (begin) |
|
306 # |
|
307 ECHO = echo |
|
308 INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private |
|
309 TINC = $(OBJDIR)/_pr_bld.h |
|
310 |
|
311 ifeq ($(OS_TARGET),OS2) |
|
312 PROD = nspr$(MOD_MAJOR_VERSION).$(DLL_SUFFIX) |
|
313 else |
|
314 PROD = $(notdir $(SHARED_LIBRARY)) |
|
315 endif |
|
316 |
|
317 NOW = $(MOD_DEPTH)/config/$(OBJDIR)/now |
|
318 SH_DATE = $(shell date "+%Y-%m-%d %T") |
|
319 SH_NOW = $(shell $(NOW)) |
|
320 |
|
321 ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT) |
|
322 SUF = i64 |
|
323 else |
|
324 SUF = LL |
|
325 endif |
|
326 |
|
327 DEFINES += -D_NSPR_BUILD_ |
|
328 |
|
329 GARBAGE += $(TINC) |
|
330 |
|
331 $(TINC): |
|
332 @$(MAKE_OBJDIR) |
|
333 @$(ECHO) '#define _BUILD_STRING "$(SH_DATE)"' > $(TINC) |
|
334 @if test ! -z "$(SH_NOW)"; then \ |
|
335 $(ECHO) '#define _BUILD_TIME $(SH_NOW)$(SUF)' >> $(TINC); \ |
|
336 else \ |
|
337 true; \ |
|
338 fi |
|
339 @$(ECHO) '#define _PRODUCTION "$(PROD)"' >> $(TINC) |
|
340 |
|
341 |
|
342 $(OBJDIR)/prvrsion.$(OBJ_SUFFIX): prvrsion.c $(TINC) |
|
343 ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT) |
|
344 $(CC) -Fo$@ -c $(CFLAGS) -I$(OBJDIR) $< |
|
345 else |
|
346 $(CC) -o $@ -c $(CFLAGS) -I$(OBJDIR) $< |
|
347 endif |
|
348 # |
|
349 # Version information generation (end) |
|
350 # |
|
351 |
|
352 |
|
353 # We use a 'build' target here to ensure that we build $(TARGETS) after |
|
354 # looping over $(DIRS) to create the object files in a parallel build. |
|
355 # Recipe commands are executed sequentially in a parallel build while |
|
356 # target dependencies are executed in parallel. |
|
357 export:: |
|
358 $(MAKE) build |
|
359 |
|
360 # |
|
361 # The Client build wants the shared libraries in $(dist_bindir) |
|
362 # so we also install them there. |
|
363 # |
|
364 |
|
365 build:: $(TARGETS) |
|
366 $(INSTALL) -m 444 $(TARGETS) $(dist_libdir) |
|
367 ifdef SHARED_LIBRARY |
|
368 ifeq ($(OS_ARCH),HP-UX) |
|
369 $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_libdir) |
|
370 $(INSTALL) -m 755 $(SHARED_LIBRARY) $(dist_bindir) |
|
371 else |
|
372 $(INSTALL) -m 444 $(SHARED_LIBRARY) $(dist_bindir) |
|
373 endif |
|
374 endif |
|
375 |
|
376 ifeq ($(BUILD_AIX_RTL_LIBC),1) |
|
377 $(AIX_RTL_LIBC): /usr/ccs/lib/libc.a |
|
378 rtl_enable -o $@ $< |
|
379 endif |