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.44 2002/11/18 22:47:25 dawes Exp $
5
* Linux shared library rules (DLL & ELF versions)
7
#ifndef HasSharedLibraries
8
# define HasSharedLibraries YES
10
#ifndef ForceNormalLib
11
# define ForceNormalLib NO
15
# define SharedOldX NO
20
# if (LinuxCLibMajorVersion >= 5 && LinuxCLibMinorVersion >= 4) || LinuxCLibMajorVersion >= 6
21
# ifndef SpecialMalloc
22
# define SpecialMalloc NO
25
# ifndef UseInternalMalloc
26
# define UseInternalMalloc NO
31
# if LinuxCLibMajorVersion <= 5
33
* #define BaseShLibReqs -lc
35
* I don't want to use this since the normal ELF executables should
36
* be linked with libc.so. If it is not, i.e., static, the variables in
37
* libc.so which is loaded in because of the other shared libraries
38
* may have different values than the ones in the static ELF
39
* executables. That happens if the binaries are linked with libg.a
42
* If an ELF executable linked with libg.a or libc_p.a loads a shared
43
* object which needs libc.so via dlopen (), I think it should fail.
44
* It is a very bad idea. The moral story is DON'T USE dlopen () IN
45
* ELF EXECUTABLES LINKED WITH libg.a OR libc_p.a. H.J.
48
# define BaseShLibReqs
50
/* With GNU libc 2 this works fine. */
51
# define BaseShLibReqs -lc
54
# ifndef SharedDataSeparation
55
# define SharedDataSeparation NO
57
# ifndef SharedCodeDef
58
# define SharedCodeDef /**/
60
# ifndef SharedLibraryDef
61
# define SharedLibraryDef /**/
63
# ifndef ShLibIncludeFile
64
# define ShLibIncludeFile <lnxLib.tmpl>
66
# ifndef SharedLibraryLoadFlags
67
# define SharedLibraryLoadFlags -shared
69
# ifndef PositionIndependentCFlags
70
# define PositionIndependentCFlags -fPIC
72
# ifndef PositionIndependentCplusplusFlags
73
# define PositionIndependentCplusplusFlags -fPIC
75
# ifndef ExtraLoadFlags
76
# if LinuxBinUtilsMajorVersion >= 26
78
# if LinuxBinUtilsMajorVersion < 27
79
# define ExtraLoadFlags -Wl,-rpath-link,$(USRLIBDIRPATH)
82
# define ExtraLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR)
85
# define ExtraLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)
89
# if !defined(ShlibGlobalsFlags)
90
# define ShlibGlobalsFlags -Wl,-Bsymbolic
94
* InstallSharedLibrary - generate rules to install the shared library.
95
* NOTE: file must be executable, hence "INSTBINFLAGS"
97
# ifndef InstallSharedLibrary
98
# define InstallSharedLibrary(libname,rev,dest) @@\
99
install:: Concat(lib,libname.so.rev) @@\
100
MakeDir($(DESTDIR)dest) @@\
101
$(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\
102
@T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`;\
103
set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T @@\
104
@if $(SOSYMLINK); then (set -x; \
105
$(RM) Concat($(DESTDIR)dest/lib,libname.so); \ @@\
106
$(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)); fi
107
# endif /* InstallSharedLibrary */
110
* InstallSharedLibraryData - generate rules to install the shared library data
112
# ifndef InstallSharedLibraryData
113
# define InstallSharedLibraryData(libname,rev,dest)
114
# endif /* InstallSharedLibraryData */
118
* SharedLibraryTarget - generate rules to create a shared library;
119
* build it into a different name so that we do not hose people by having
120
* the library gone for long periods.
122
# ifndef SharedLibraryTarget
124
# define LinkBuildSonameLibrary(lib) true
126
# define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \
127
cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .)
130
# define SharedLibraryTarget(libname,rev,solist,down,up) @@\
131
AllTarget(Concat(lib,libname.so.rev)) @@\
133
Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\
135
@SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\
136
(cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
137
$(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
138
LinkBuildSonameLibrary($$SONAME) @@\
141
@if $(SOSYMLINK); then (set -x; \ @@\
142
$(RM) Concat(lib,libname.so); \ @@\
143
$(LN) $@ Concat(lib,libname.so)); fi @@\
144
LinkBuildLibrary($@) @@\
145
LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
148
@MAJREV=`expr rev : '\([^.]*\)'`; \ @@\
149
set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
150
$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
152
# endif /* SharedLibraryTarget */
155
* SharedDepLibraryTarget - generate rules to create a shared library.
157
# ifndef SharedDepLibraryTarget
159
# ifndef LinkBuildSonameLibrary
160
# define LinkBuildSonameLibrary(lib) true
163
# ifndef LinkBuildSonameLibrary
164
# define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \
165
cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .)
169
# define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up) @@\
170
AllTarget(Concat(lib,libname.so.rev)) @@\
172
Concat(lib,libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\
174
@SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\
175
(cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
176
$(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
177
LinkBuildSonameLibrary($$SONAME) @@\
180
@if $(SOSYMLINK); then (set -x; \ @@\
181
$(RM) Concat(lib,libname.so); \ @@\
182
$(LN) $@ Concat(lib,libname.so)); fi @@\
183
LinkBuildLibrary($@) @@\
184
LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
187
@MAJREV=`expr rev : '\([^.]*\)'`; \ @@\
188
set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
189
$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
191
#endif /* SharedDepLibraryTarget */
194
* SharedDepCplusplusLibraryTarget - generate rules to create a shared library.
196
#ifndef SharedDepCplusplusLibraryTarget
198
#ifndef LinkBuildSonameLibrary
199
#define LinkBuildSonameLibrary(lib) true
202
#ifndef LinkBuildSonameLibrary
203
#define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \
204
cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .)
208
#define SharedDepCplusplusLibraryTarget(libname,rev,deplist,solist,down,up) @@\
209
AllTarget(Concat(lib,libname.so.rev)) @@\
211
Concat(lib,libname.so.rev): deplist $(EXTRALIBRARYDEPS) @@\
213
@SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\
214
(cd down; $(CXX) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\
215
$(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\
216
LinkBuildSonameLibrary($$SONAME) @@\
219
@if $(SOSYMLINK); then (set -x; \ @@\
220
$(RM) Concat(lib,libname.so); \ @@\
221
$(LN) $@ Concat(lib,libname.so)); fi @@\
222
LinkBuildLibrary($@) @@\
223
LinkBuildLibraryMaybe(Concat(lib,libname.so),$(SOSYMLINK)) @@\
226
@MAJREV=`expr rev : '\([^.]*\)'`; \ @@\
227
set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\
228
$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)
230
#endif /* SharedDepCplusplusLibraryTarget */
232
# ifndef SharedDepModuleTarget
233
# define SharedDepModuleTarget(name,deps,solist) @@\
238
$(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
245
# endif /* SharedDepModuleTarget */
247
# ifndef SharedDriModuleTarget
248
# define SharedDriModuleTarget(name,deps,solist) @@\
253
@(echo 'DRI_MODULE { global: __dri*; local: *; };' > $@.map) @@\
254
$(CC) -o $@~ -Wl,--version-script=$@.map $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\
262
# endif /* SharedDriModuleTarget */
265
* SharedLibraryDataTarget - generate rules to create shlib data file;
267
# ifndef SharedLibraryDataTarget
268
# define SharedLibraryDataTarget(libname,rev,salist)
269
# endif /* SharedLibraryTarget */
271
#else /* UseElfFormat */
273
# ifndef SharedDataSeparation
274
# define SharedDataSeparation NO
276
# ifndef SharedCodeDef
277
# define SharedCodeDef /**/
279
# ifndef SharedLibraryDef
280
# define SharedLibraryDef /**/
282
# ifndef ShLibIncludeFile
283
# define ShLibIncludeFile <lnxLib.tmpl>
285
# ifndef SharedLibraryLoadFlags
286
# define SharedLibraryLoadFlags /**/
288
# ifndef PositionIndependentCFlags
289
# define PositionIndependentCFlags -B/usr/bin/jump
293
* These definitions are now extended to work with the X sources and
294
* external sources wishing to build shared libs.
296
* A library can create it's own shlibs (.so) or can be incorporated into
297
* another "host" lib. All libraries generate stub (.sa) files.
298
* A "host" lib does all the work to generate the stubs for itself and its
299
* "guests", invoking the "guest" Makefiles to create the objects for
300
* inclusion into the "host" shlib. A "guest" lib will ask the "host" to
301
* create the stubfiles, then copy its own into its directory.
302
* Most external libs are "host" libs; the concept of "guest" is a holdover
303
* from older libs during the days of scarce shared library address space.
305
* To create a simple "host" shared lib, Xfoo, define:
307
* JUMP_ROOT_Xfoo = <source directory>
308
* JUMP_IS_HOST_Xfoo = YES
309
* JUMP_STUBLIBS_Xfoo = libXfoo.sa
310
* JUMP_DIR_Xfoo = $(JUMP_ROOT_Xfoo)/shared <work directory>
311
* JUMP_DEFS_Xfoo = -DFOO <defs for jump files>
312
* JUMP_VARS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_vars <see DLL docs>
313
* JUMP_FUNCS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_funcs <see DLL docs>
314
* JUMP_IGNORE_Xfoo = $(JUMP_ROOT_Xfoo)/jump_ignore <see DLL docs>
315
* JUMP_EXPORT_Xfoo = $(JUMP_DIR_Xfoo)/jump.vars <exported symbols>
316
* JUMP_IMPORT_Xfoo = $(JUMP_EXPORT_Xbar) <imported symbols>
317
* JUMP_ADDRESS_Xfoo = 0xXXXXXXXX <fill in with address>
318
* JUMP_JUMPTABLESIZE_Xfoo = 0x4000 <adjust if necessary>
319
* JUMP_GOTSIZE_Xfoo = 4096 <adjust if necessary>
320
* JUMP_STUBNAMES_Xfoo = libXfoo <and others>
321
* JUMP_STUBS_IMPORT_Xfoo = /usr/lib/libc.sa <and others>
322
* JUMP_LDLIBS_Xfoo = `$(CC) --print-libgcc-file-name` -lc <and others>
324
* To create a complex "host", you need to add
325
* JUMP_SIBARS_Xt = jump/libXbar.a~ <and others>
326
* These are the archives of the shared objects of the "guest" libs. They
327
* need to be added to the JUMP_LDLIBS_Xfoo lines.
329
* For further clarification, study the definitions of libXaw, a simple "host"
330
* lib, libXt, a complex "host" lib, and libXmu, one of libXts "guests".
332
* As a hint of how to start (with the DLL docs), touch jump_vars, jump_funcs
333
* and jump_ignore, then compile. Then massage the jump.vars and jump.funcs
334
* files in the shared subdirectory into jump_xxx files.
337
# ifndef UseInstalled
338
XCOMM These are only needed to build the server
341
LIBC_SA = /usr/i486-linuxaout/lib/libc.sa
342
LIBM_SA = /usr/i486-linuxaout/lib/libm.sa
344
LIBC_SA = /usr/lib/libc.sa
345
LIBM_SA = /usr/lib/libm.sa
348
JUMP_LDLIBS_libc = `$(CC) --print-libgcc-file-name` -lc
350
XCOMM libX11.so (X11, SM, ICE)
351
JUMP_ROOT_X11 = $(XLIBSRC)
352
JUMP_IS_HOST_X11 = YES
353
JUMP_STUBLIBS_X11 = libX11.sa libSM.sa libICE.sa
354
JUMP_SIBDIRS_X11 = $(JUMP_ROOT_SM) $(JUMP_ROOT_ICE)
355
JUMP_DIR_X11 = $(JUMP_ROOT_X11)/shared
356
JUMP_DEFS_X11 = $(XDMAUTHDEFS) $(XKB_DEFINES)
357
JUMP_VARS_X11 = $(JUMP_ROOT_X11)/jump_vars
358
JUMP_FUNCS_X11 = $(JUMP_ROOT_X11)/jump_funcs
359
JUMP_IGNORE_X11 = $(JUMP_ROOT_X11)/jump_ignore
360
JUMP_EXPORT_X11 = $(JUMP_DIR_X11)/jump.vars
361
JUMP_ADDRESS_X11 = 0x60200000
362
JUMP_JUMPTABLESIZE_X11 = 0x4000
363
JUMP_GOTSIZE_X11 = 4096
364
JUMP_STUBNAMES_X11 = libX11 libSM libICE
365
JUMP_STUBS_IMPORT_X11 = $(LIBC_SA)
366
JUMP_SIBARS_X11 = jump/libSM.a~ jump/libICE.a~
367
JUMP_LDLIBS_X11 = $(JUMP_SIBARS_X11) $(JUMP_LDLIBS_libc)
369
XCOMM libSM (part of libX11.so)
370
JUMP_ROOT_SM = $(SMSRC)
372
JUMP_HOST_SM = $(JUMP_ROOT_X11)
373
JUMP_DIR_SM = $(JUMP_DIR_X11)
375
XCOMM libICE (part of libX11.so)
376
JUMP_ROOT_ICE = $(ICESRC)
377
JUMP_IS_HOST_ICE = NO
378
JUMP_HOST_ICE = $(JUMP_ROOT_X11)
379
JUMP_DIR_ICE = $(JUMP_DIR_X11)
381
XCOMM libXt.so (Xt, Xmu, Xext, Xi, Xtst, Xp)
382
JUMP_ROOT_Xt = $(TOOLKITSRC)
383
JUMP_IS_HOST_Xt = YES
384
JUMP_STUBLIBS_Xt = libXt.sa libXmu.sa libXext.sa libXi.sa libXtst.sa libXp.sa
385
JUMP_SUBDIRS_Xt = $(JUMP_ROOT_X11)
386
JUMP_SIBDIRS_Xt = $(JUMP_ROOT_Xmu) $(JUMP_ROOT_Xext) \
387
$(JUMP_ROOT_Xi) $(JUMP_ROOT_Xtst) $(JUMP_ROOT_Xp)
388
JUMP_DIR_Xt = $(JUMP_ROOT_Xt)/shared
389
JUMP_VARS_Xt = $(JUMP_ROOT_Xt)/jump_vars
390
JUMP_FUNCS_Xt = $(JUMP_ROOT_Xt)/jump_funcs
391
JUMP_IGNORE_Xt = $(JUMP_ROOT_Xt)/jump_ignore
392
JUMP_EXPORT_Xt = $(JUMP_DIR_Xt)/jump.vars
393
JUMP_IMPORT_Xt = $(JUMP_EXPORT_X11)
394
JUMP_ADDRESS_Xt = 0x602a0000
395
JUMP_JUMPTABLESIZE_Xt = 0x4000
396
JUMP_GOTSIZE_Xt = 4096
397
JUMP_STUBNAMES_Xt = libXt libXmu libXext libXi libXtst libXp
398
JUMP_STUBS_IMPORT_Xt = $(JUMP_STUBS_IMPORT_X11)
399
JUMP_SIBARS_Xt = jump/libXmu.a~ jump/libXext.a~ jump/libXi.a~ jump/libXtst.a~ jump/libXp.a~
400
JUMP_LDLIBS_Xt = $(JUMP_SIBARS_Xt) $(JUMP_ROOT_ICE)/libICE.sa \
401
$(JUMP_ROOT_SM)/libSM.sa $(JUMP_ROOT_X11)/libX11.sa $(JUMP_LDLIBS_libc)
403
XCOMM libXmu (part of libXt.so)
404
JUMP_ROOT_Xmu = $(XMUSRC)
405
JUMP_IS_HOST_Xmu = NO
406
JUMP_HOST_Xmu = $(JUMP_ROOT_Xt)
407
JUMP_DIR_Xmu = $(JUMP_DIR_Xt)
409
XCOMM libXext (part of libXt.so)
410
JUMP_ROOT_Xext = $(XEXTLIBSRC)
411
JUMP_IS_HOST_Xext = NO
412
JUMP_HOST_Xext = $(JUMP_ROOT_Xt)
413
JUMP_DIR_Xext = $(JUMP_DIR_Xt)
415
XCOMM libXi (part of libXt.so)
416
JUMP_ROOT_Xi = $(XILIBSRC)
418
JUMP_HOST_Xi = $(JUMP_ROOT_Xt)
419
JUMP_DIR_Xi = $(JUMP_DIR_Xt)
421
XCOMM libXtst (part of libXt.so)
422
JUMP_ROOT_Xtst = $(XTESTLIBSRC)
423
JUMP_IS_HOST_Xtst = NO
424
JUMP_HOST_Xtst = $(JUMP_ROOT_Xt)
425
JUMP_DIR_Xtst = $(JUMP_DIR_Xt)
427
XCOMM libXp (part of libXt.so)
428
JUMP_ROOT_Xp = $(XPLIBSRC)
430
JUMP_HOST_Xp = $(JUMP_ROOT_Xt)
431
JUMP_DIR_Xp = $(JUMP_DIR_Xt)
433
XCOMM libXaw.so (Xaw)
434
JUMP_ROOT_Xaw = $(AWIDGETSRC)
435
JUMP_IS_HOST_Xaw = YES
436
JUMP_STUBLIBS_Xaw = libXaw.sa
437
JUMP_SUBDIRS_Xaw = $(JUMP_ROOT_Xt)
438
JUMP_DIR_Xaw = $(JUMP_ROOT_Xaw)/shared
439
JUMP_VARS_Xaw = $(JUMP_ROOT_Xaw)/jump_vars
440
JUMP_FUNCS_Xaw = $(JUMP_ROOT_Xaw)/jump_funcs
441
JUMP_IGNORE_Xaw = $(JUMP_ROOT_Xaw)/jump_ignore
442
JUMP_EXPORT_Xaw = $(JUMP_DIR_Xaw)/jump.vars
443
JUMP_IMPORT_Xaw = $(JUMP_EXPORT_Xt) $(JUMP_EXPORT_X11)
444
JUMP_ADDRESS_Xaw = 0x60300000
445
JUMP_JUMPTABLESIZE_Xaw = 0x4000
446
JUMP_GOTSIZE_Xaw = 4096
447
JUMP_STUBNAMES_Xaw = libXaw
448
JUMP_STUBS_IMPORT_Xaw = $(JUMP_STUBS_IMPORT_X11)
449
JUMP_LDLIBS_Xaw = $(JUMP_ROOT_Xt)/libXt.sa $(JUMP_ROOT_Xt)/libXmu.sa \
450
$(JUMP_ROOT_Xt)/libXext.sa $(JUMP_ROOT_X11)/libX11.sa \
454
JUMP_ROOT_PEX5 = $(PEXLIBSRC)
455
JUMP_IS_HOST_PEX5 = YES
456
JUMP_STUBLIBS_PEX5 = libPEX5.sa
457
JUMP_SUBDIRS_PEX5 = $(JUMP_ROOT_X11)
458
JUMP_DIR_PEX5 = $(JUMP_ROOT_PEX5)/shared
459
JUMP_VARS_PEX5 = $(JUMP_ROOT_PEX5)/jump_vars
460
JUMP_FUNCS_PEX5 = $(JUMP_ROOT_PEX5)/jump_funcs
461
JUMP_IGNORE_PEX5 = $(JUMP_ROOT_PEX5)/jump_ignore
462
JUMP_EXPORT_PEX5 = $(JUMP_DIR_PEX5)/jump.vars
463
JUMP_IMPORT_PEX5 = $(JUMP_EXPORT_X11)
464
JUMP_ADDRESS_PEX5 = 0x60b00000
465
JUMP_JUMPTABLESIZE_PEX5 = 0x4000
466
JUMP_GOTSIZE_PEX5 = 4096
467
JUMP_STUBNAMES_PEX5 = libPEX5
468
JUMP_STUBS_IMPORT_PEX5 = $(JUMP_STUBS_IMPORT_X11) $(LIBM_SA)
469
JUMP_LDLIBS_PEX5 = $(JUMP_ROOT_X11)/libX11.sa $(JUMP_LDLIBS_libc) -lm
472
JUMP_ROOT_XIE = $(XIELIBSRC)
473
JUMP_IS_HOST_XIE = YES
474
JUMP_STUBLIBS_XIE = libXIE.sa
475
JUMP_SUBDIRS_XIE = $(JUMP_ROOT_X11)
476
JUMP_DIR_XIE = $(JUMP_ROOT_XIE)/shared
477
JUMP_VARS_XIE = $(JUMP_ROOT_XIE)/jump_vars
478
JUMP_FUNCS_XIE = $(JUMP_ROOT_XIE)/jump_funcs
479
JUMP_IGNORE_XIE = $(JUMP_ROOT_XIE)/jump_ignore
480
JUMP_EXPORT_XIE = $(JUMP_DIR_XIE)/jump.vars
481
JUMP_IMPORT_XIE = $(JUMP_EXPORT_X11)
482
JUMP_ADDRESS_XIE = 0x60be0000
483
JUMP_JUMPTABLESIZE_XIE = 0x4000
484
JUMP_GOTSIZE_XIE = 4096
485
JUMP_STUBNAMES_XIE = libXIE
486
JUMP_STUBS_IMPORT_XIE = $(JUMP_STUBS_IMPORT_X11) $(LIBM_SA)
487
JUMP_LDLIBS_XIE = $(JUMP_ROOT_X11)/libX11.sa $(JUMP_LDLIBS_libc) -lm
489
# endif /* !UseInstalled */
492
* SharedLibraryDataTarget - generate rules to create shared data file
494
# ifndef SharedLibraryDataTarget
495
# define SharedLibraryDataTarget(libname,rev,salist)
499
* SharedLibraryTarget - generate rules to create a shared library;
500
* There are two basic flavors of libs: self-generating, which create
501
* their own (and possibly other) libs, and hosted, which rely on another
502
* lib for all the work.
504
# ifndef SharedLibraryTarget
505
# define SharedLibraryTarget(libname,rev,solist,down,up) @@\
506
XCOMM This logic is such to compile the libs in their proper order, @@\
507
XCOMM remain dependent on subsidiary libs, and yet minimize local work @@\
510
JUMP_LIB=Concat(lib,libname) @@\
512
XCOMM this is needed for newer gnumake versions @@\
513
export JUMP_DIR JUMP_LIB @@\
515
JUMP_IS_HOST=$(Concat(JUMP_IS_HOST_,libname)) @@\
516
JUMP_AR=$(JUMP_DIR)/Concat(lib,libname.a~) @@\
517
JUMP_SA=Concat(lib,libname.sa) @@\
518
JUMP_SO=Concat(lib,libname.so.rev) @@\
520
JUMP_HOST=$(Concat(JUMP_HOST_,libname)) @@\
522
INSTSOLIBFLAGS=-m 0555 @@\
524
AllTarget($(BUILDLIBDIR)/$(JUMP_SA)) @@\
526
$(BUILDLIBDIR)/$(JUMP_SA): $(JUMP_SA) @@\
527
LinkBuildLibrary($(JUMP_SA)) @@\
529
$(JUMP_SA) $(Concat(JUMP_STUBLIBS_,libname)) do_JUMP_SA: \
530
down/mk_JUMP_SA_$(JUMP_IS_HOST) @@\
532
down/mk_JUMP_SA_0:: mk_JUMP_HOST @@\
534
down/mk_JUMP_SA_0:: $(JUMP_HOST)/$(JUMP_SA) @@\
536
$(LN) $(JUMP_HOST)/$(JUMP_SA) $(JUMP_SA) @@\
539
down/mk_JUMP_SA_1:: $(JUMP_SO) @@\
541
down/mk_JUMP_SA_1:: down/mk_JUMP_SO_2 @@\
542
$(RM) $(Concat(JUMP_STUBLIBS_,libname)) @@\
543
mkstubs -v rev -l $(JUMP_LIB) \
544
-a $(Concat(JUMP_ADDRESS_,libname)) \
545
-j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
546
-g $(Concat(JUMP_GOTSIZE_,libname)) \
547
-- $(Concat(JUMP_STUBNAMES_,libname)) @@\
548
verify-shlib -l $(JUMP_SO) \
549
$(Concat(JUMP_STUBLIBS_,libname)) @@\
550
$(MV) verify.out $(JUMP_DIR) @@\
554
@echo checking stub library $(JUMP_SA) in $(JUMP_HOST)... @@\
555
@(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) $(JUMP_SA)) || exit 1 @@\
556
@echo ok. continuing in $(Concat(JUMP_ROOT_,libname))... @@\
558
$(JUMP_SO): down/mk_JUMP_SO_$(JUMP_IS_HOST) @@\
560
down/mk_JUMP_SO_0: @@\
562
down/mk_JUMP_SO_1:: $(JUMP_AR) mk_JUMP_SIBDIRS down/mk_JUMP_SO_2 @@\
564
down/mk_JUMP_SO_2: down/mk_JUMP_AR $(Concat(JUMP_SIBARS_,libname)) @@\
566
mkimage -f -v rev -l $(JUMP_LIB) \
567
-a $(Concat(JUMP_ADDRESS_,libname)) \
568
-j $(Concat(JUMP_JUMPTABLESIZE_,libname)) \
569
-g $(Concat(JUMP_GOTSIZE_,libname)) \
570
-- $(JUMP_AR) $(Concat(JUMP_LDLIBS_,libname)) @@\
571
$(RM) $(JUMP_DIR)/__jump.s $(JUMP_DIR)/__jump.o @@\
572
LinkBuildLibrary($(JUMP_SO)) @@\
576
@for d in $(Concat(JUMP_SIBDIRS_,libname)); do \
577
echo checking ar library in $$d...; \
578
(cd $$d ; $(MAKE) $(MFLAGS) fastdo_JUMP_AR) || exit 1; \
579
echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
581
fastdo_JUMP_AR: $(JUMP_DIR) down/mk_JUMP_AR @@\
583
$(JUMP_AR) do_JUMP_AR:: jumpsetup down/mk_JUMP_AR @@\
585
jumpsetup: $(JUMP_DIR) jumpsetup_$(JUMP_IS_HOST) @@\
589
LibMkdir($(Concat(JUMP_DIR_,libname))) @@\
590
$(LN) $(Concat(JUMP_DIR_,libname)) jump @@\
593
@echo doing jump setup in host $(JUMP_HOST)... @@\
594
@(cd $(JUMP_HOST); $(MAKE) $(MFLAGS) jumpsetup) || exit 1 @@\
595
@echo ok. continuing in $(Concat(JUMP_ROOT_,libname))... @@\
598
@for d in $(Concat(JUMP_SUBDIRS_,libname)); do \
599
echo checking stub library in $$d...; \
600
(cd $$d ; $(MAKE) $(MFLAGS) do_JUMP_SA) || exit 1; \
601
echo ok. continuing in $(Concat(JUMP_ROOT_,libname))...;done@@\
603
jumpsetup_1:: $(JUMP_DIR)/jump.funcs $(JUMP_DIR)/jump.vars \
604
$(JUMP_DIR)/jump.ignore $(JUMP_DIR)/jump.import @@\
606
$(JUMP_DIR)/jump.funcs: $(Concat(JUMP_FUNCS_,libname)) @@\
607
$(RM) $(JUMP_DIR)/jump.funcs @@\
608
cat $(Concat(JUMP_FUNCS_,libname)) | \
609
$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
611
$(JUMP_DIR)/jump.vars: $(Concat(JUMP_VARS_,libname)) @@\
612
$(RM) $(JUMP_DIR)/jump.vars @@\
613
cat $(Concat(JUMP_VARS_,libname)) | \
614
$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
616
$(JUMP_DIR)/jump.ignore: $(Concat(JUMP_IGNORE_,libname)) @@\
617
$(RM) $(JUMP_DIR)/jump.ignore @@\
618
cat $(Concat(JUMP_IGNORE_,libname)) | \
619
$(CPP) $(ALLDEFINES) $(Concat(JUMP_DEFS_,libname)) > $@ @@\
621
$(JUMP_DIR)/jump.import: $(JUMP_DIR)/stubs.import \
622
$(Concat(JUMP_IMPORT_,libname)) @@\
623
$(RM) $(JUMP_DIR)/jump.import @@\
624
cat $(JUMP_DIR)/stubs.import $(Concat(JUMP_IMPORT_,libname)) > $@ @@\
626
$(JUMP_DIR)/stubs.import: $(Concat(JUMP_STUBS_IMPORT_,libname)) @@\
627
$(RM) $(JUMP_DIR)/stubs.import @@\
628
nm --no-cplus $(Concat(JUMP_STUBS_IMPORT_,libname)) | grep '__GOT__' | \
629
sed 's/__GOT__/_/' > $@ @@\
631
down/mk_JUMP_AR: solist @@\
633
@if [ -s $(JUMP_DIR)/jump.log ]; then \
634
echo "Error: Leftover globals for shared lib"; \
636
(cd down; $(AR) up/$(JUMP_AR) solist) || exit 1 @@\
637
$(RANLIB) $(JUMP_AR) @@\
640
clean:: jumpclean @@\
642
jumpclean: jumpclean_$(JUMP_IS_HOST) @@\
643
$(RM) $(JUMP_SA) down/mk_JUMP_AR @@\
644
$(RM) -r $(JUMP_DIR) @@\
647
$(RM) down/mk_JUMP_SA_0 @@\
648
$(RM) $(JUMP_HOST)/$(JUMP_SA) @@\
651
$(RM) -r $(JUMP_SO) $(Concat(JUMP_DIR_,libname)) \ @@\
652
down/mk_JUMP_SA_1 down/mk_JUMP_SO_1 down/mk_JUMP_SO_2
653
# endif /* SharedLibraryTarget */
656
* InstallSharedLibrary - generate rules to install the shared library.
658
# ifndef InstallSharedLibrary
659
# define InstallSharedLibrary(libname,rev,dest) @@\
660
install:: $(JUMP_SA) $(JUMP_SO) @@\
661
MakeDir($(DESTDIR)dest) @@\
662
@if [ "$(JUMP_IS_HOST)" = YES ]; then \
663
(T=$(DESTDIR)dest/`echo $(JUMP_SO)|sed 's/\.[^\.]*$$//'`;\
665
$(INSTALL) -s -c $(INSTSOLIBFLAGS) $(JUMP_SO) $(DESTDIR)dest; \
666
$(RM) $$T && $(LN) $(JUMP_SO) $$T); fi @@\
667
$(INSTALL) -c $(INSTLIBFLAGS) $(JUMP_SA) $(DESTDIR)dest
668
# endif /* InstallSharedLibrary */
671
* InstallSharedLibraryData - generate rules to install the shared library data
673
# ifndef InstallSharedLibraryData
674
# define InstallSharedLibraryData(libname,rev,dest)
675
# endif /* InstallSharedLibraryData */
677
#endif /* UseElfFormat */