1 XCOMM $Xorg: lnxLib.rules,v 1.3 2000/08/17 19:41:47 cpqbld Exp $
2 XCOMM $XFree86: xc/config/cf/lnxLib.rules,v 3.52 2003/10/31 20:49:03 herrb Exp $
5 * Linux shared library rules (DLL & ELF versions)
7 #ifndef HasSharedLibraries
8 # define HasSharedLibraries YES
10 #ifndef ForceNormalLib
11 # define ForceNormalLib NO
19 # define SharedOldX NO
24 # if (LinuxCLibMajorVersion >= 5 && LinuxCLibMinorVersion >= 4) || LinuxCLibMajorVersion >= 6
25 # ifndef SpecialMalloc
26 # define SpecialMalloc NO
29 # ifndef UseInternalMalloc
30 # define UseInternalMalloc NO
35 # if LinuxCLibMajorVersion <= 5
37 * #define BaseShLibReqs -lc
39 * I don't want to use this since the normal ELF executables should
40 * be linked with libc.so. If it is not, i.e., static, the variables in
41 * libc.so which is loaded in because of the other shared libraries
42 * may have different values than the ones in the static ELF
43 * executables. That happens if the binaries are linked with libg.a
46 * If an ELF executable linked with libg.a or libc_p.a loads a shared
47 * object which needs libc.so via dlopen (), I think it should fail.
48 * It is a very bad idea. The moral story is DON'T USE dlopen () IN
49 * ELF EXECUTABLES LINKED WITH libg.a OR libc_p.a. H.J.
52 # define BaseShLibReqs
54 /* With GNU libc 2 this works fine. */
55 # define BaseShLibReqs -lc
58 # ifndef SharedDataSeparation
59 # define SharedDataSeparation NO
61 # ifndef SharedCodeDef
62 # define SharedCodeDef /**/
64 # ifndef SharedLibraryDef
65 # define SharedLibraryDef /**/
67 # ifndef ShLibIncludeFile
68 # define ShLibIncludeFile <lnxLib.tmpl>
70 #ifndef RpathLoadFlags
72 #define RpathLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)
74 #define RpathLoadFlags /**/
77 #ifndef LibraryRpathLoadFlags
78 #define LibraryRpathLoadFlags RpathLoadFlags
80 # ifndef SharedLibraryLoadFlags
81 # define SharedLibraryLoadFlags -shared
83 # ifndef PositionIndependentCFlags
84 # define PositionIndependentCFlags -fPIC
86 # ifndef PositionIndependentCplusplusFlags
87 # define PositionIndependentCplusplusFlags -fPIC
89 # ifndef ExtraLoadFlags
90 # if LinuxBinUtilsMajorVersion >= 26
92 # if LinuxBinUtilsMajorVersion < 27
93 # define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(USRLIBDIRPATH)
96 # define ExtraLoadFlags RpathLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR)
99 # define ExtraLoadFlags RpathLoadFlags
102 # ifndef HardCodeLibdirFlag
103 # define HardCodeLibdirFlag RpathLoadFlags
105 # if !defined(ShlibGlobalsFlags)
106 # define ShlibGlobalsFlags -Wl,-Bsymbolic
110 * InstallSharedLibrary - generate rules to install the shared library.
111 * NOTE: file must be executable, hence "INSTBINFLAGS"
113 # ifndef InstallSharedLibrary
114 # define InstallSharedLibrary(libname,rev,dest) @@\
115 install:: Concat(lib,libname.so.rev) @@\
116 MakeDir($(DESTDIR)dest) @@\
117 $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\
118 @T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`;\
119 set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T @@\
120 @if $(SOSYMLINK); then (set -x; \
121 $(RM) Concat($(DESTDIR)dest/lib,libname.so); \ @@\
122 $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)); fi
123 # endif /* InstallSharedLibrary */
125 # ifndef InstallSharedLibtoolLibrary
127 # define SetRevisions(rev) V=`expr rev : '\([^:]*\)'`; \ @@\
128 R=`expr rev : '.*:\([^:]*\):'`; \ @@\
129 A=`expr rev : '.*:\([^:]*\)'`; \ @@\
130 MAJ=`expr $$V - $$A`; \ @@\
133 # define InstallSharedLibtoolLibrary(libname,rev,dest) @@\
134 install:: Concat(lib,libname.so) @@\
135 MakeDir($(DESTDIR)dest) @@\
136 @set +e; SetRevisions(rev); \ @@\
138 $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.$$MAJ.$$MIN) $(DESTDIR)dest; \ @@\
139 $(RM) Concat($(DESTDIR)dest/lib,libname.so.$$MAJ); \ @@\
140 $(LN) Concat(lib,libname.so.$$MAJ.$$MIN) Concat($(DESTDIR)dest/lib,libname.so.$$MAJ); \ @@\
141 $(RM) Concat($(DESTDIR)dest/lib,libname.so); \ @@\
142 $(LN) Concat(lib,libname.so.$$MAJ.$$MIN) Concat($(DESTDIR)dest/lib,libname.so)
143 # endif /* InstallSharedLibrary */
146 * InstallSharedLibraryData - generate rules to install the shared library data
148 # ifndef InstallSharedLibraryData
149 # define InstallSharedLibraryData(libname,rev,dest)
150 # endif /* InstallSharedLibraryData */
154 * SharedLibraryTarget - generate rules to create a shared library;
155 * build it into a different name so that we do not hose people by having
156 * the library gone for long periods.
158 # ifndef SharedLibraryTarget
159 # define SharedLibraryTarget(libname,rev,solist,down,up) @@\
160 AllTarget(Concat(lib,libname.so.rev)) @@\
162 Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\
164 @SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; (set -x; \ @@\
165 cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs) || exit 1; \ @@\
166 (set -x; $(RM) $$SONAME; $(LN) $@ $$SONAME); \ @@\
167 LinkBuildSonameLibrary($$SONAME) @@\
170 @if $(SOSYMLINK); then (set -x; \ @@\
171 $(RM) Concat(lib,libname.so); \ @@\
172 $(LN) $@ Concat(lib,libname.so)); fi @@\
173 LinkBuildLibrary($@) @@\
174 LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
177 @MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \ @@\
178 set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
179 $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
181 # endif /* SharedLibraryTarget */
184 # ifndef SharedLibtoolLibraryTarget
185 # define SharedLibtoolLibraryTarget(libname,rev,solist,down,up) @@\
186 AllTarget(Concat(lib,libname.so)) @@\
188 Concat(lib,libname.so): solist $(EXTRALIBRARYDEPS) @@\
190 @set +e; SetRevisions(rev); set -e; \ @@\
191 SONAME=$@.$$MAJ; \ @@\
193 $(RM) $@.$$MAJ.$$MIN~; \ @@\
194 cd down; $(CC) -o up/$@.$$MAJ.$$MIN~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs) || exit 1; \ @@\
196 $(RM) $$SONAME; $(LN) $@.$$MAJ.$$MIN $$SONAME); \ @@\
197 LinkBuildSonameLibrary($$SONAME); \ @@\
199 $(RM) $@.$$MAJ.$$MIN; \ @@\
200 $(MV) $@.$$MAJ.$$MIN~ $@.$$MAJ.$$MIN; \ @@\
202 $(LN) $@.$$MAJ.$$MIN $@); \ @@\
203 LinkBuildLibraryInline($@.$$MAJ.$$MIN); \ @@\
204 LinkBuildLibraryInline($@) @@\
207 @set +e; SetRevisions(rev); \ @@\
209 $(RM) Concat(lib,libname.so.$$MAJ); \ @@\
210 $(RM) Concat(lib,libname.so.$$MAJ.$$MIN) @@\
211 $(RM) Concat(lib,libname.so)
213 # endif /* SharedLibtoolLibraryTarget */
216 * SharedDepLibraryTarget - generate rules to create a shared library.
218 # ifndef SharedDepLibraryTarget
219 # define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up) @@\
220 AllTarget(Concat(lib,libname.so.rev)) @@\
222 Concat(lib,libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\
224 @SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \ @@\
225 (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
226 $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
227 LinkBuildSonameLibrary($$SONAME) @@\
230 @if $(SOSYMLINK); then (set -x; \ @@\
231 $(RM) Concat(lib,libname.so); \ @@\
232 $(LN) $@ Concat(lib,libname.so)); fi @@\
233 LinkBuildLibrary($@) @@\
234 LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
237 @MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \ @@\
238 set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
239 $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
241 #endif /* SharedDepLibraryTarget */
244 * SharedDepCplusplusLibraryTarget - generate rules to create a shared library.
246 #ifndef SharedDepCplusplusLibraryTarget
247 #define SharedDepCplusplusLibraryTarget(libname,rev,deplist,solist,down,up) @@\
248 AllTarget(Concat(lib,libname.so.rev)) @@\
250 Concat(lib,libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\
252 @SONAME=`echo $@ | sed 's/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; set -x; \ @@\
253 (cd down; $(CXX) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
254 $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
255 LinkBuildSonameLibrary($$SONAME) @@\
258 @if $(SOSYMLINK); then (set -x; \ @@\
259 $(RM) Concat(lib,libname.so); \ @@\
260 $(LN) $@ Concat(lib,libname.so)); fi @@\
261 LinkBuildLibrary($@) @@\
262 LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
265 @MAJREV=`echo rev | sed 's/\([0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/'`; \ @@\
266 set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
267 $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
269 #endif /* SharedDepCplusplusLibraryTarget */
271 # ifndef SharedDepModuleTarget
272 # define SharedDepModuleTarget(name,deps,solist) @@\
277 $(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
284 # endif /* SharedDepModuleTarget */
286 # ifndef SharedDriModuleTarget
287 # define SharedDriModuleTarget(name,deps,solist) @@\
292 @(echo 'DRI_MODULE { global: __dri*; local: *; };' > $@.map) @@\
293 $(CC) -o $@~ -Wl,--version-script=$@.map $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
301 # endif /* SharedDriModuleTarget */
304 * SharedLibraryDataTarget - generate rules to create shlib data file;
306 # ifndef SharedLibraryDataTarget
307 # define SharedLibraryDataTarget(libname,rev,salist)
308 # endif /* SharedLibraryTarget */
310 #else /* UseElfFormat */
312 # ifndef SharedDataSeparation
313 # define SharedDataSeparation NO
315 # ifndef SharedCodeDef
316 # define SharedCodeDef /**/
318 # ifndef SharedLibraryDef
319 # define SharedLibraryDef /**/
321 # ifndef ShLibIncludeFile
322 # define ShLibIncludeFile <lnxLib.tmpl>
324 # ifndef SharedLibraryLoadFlags
325 # define SharedLibraryLoadFlags /**/
327 # ifndef PositionIndependentCFlags
328 # define PositionIndependentCFlags -B/usr/bin/jump
332 * These definitions are now extended to work with the X sources and
333 * external sources wishing to build shared libs.
335 * A library can create it's own shlibs (.so) or can be incorporated into
336 * another "host" lib. All libraries generate stub (.sa) files.
337 * A "host" lib does all the work to generate the stubs for itself and its
338 * "guests", invoking the "guest" Makefiles to create the objects for
339 * inclusion into the "host" shlib. A "guest" lib will ask the "host" to
340 * create the stubfiles, then copy its own into its directory.
341 * Most external libs are "host" libs; the concept of "guest" is a holdover
342 * from older libs during the days of scarce shared library address space.
344 * To create a simple "host" shared lib, Xfoo, define:
346 * JUMP_ROOT_Xfoo = <source directory>
347 * JUMP_IS_HOST_Xfoo = YES
348 * JUMP_STUBLIBS_Xfoo = libXfoo.sa
349 * JUMP_DIR_Xfoo = $(JUMP_ROOT_Xfoo)/shared <work directory>
350 * JUMP_DEFS_Xfoo = -DFOO <defs for jump files>
351 * JUMP_VARS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_vars <see DLL docs>
352 * JUMP_FUNCS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_funcs <see DLL docs>
353 * JUMP_IGNORE_Xfoo = $(JUMP_ROOT_Xfoo)/jump_ignore <see DLL docs>
354 * JUMP_EXPORT_Xfoo = $(JUMP_DIR_Xfoo)/jump.vars <exported symbols>
355 * JUMP_IMPORT_Xfoo = $(JUMP_EXPORT_Xbar) <imported symbols>
356 * JUMP_ADDRESS_Xfoo = 0xXXXXXXXX <fill in with address>
357 * JUMP_JUMPTABLESIZE_Xfoo = 0x4000 <adjust if necessary>
358 * JUMP_GOTSIZE_Xfoo = 4096 <adjust if necessary>
359 * JUMP_STUBNAMES_Xfoo = libXfoo <and others>
360 * JUMP_STUBS_IMPORT_Xfoo = /usr/lib/libc.sa <and others>
361 * JUMP_LDLIBS_Xfoo = `$(CC) --print-libgcc-file-name` -lc <and others>
363 * To create a complex "host", you need to add
364 * JUMP_SIBARS_Xt = jump/libXbar.a~ <and others>
365 * These are the archives of the shared objects of the "guest" libs. They
366 * need to be added to the JUMP_LDLIBS_Xfoo lines.
368 * For further clarification, study the definitions of libXaw, a simple "host"
369 * lib, libXt, a complex "host" lib, and libXmu, one of libXts "guests".
371 * As a hint of how to start (with the DLL docs), touch jump_vars, jump_funcs
372 * and jump_ignore, then compile. Then massage the jump.vars and jump.funcs
373 * files in the shared subdirectory into jump_xxx files.
376 # ifndef UseInstalled
377 XCOMM These are only needed to build the server
380 LIBC_SA = /usr/i486-linuxaout/lib/libc.sa
381 LIBM_SA = /usr/i486-linuxaout/lib/libm.sa
383 LIBC_SA = /usr/lib/libc.sa
384 LIBM_SA = /usr/lib/libm.sa
387 JUMP_LDLIBS_libc = `$(CC) --print-libgcc-file-name` -lc
389 XCOMM libX11.so (X11, SM, ICE)
390 JUMP_ROOT_X11 = $(XLIBSRC)
391 JUMP_IS_HOST_X11 = YES
392 JUMP_STUBLIBS_X11 = libX11.sa libSM.sa libICE.sa
393 JUMP_SIBDIRS_X11 = $(JUMP_ROOT_SM) $(JUMP_ROOT_ICE)
394 JUMP_DIR_X11 = $(JUMP_ROOT_X11)/shared
395 JUMP_DEFS_X11 = $(XDMAUTHDEFS) $(XKB_DEFINES)
396 JUMP_VARS_X11 = $(JUMP_ROOT_X11)/jump_vars
397 JUMP_FUNCS_X11 = $(JUMP_ROOT_X11)/jump_funcs
398 JUMP_IGNORE_X11 = $(JUMP_ROOT_X11)/jump_ignore
399 JUMP_EXPORT_X11 = $(JUMP_DIR_X11)/jump.vars
400 JUMP_ADDRESS_X11 = 0x60200000
401 JUMP_JUMPTABLESIZE_X11 = 0x4000
402 JUMP_GOTSIZE_X11 = 4096
403 JUMP_STUBNAMES_X11 = libX11 libSM libICE
404 JUMP_STUBS_IMPORT_X11 = $(LIBC_SA)
405 JUMP_SIBARS_X11 = jump/libSM.a~ jump/libICE.a~
406 JUMP_LDLIBS_X11 = $(JUMP_SIBARS_X11) $(JUMP_LDLIBS_libc)
408 XCOMM libSM (part of libX11.so)
409 JUMP_ROOT_SM = $(SMSRC)
411 JUMP_HOST_SM = $(JUMP_ROOT_X11)
412 JUMP_DIR_SM = $(JUMP_DIR_X11)
414 XCOMM libICE (part of libX11.so)
415 JUMP_ROOT_ICE = $(ICESRC)
416 JUMP_IS_HOST_ICE = NO
417 JUMP_HOST_ICE = $(JUMP_ROOT_X11)
418 JUMP_DIR_ICE = $(JUMP_DIR_X11)
420 XCOMM libXt.so (Xt, Xmu, Xext, Xi, Xtst, Xp)
421 JUMP_ROOT_Xt = $(TOOLKITSRC)
422 JUMP_IS_HOST_Xt = YES
423 JUMP_STUBLIBS_Xt = libXt.sa libXmu.sa libXext.sa libXi.sa libXtst.sa libXp.sa
424 JUMP_SUBDIRS_Xt = $(JUMP_ROOT_X11)
425 JUMP_SIBDIRS_Xt = $(JUMP_ROOT_Xmu) $(JUMP_ROOT_Xext) \
426 $(JUMP_ROOT_Xi) $(JUMP_ROOT_Xtst) $(JUMP_ROOT_Xp)
427 JUMP_DIR_Xt = $(JUMP_ROOT_Xt)/shared
428 JUMP_VARS_Xt = $(JUMP_ROOT_Xt)/jump_vars
429 JUMP_FUNCS_Xt = $(JUMP_ROOT_Xt)/jump_funcs
430 JUMP_IGNORE_Xt = $(JUMP_ROOT_Xt)/jump_ignore
431 JUMP_EXPORT_Xt = $(JUMP_DIR_Xt)/jump.vars
432 JUMP_IMPORT_Xt = $(JUMP_EXPORT_X11)
433 JUMP_ADDRESS_Xt = 0x602a0000
434 JUMP_JUMPTABLESIZE_Xt = 0x4000
435 JUMP_GOTSIZE_Xt = 4096
436 JUMP_STUBNAMES_Xt = libXt libXmu libXext libXi libXtst libXp
437 JUMP_STUBS_IMPORT_Xt = $(JUMP_STUBS_IMPORT_X11)
438 JUMP_SIBARS_Xt = jump/libXmu.a~ jump/libXext.a~ jump/libXi.a~ jump/libXtst.a~ jump/libXp.a~
439 JUMP_LDLIBS_Xt = $(JUMP_SIBARS_Xt) $(JUMP_ROOT_ICE)/libICE.sa \
440 $(JUMP_ROOT_SM)/libSM.sa $(JUMP_ROOT_X11)/libX11.sa $(JUMP_LDLIBS_libc)
442 XCOMM libXmu (part of libXt.so)
443 JUMP_ROOT_Xmu = $(XMUSRC)
444 JUMP_IS_HOST_Xmu = NO
445 JUMP_HOST_Xmu = $(JUMP_ROOT_Xt)
446 JUMP_DIR_Xmu = $(JUMP_DIR_Xt)
448 XCOMM libXext (part of libXt.so)
449 JUMP_ROOT_Xext = $(XEXTLIBSRC)
450 JUMP_IS_HOST_Xext = NO
451 JUMP_HOST_Xext = $(JUMP_ROOT_Xt)
452 JUMP_DIR_Xext = $(JUMP_DIR_Xt)
454 XCOMM libXi (part of libXt.so)
455 JUMP_ROOT_Xi = $(XILIBSRC)
457 JUMP_HOST_Xi = $(JUMP_ROOT_Xt)
458 JUMP_DIR_Xi = $(JUMP_DIR_Xt)
460 XCOMM libXtst (part of libXt.so)
461 JUMP_ROOT_Xtst = $(XTESTLIBSRC)
462 JUMP_IS_HOST_Xtst = NO
463 JUMP_HOST_Xtst = $(JUMP_ROOT_Xt)
464 JUMP_DIR_Xtst = $(JUMP_DIR_Xt)
466 XCOMM libXp (part of libXt.so)
467 JUMP_ROOT_Xp = $(XPLIBSRC)
469 JUMP_HOST_Xp = $(JUMP_ROOT_Xt)
470 JUMP_DIR_Xp = $(JUMP_DIR_Xt)
472 XCOMM libXaw.so (Xaw)
473 JUMP_ROOT_Xaw = $(AWIDGETSRC)
474 JUMP_IS_HOST_Xaw = YES
475 JUMP_STUBLIBS_Xaw = libXaw.sa
476 JUMP_SUBDIRS_Xaw = $(JUMP_ROOT_Xt)
477 JUMP_DIR_Xaw = $(JUMP_ROOT_Xaw)/shared
478 JUMP_VARS_Xaw = $(JUMP_ROOT_Xaw)/jump_vars
479 JUMP_FUNCS_Xaw = $(JUMP_ROOT_Xaw)/jump_funcs
480 JUMP_IGNORE_Xaw = $(JUMP_ROOT_Xaw)/jump_ignore
481 JUMP_EXPORT_Xaw = $(JUMP_DIR_Xaw)/jump.vars
482 JUMP_IMPORT_Xaw = $(JUMP_EXPORT_Xt) $(JUMP_EXPORT_X11)
483 JUMP_ADDRESS_Xaw = 0x60300000
484 JUMP_JUMPTABLESIZE_Xaw = 0x4000
485 JUMP_GOTSIZE_Xaw = 4096
486 JUMP_STUBNAMES_Xaw = libXaw
487 JUMP_STUBS_IMPORT_Xaw = $(JUMP_STUBS_IMPORT_X11)
488 JUMP_LDLIBS_Xaw = $(JUMP_ROOT_Xt)/libXt.sa $(JUMP_ROOT_Xt)/libXmu.sa \
489 $(JUMP_ROOT_Xt)/libXext.sa $(JUMP_ROOT_X11)/libX11.sa \
492 # endif /* !UseInstalled */
495 * SharedLibraryDataTarget - generate rules to create shared data file
497 # ifndef SharedLibraryDataTarget
498 # define SharedLibraryDataTarget(libname,rev,salist)
502 * SharedLibraryTarget - generate rules to create a shared library;
503 * There are two basic flavors of libs: self-generating, which create
504 * their own (and possibly other) libs, and hosted, which rely on another
505 * lib for all the work.
507 # ifndef SharedLibraryTarget
508 # define SharedLibraryTarget(libname,rev,solist,down,up) @@\
509 XCOMM This logic is such to compile the libs in their proper order, @@\
510 XCOMM remain dependent on subsidiary libs, and yet minimize local work @@\
513 JUMP_LIB=Concat(lib,libname) @@\
515 XCOMM this is needed for newer gnumake versions @@\
516 export JUMP_DIR JUMP_LIB @@\
518 JUMP_IS_HOST=$(Concat(JUMP_IS_HOST_,libname)) @@\
519 JUMP_AR=$(JUMP_DIR)/Concat(lib,libname.a~) @@\
520 JUMP_SA=Concat(lib,libname.sa) @@\
521 JUMP_SO=Concat(lib,libname.so.rev) @@\
523 JUMP_HOST=$(Concat(JUMP_HOST_,libname)) @@\
525 INSTSOLIBFLAGS=-m 0555 @@\
527 AllTarget($(BUILDLIBDIR)/$(JUMP_SA)) @@\
529 $(BUILDLIBDIR)/$(JUMP_SA): $(JUMP_SA) @@\
530 LinkBuildLibrary($(JUMP_SA)) @@\
532 $(JUMP_SA) $(Concat(JUMP_STUBLIBS_,libname)) do_JUMP_SA: \
533 down/mk_JUMP_SA_$(JUMP_IS_HOST) @@\
535 down/mk_JUMP_SA_0:: mk_JUMP_HOST @@\
537 down/mk_JUMP_SA_0:: $(JUMP_HOST)/$(JUMP_SA) @@\
539 $(LN) $(JUMP_HOST)/$(JUMP_SA) $(JUMP_SA) @@\
542 down/mk_JUMP_SA_1:: $(JUMP_SO) @@\
544 down/mk_JUMP_SA_1:: down/mk_JUMP_SO_2 @@\
545 $(RM) $(Concat(JUMP_STUBLIBS_,libname)) @@\
546 mkstubs -v rev -l $(JUMP_LIB) \
547 -a $(Concat(JUMP_ADDRESS_,libname)) \
548 -j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
549 -g $(Concat(JUMP_GOTSIZE_,libname)) \
550 -- $(Concat(JUMP_STUBNAMES_,libname)) @@\
551 verify-shlib -l $(JUMP_SO) \
552 $(Concat(JUMP_STUBLIBS_,libname)) @@\
553 $(MV) verify.out $(JUMP_DIR) @@\
557 @echo checking stub library $(JUMP_SA) in $(JUMP_HOST)... @@\
558 @(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) $(JUMP_SA)) || exit 1 @@\
559 @echo ok. continuing in $(Concat(JUMP_ROOT_,libname))... @@\
561 $(JUMP_SO): down/mk_JUMP_SO_$(JUMP_IS_HOST) @@\
563 down/mk_JUMP_SO_0: @@\
565 down/mk_JUMP_SO_1:: $(JUMP_AR) mk_JUMP_SIBDIRS down/mk_JUMP_SO_2 @@\
567 down/mk_JUMP_SO_2: down/mk_JUMP_AR $(Concat(JUMP_SIBARS_,libname)) @@\
569 mkimage -f -v rev -l $(JUMP_LIB) \
570 -a $(Concat(JUMP_ADDRESS_,libname)) \
571 -j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
572 -g $(Concat(JUMP_GOTSIZE_,libname)) \
573 -- $(JUMP_AR) $(Concat(JUMP_LDLIBS_,libname)) @@\
574 $(RM) $(JUMP_DIR)/__jump.s $(JUMP_DIR)/__jump.o @@\
575 LinkBuildLibrary($(JUMP_SO)) @@\
579 @for d in $(Concat(JUMP_SIBDIRS_,libname)); do \
580 echo checking ar library in $$d...; \
581 (cd $$d ; $(MAKE) $(MFLAGS) fastdo_JUMP_AR) || exit 1; \
582 echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
584 fastdo_JUMP_AR: $(JUMP_DIR) down/mk_JUMP_AR @@\
586 $(JUMP_AR) do_JUMP_AR:: jumpsetup down/mk_JUMP_AR @@\
588 jumpsetup: $(JUMP_DIR) jumpsetup_$(JUMP_IS_HOST) @@\
592 LibMkdir($(Concat(JUMP_DIR_,libname))) @@\
593 $(LN) $(Concat(JUMP_DIR_,libname)) jump @@\
596 @echo doing jump setup in host $(JUMP_HOST)... @@\
597 @(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) jumpsetup) || exit 1 @@\
598 @echo ok. continuing in $(Concat(JUMP_ROOT_,libname))... @@\
601 @for d in $(Concat(JUMP_SUBDIRS_,libname)); do \
602 echo checking stub library in $$d...; \
603 (cd $$d ; $(MAKE) $(MFLAGS) do_JUMP_SA) || exit 1; \
604 echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
606 jumpsetup_1:: $(JUMP_DIR)/jump.funcs $(JUMP_DIR)/jump.vars \
607 $(JUMP_DIR)/jump.ignore $(JUMP_DIR)/jump.import @@\
609 $(JUMP_DIR)/jump.funcs: $(Concat(JUMP_FUNCS_,libname)) @@\
610 $(RM) $(JUMP_DIR)/jump.funcs @@\
611 cat $(Concat(JUMP_FUNCS_,libname)) | \
612 $(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
614 $(JUMP_DIR)/jump.vars: $(Concat(JUMP_VARS_,libname)) @@\
615 $(RM) $(JUMP_DIR)/jump.vars @@\
616 cat $(Concat(JUMP_VARS_,libname)) | \
617 $(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
619 $(JUMP_DIR)/jump.ignore: $(Concat(JUMP_IGNORE_,libname)) @@\
620 $(RM) $(JUMP_DIR)/jump.ignore @@\
621 cat $(Concat(JUMP_IGNORE_,libname)) | \
622 $(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
624 $(JUMP_DIR)/jump.import: $(JUMP_DIR)/stubs.import \
625 $(Concat(JUMP_IMPORT_,libname)) @@\
626 $(RM) $(JUMP_DIR)/jump.import @@\
627 cat $(JUMP_DIR)/stubs.import $(Concat(JUMP_IMPORT_,libname)) > $@ @@\
629 $(JUMP_DIR)/stubs.import: $(Concat(JUMP_STUBS_IMPORT_,libname)) @@\
630 $(RM) $(JUMP_DIR)/stubs.import @@\
631 nm --no-cplus $(Concat(JUMP_STUBS_IMPORT_,libname)) | grep '__GOT__' | \
632 sed 's/__GOT__/_/' > $@ @@\
634 down/mk_JUMP_AR: solist @@\
636 @if [ -s $(JUMP_DIR)/jump.log ]; then \
637 echo "Error: Leftover globals for shared lib"; \
639 (cd down; $(AR) up/$(JUMP_AR) solist) || exit 1 @@\
640 $(RANLIB) $(JUMP_AR) @@\
643 clean:: jumpclean @@\
645 jumpclean: jumpclean_$(JUMP_IS_HOST) @@\
646 $(RM) $(JUMP_SA) down/mk_JUMP_AR @@\
647 $(RM) -r $(JUMP_DIR) @@\
650 $(RM) down/mk_JUMP_SA_0 @@\
651 $(RM) $(JUMP_HOST)/$(JUMP_SA) @@\
654 $(RM) -r $(JUMP_SO) $(Concat(JUMP_DIR_,libname)) \ @@\
655 down/mk_JUMP_SA_1 down/mk_JUMP_SO_1 down/mk_JUMP_SO_2
656 # endif /* SharedLibraryTarget */
659 * InstallSharedLibrary - generate rules to install the shared library.
661 # ifndef InstallSharedLibrary
662 # define InstallSharedLibrary(libname,rev,dest) @@\
663 install:: $(JUMP_SA) $(JUMP_SO) @@\
664 MakeDir($(DESTDIR)dest) @@\
665 @if [ "$(JUMP_IS_HOST)" = YES ]; then \
666 (T=$(DESTDIR)dest/`echo $(JUMP_SO)|sed '/\(lib[^\.]*\.so\.[0-9]*\)\(\.[0-9]*\)\{1,2\}/\1/`;\
668 $(INSTALL) -s -c $(INSTSOLIBFLAGS) $(JUMP_SO) $(DESTDIR)dest; \
669 $(RM) $$T && $(LN) $(JUMP_SO) $$T); fi @@\
670 $(INSTALL) -c $(INSTLIBFLAGS) $(JUMP_SA) $(DESTDIR)dest
671 # endif /* InstallSharedLibrary */
674 * InstallSharedLibraryData - generate rules to install the shared library data
676 # ifndef InstallSharedLibraryData
677 # define InstallSharedLibraryData(libname,rev,dest)
678 # endif /* InstallSharedLibraryData */
680 #endif /* UseElfFormat */