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