Home | History | Annotate | Download | only in lib
      1 #
      2 # CDDL HEADER START
      3 #
      4 # The contents of this file are subject to the terms of the
      5 # Common Development and Distribution License (the License).
      6 # You may not use this file except in compliance with the License.
      7 #
      8 # You can obtain a copy of the license at usr/src/CDDL.txt
      9 # or http://www.opensolaris.org/os/licensing.
     10 # See the License for the specific language governing permissions
     11 # and limitations under the License.
     12 #
     13 # When distributing Covered Code, include this CDDL HEADER in each
     14 # file and include the License file at usr/src/CDDL.txt.
     15 # If applicable, add the following below this CDDL HEADER, with the
     16 # fields enclosed by brackets [] replaced with your own identifying
     17 # information: Portions Copyright [yyyy] [name of copyright owner]
     18 #
     19 # CDDL HEADER END
     20 #
     21 
     22 #
     23 #ident	"@(#)Makefile.lib	1.6	07/11/18 SMI"
     24 #
     25 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     26 # Use is subject to license terms.
     27 #
     28 # lib/Makefile.lib
     29 # Definitions common to libraries.
     30 #
     31 # include global definitions; SRC should be defined in the shell.
     32 #
     33 
     34 include		$(SRC)/Makefile.master
     35 
     36 TMPLDIR=	.
     37 
     38 LIBS=		$(LIBRARY) $(LIBRARYCCC)
     39 MACHLIBS=	$(LIBS:%=$(MACH)/%)
     40 MACHLIBS64=	$(LIBS:%=$(MACH64)/%)
     41 PLIB=
     42 PIC_PLIB=
     43 DYNLIB=		$(LIBRARY:.a=.so$(VERS))
     44 DYNLIBPSR=	$(LIBRARY:.a=_psr.so$(VERS))
     45 DYNLIBCCC=	$(LIBRARYCCC:.a=.so$(VERS))
     46 LIBLINKS=	$(LIBRARY:.a=.so)
     47 LIBLINKSCCC=	$(LIBRARYCCC:.a=.so)
     48 LIBNAME=	$(LIBRARY:lib%.a=%)
     49 LIBLINKPATH=
     50 LIBNULL=	null.a
     51 ROOTPLIB=
     52 ROOTPIC_PLIB=
     53 ROOTPIC_PLIBLINK=
     54 ROOTPIC_PLIB64=
     55 ROOTPIC_PLIB64LINK=
     56 
     57 LINTLIB=	llib-l$(LIBNAME).ln
     58 LINTFLAGS=	-uaxs
     59 LINTFLAGS64=	-uaxs
     60 LINTOUT=	lint.out
     61 ARFLAGS=	r
     62 SONAME=		$(DYNLIB)
     63 # For most libraries, we should be able to resolve all symbols at link time,
     64 # either within the library or as dependencies, all text should be pure, and
     65 # combining relocations into one relocation table reduces startup costs.
     66 # All options are tunable to allow overload/omission from lower makefiles.
     67 ZDEFS=          -z defs
     68 ZTEXT=          -z text
     69 ZCOMBRELOC=	-z combreloc
     70 HSONAME=	-h $(SONAME)
     71 DYNFLAGS=	$(HSONAME) $(ZTEXT) $(ZDEFS) $(ZCOMBRELOC) $(PMAP)
     72 
     73 LDLIBS=		$(LDLIBS.lib)
     74 
     75 OBJS=		$(OBJECTS:%=objs/%)
     76 PROFS=		$(OBJECTS:%=profs/%)
     77 PICS=		$(OBJECTS:%=pics/%)
     78 PIC_PROFS=	$(OBJECTS:%=pic_profs/%)
     79 
     80 # Declare that all library .o's can all be made in parallel.
     81 # The DUMMY target is for those instances where OBJS, PROFS and PICS
     82 # are empty (to avoid an unconditional .PARALLEL declaration).
     83 .PARALLEL:	$(OBJS) $(PROFS) $(PICS) $(PIC_PROFS) $(LINTFILES) DUMMY
     84 
     85 # default value for "portable" source
     86 SRCS=		$(OBJECTS:.o=.c)
     87 
     88 # default build of an archive and a shared object,
     89 # overridden locally when extra processing is needed
     90 BUILD.AR=	$(AR) $(ARFLAGS) $@ $(AROBJS)
     91 BUILD.SO=	$(CC) -o $@ -G $(STRIPFLAG) $(DYNFLAGS) $(PICS) $(LDLIBS)
     92 BUILDCCC.SO=	$(CCC) -o $@ -G $(STRIPFLAG) $(DYNFLAGS) $(PICS) $(LDLIBS) $(LIBCC)
     93 
     94 # default dynamic library symlink
     95 INS.liblink=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKS)$(VERS) $@
     96 INS.liblinkccc=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKSCCC)$(VERS) $@
     97 
     98 # default 64-bit dynamic library symlink
     99 INS.liblink64=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKS)$(VERS) $@
    100 INS.liblinkccc64=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKSCCC)$(VERS) $@
    101 
    102 # Handle different PIC models on different ISAs
    103 # (May be overridden by lower-level Makefiles)
    104 
    105 sparc_C_PICFLAGS =	-K pic
    106 i386_C_PICFLAGS =	-K pic
    107 sparcv9_C_PICFLAGS =	-K pic
    108 
    109 # should be -K pic but the CC driver is currently broken
    110 sparc_CC_PICFLAGS =	-pic
    111 i386_CC_PICFLAGS = 	-pic
    112 sparcv9_CC_PICFLAGS =	-KPIC
    113 CC_PICFLAGS = $($(MACH)_CC_PICFLAGS)
    114 
    115 # conditional assignments
    116 
    117 $(OBJS)  :=	sparc_CFLAGS += -xregs=no%appl
    118 $(PROFS) :=	sparc_CFLAGS += -xregs=no%appl
    119 $(PROFS) :=	CFLAGS += -p
    120 
    121 $(PICS)  :=	sparc_CFLAGS += -xregs=no%appl $(sparc_C_PICFLAGS)
    122 $(PICS)  :=	i386_CFLAGS += $(i386_C_PICFLAGS)
    123 $(PICS)  :=	sparcv9_CFLAGS += -xregs=no%appl $(sparcv9_C_PICFLAGS)
    124 # should be -K pic but the CC driver is currently broken
    125 $(PICS)  :=	CPPFLAGS += -DPIC -D_TS_ERRNO
    126 $(PICS)  :=	sparcv9_CCFLAGS += -xregs=no%appl $(CC_PICFLAGS)
    127 $(PICS)  :=	sparc_CCFLAGS += $(CC_PICFLAGS)
    128 
    129 $(PIC_PROFS) := sparc_CFLAGS += -xregs=no%appl -K pic
    130 $(PIC_PROFS) := i386_CFLAGS += -K pic
    131 $(PIC_PROFS) := sparcv9_CFLAGS += -xregs=no%appl -K PIC
    132 $(PIC_PROFS) := CFLAGS += -p
    133 $(PIC_PROFS) := CPPFLAGS += -DPIC -D_TS_ERRNO
    134 $(PIC_PLIB) := BUILD.SO = $(CC) -o $@ -p -G $(DYNFLAGS) \
    135 				-M ../../mapfile_profile \
    136 				$(PIC_PROFS) $(LDLIBS)
    137 
    138 $(LINTLIB):=	LOG = -DLOGGING
    139 $(LIBRARY):=	AROBJS = $(OBJS)
    140 $(LIBRARY):=	DIR = objs
    141 $(DYNLIB):=	DIR = pics
    142 $(DYNLIBCCC):=	DIR = pics
    143 
    144 SONAMECCC=	$(DYNLIBCCC)
    145 HSONAMECCC=	-h $(SONAMECCC)
    146 $(DYNLIBCCC):=	DYNFLAGS = $(HSONAMECCC) $(ZTEXT) $(ZDEFS) $(ZCOMBRELOC) \
    147 		-norunpath -nolib
    148 
    149 # build rule for "portable" source
    150 objs/%.o profs/%.o pic_profs/%.o pics/%.o: %.c
    151 	$(COMPILE.c) -o $@ $<
    152 	$(POST_PROCESS_O)
    153 
    154 objs/%.o:= TMPLDIR=objs
    155 pics/%.o:= TMPLDIR=pics
    156 profs/%.o:= TMPLDIR=profs
    157 
    158 objs/%.o profs/%.o pics/%.o: %.cc
    159 	$(COMPILE.cc) -o $@ $<
    160 	$(POST_PROCESS_O)
    161 
    162 objs/%.o profs/%.o pics/%.o: %.c
    163 	$(COMPILE.c) -o $@ $<
    164 	$(POST_PROCESS_O)
    165 
    166 .PRECIOUS: $(LIBS) $(PLIB)
    167 
    168 #
    169 # Default to 32bit
    170 #
    171 CLASS=		32
    172 
    173 ROOTCLUSTLIBDIR=	$(VROOT)/usr/cluster/lib
    174 ROOTCLUSTINC=		$(VROOT)/usr/cluster/include
    175 ROOTCLUSTHDRDIR=	$(ROOTCLUSTINC)
    176 ROOTCLUSTLIBDIR64=	$(VROOT)/usr/cluster/lib/$(MACH64)
    177 ROOTRGMLIBDIR64=	$(VROOT)/usr/cluster/lib/rgm/$(MACH64)
    178 ROOTCLUSTLIBS=		$(LIBS:%=$(ROOTCLUSTLIBDIR)/%)
    179 ROOTCLUSTLIBS64=	$(LIBS:%=$(ROOTCLUSTLIBDIR64)/%)
    180 ROOTCLUSTLINKS=		$(ROOTCLUSTLIBDIR)/$(LIBLINKS)
    181 ROOTCLUSTLINKS64=	$(ROOTCLUSTLIBDIR64)/$(LIBLINKS)
    182 ROOTCLUSTLINKSCCC=	$(ROOTCLUSTLIBDIR)/$(LIBLINKSCCC)
    183 ROOTCLUSTLINKSCCC64=	$(ROOTCLUSTLIBDIR64)/$(LIBLINKSCCC)
    184 ROOTOPTLIBDIR=		$(VROOT)/opt/$(PKGNAME)/lib
    185 ROOTOPTLIBDIR64=	$(VROOT)/opt/$(PKGNAME)/lib/$(MACH64)
    186 ROOTOPTLIBS=		$(LIBS:%=$(ROOTOPTLIBDIR)/%)
    187 ROOTOPTLIBS64=		$(LIBS:%=$(ROOTOPTLIBDIR64)/%)
    188 ROOTOPTLINKS=		$(ROOTOPTLIBDIR)/$(LIBLINKS)
    189 ROOTOPTLINKS64=		$(ROOTOPTLIBDIR64)/$(LIBLINKS)
    190 
    191 # default dynamic library symlink
    192 INS.libclustlink=	-$(RM) $@; \
    193 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKS)$(VERS) $@
    194 INS.libclustsclink=	-$(RM) $@; \
    195 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKS)$(VERS) $@
    196 INS.libclustlinkccc= -$(RM) $@; \
    197 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKSCCC)$(VERS) $@
    198 
    199 # default 64-bit dynamic library symlink
    200 INS.libclustlink64=	-$(RM) $@; \
    201 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKS)$(VERS) $@
    202 INS.libclustsclink64=	-$(RM) $@; \
    203 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKS)$(VERS) $@
    204 INS.libclustlinkccc64=	-$(RM) $@; \
    205 	$(SYMLINK) $(LIBCLUSTLINKPATH)$(LIBLINKSCCC)$(VERS) $@
    206 
    207 INS.liboptlink=    -$(RM) $@; \
    208 	$(SYMLINK) $(LIBOPTLINKPATH)$(LIBLINKS)$(VERS) $@
    209 INS.liboptlink64=  -$(RM) $@; \
    210 	$(SYMLINK) $(LIBOPTLINKPATH)$(LIBLINKS)$(VERS) $@
    211 
    212 # Geo libraries
    213 ROOTCLUSTGEOLIBDIR=	$(VROOT)/usr/cluster/lib/geo/lib
    214 ROOTCLUSTGEOLIBDIR64=	$(VROOT)/usr/cluster/lib/geo/lib/$(MACH64)
    215 ROOTCLUSTGEOLIBS=	$(LIBS:%=$(ROOTCLUSTGEOLIBDIR)/%)
    216 ROOTCLUSTGEOLIBS64=	$(LIBS:%=$(ROOTCLUSTGEOLIBDIR64)/%)
    217 ROOTCLUSTGEOLINKS=	$(ROOTCLUSTGEOLIBDIR)/$(LIBLINKS)
    218 ROOTCLUSTGEOLINKS64=	$(ROOTCLUSTGEOLIBDIR64)/$(LIBLINKS)
    219 LIBCLUSTGEOLINKPATH=
    220 INS.libclustgeolink=    -$(RM) $@; \
    221 	$(SYMLINK) $(LIBCLUSTGEOLINKPATH)$(LIBLINKS)$(VERS) $@
    222 INS.libclutgeolink64=  -$(RM) $@; \
    223 	$(SYMLINK) $(LIBCLUSTGEOLINKPATH)$(LIBLINKS)$(VERS) $@
    224 
    225 LINTFLAGS=	$(LINTDEFS) -I$(CCC_INCLUDE) -D_REENTRANT
    226 LINTFLAGS64=	$(LINTDEFS64) -I$(CCC_INCLUDE) -D_REENTRANT
    227 
    228 POFILE=		$(LIBRARY:%.a=%.po)
    229 
    230 SPROLINTLIB=    llib-l$(LIBNAME).ln
    231 SPROLINTFLAGS=  -uax
    232 SPROLINTFLAGS64=        -uax
    233 SPROLINTOUT=    lint.out
    234 $(SPROLINTLIB):=        LOG = -DLOGGING
    235 
    236 CLOBBERFILES += $(LINTFILES) $(CHECK_FILES)
    237 CHECK_FILES = $(OBJECTS:%.o=%.c_check) $(CHECKHDRS:%.h=%.h_check)
    238