xref: /illumos-gate/usr/src/lib/Makefile.lib (revision 4de2612967d06c4fdbf524a62556a1e8118a006f)
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, Version 1.0 only
6# (the "License").  You may not use this file except in compliance
7# with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22#
23# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26# ident	"%Z%%M%	%I%	%E% SMI"
27#
28# Definitions common to libraries.
29#
30# include global definitions; SRC should be defined in the shell.
31# SRC is needed until RFE 1026993 is implemented.
32
33include		$(SRC)/Makefile.master
34
35LORDER=		lorder
36TSORT=		tsort
37AWK=		awk
38
39MAPFILE-FLTR=	$(SRC)/lib/common/mapfile-filter
40
41NX_MAP_i386=	$(SRC)/cmd/mapfile_noexdata
42NX_MAP_sparc=
43
44NX_MAP=		$(NX_MAP_$(MACH))
45
46#
47# If HDRDIR is left unset, then it's possible for the $(ROOTHDRDIR)/%
48# install rule in lib/Makefile.targ to generate false matches if there
49# are any common directory names between / and /usr/include (`xfn' is
50# one common example).  To prevent this, we set HDRDIR to a directory
51# name that will almost surely not exist on the build machine.
52#
53HDRDIR=		/__nonexistent_directory__
54SRCDIR=		.
55#
56# We don't build archive (*.a) libraries by default anymore.
57# If a component of the build needs to build an archive library
58# for its own internal purposes, it can define LIBS for itself
59# after including Makefile.lib, like this:
60# 	LIBS = $(LIBRARY)
61# or:
62# 	LIBS = $(LIBRARYCCC)
63# Archive libraries must not be installed in the proto area.
64#
65LIBS=
66MACHLIBS=	$(LIBS:%=$(MACH)/%)
67MACHLIBS64=	$(LIBS:%=$(MACH64)/%)
68DYNLIB=		$(LIBRARY:.a=.so$(VERS))
69DYNLIBPSR=	$(LIBRARY:.a=_psr.so$(VERS))
70DYNLIBCCC=	$(LIBRARYCCC:.a=.so$(VERS))
71LIBLINKS=	$(LIBRARY:.a=.so)
72LIBLINKSCCC=	$(LIBRARYCCC:.a=.so)
73LIBNAME=	$(LIBRARY:lib%.a=%)
74LIBLINKPATH=
75LIBNULL=	null.a
76ROOTHDRDIR=	$(ROOT)/usr/include
77ROOTLIBDIR=	$(ROOT)/usr/lib
78ROOTLIBDIR64=	$(ROOT)/usr/lib/$(MACH64)
79ROOTFS_LIBDIR=	$(ROOT)/lib
80ROOTFS_LIBDIR64=	$(ROOT)/lib/$(MACH64)
81ROOTLINTDIR=	$(ROOTLIBDIR)
82ROOTFS_LINTDIR=	$(ROOTFS_LIBDIR)
83ROOTFS_LINTDIR64=	$(ROOTFS_LIBDIR64)
84ROOTHDRS=	$(HDRS:%=$(ROOTHDRDIR)/%)
85HDRSRCS=	$(HDRS:%=$(HDRDIR)/%)
86CHECKHDRS=	$(HDRSRCS:%.h=%.check)
87ROOTLIBS=	$(LIBS:%=$(ROOTLIBDIR)/%)
88ROOTLIBS64=	$(LIBS:%=$(ROOTLIBDIR64)/%)
89ROOTFS_LIBS=	$(DYNLIB:%=$(ROOTFS_LIBDIR)/%)
90ROOTFS_LIBS64=	$(DYNLIB:%=$(ROOTFS_LIBDIR64)/%)
91ROOTLINKS=	$(ROOTLIBDIR)/$(LIBLINKS)
92ROOTLINKS64=	$(ROOTLIBDIR64)/$(LIBLINKS)
93ROOTFS_LINKS=	$(ROOTFS_LIBDIR)/$(LIBLINKS)
94ROOTFS_LINKS64=	$(ROOTFS_LIBDIR64)/$(LIBLINKS)
95ROOTLINKSCCC=	$(ROOTLIBDIR)/$(LIBLINKSCCC)
96ROOTLINKSCCC64=	$(ROOTLIBDIR64)/$(LIBLINKSCCC)
97ROOTFS_LINKSCCC=	$(ROOTFS_LIBDIR)/$(LIBLINKSCCC)
98ROOTFS_LINKSCCC64=	$(ROOTFS_LIBDIR64)/$(LIBLINKSCCC)
99ROOTLINT=	$(LINTSRC:%=$(ROOTLINTDIR)/%)
100ROOTFS_LINT=	$(LINTSRC:%=$(ROOTFS_LINTDIR)/%)
101ROOTFS_LINT64=	$(LINTSRC:%=$(ROOTFS_LINTDIR64)/%)
102ROOTMAN3=     $(ROOT)/usr/share/man/man3
103ROOTMAN3FILES=        $(MAN3FILES:%=$(ROOTMAN3)/%)
104$(ROOTMAN3FILES) := FILEMODE= 444
105$(ROOTMAN3FILES) := OWNER= root
106$(ROOTMAN3FILES) := GROUP= bin
107
108#
109# Begin /usr/sfw freeware rules for freeware that has "External"
110# taxonomy stability level.
111#
112ROOTSFW=	$(ROOT)/usr/sfw
113ROOTSFWBIN=	$(ROOT)/usr/sfw/bin
114ROOTSFWSBIN=	$(ROOT)/usr/sfw/sbin
115ROOTSFWETC=	$(ROOT)/etc/sfw
116ROOTSFWVAR=	$(ROOT)/var/sfw
117ROOTSFWSHARE=	$(ROOT)/usr/sfw/share
118ROOTSFWSHSRC=	$(ROOT)/usr/sfw/share/src
119ROOTSFWINCLUDE=	$(ROOT)/usr/sfw/include
120ROOTSFWLIB=	$(ROOT)/usr/sfw/lib
121ROOTSFWLIB64=	$(ROOT)/usr/sfw/lib/$(MACH64)
122ROOTSFWMAN=	$(ROOT)/usr/sfw/share/man
123ROOTSFWMANN=	$(ROOT)/usr/sfw/share/mann
124ROOTSFWMAN1=	$(ROOT)/usr/sfw/share/man/man1
125ROOTSFWMAN1M=	$(ROOT)/usr/sfw/share/man/man1m
126ROOTSFWMAN3=	$(ROOT)/usr/sfw/share/man/man3
127ROOTSFWMAN5=	$(ROOT)/usr/sfw/share/man/man5
128ROOTSFWMAN7=	$(ROOT)/usr/sfw/share/man/man7
129#
130# End /usr/sfw freeware rules
131#
132
133LINTLIB=	llib-l$(LIBNAME).ln
134LINTFLAGS=	-uaxm
135LINTFLAGS64=	-uaxm -Xarch=$(MACH64:sparcv9=v9)
136LINTSRC=	$(LINTLIB:%.ln=%)
137LINTOUT=	lint.out
138ARFLAGS=	r
139SONAME=		$(DYNLIB)
140# For most libraries, we should be able to resolve all symbols at link time,
141# either within the library or as dependencies, all text should be pure, and
142# combining relocations into one relocation table reduces startup costs.
143# All options are tunable to allow overload/omission from lower makefiles.
144
145
146HSONAME=	-h$(SONAME)
147DYNFLAGS=	$(HSONAME) $(ZTEXT) $(ZDEFS) $(ZCOMBRELOC) \
148		$(SPECMAPFILE:%=-M%) $(PGA_MAPFILE:%=-M%) $(NX_MAP:%=-M%)
149
150LDLIBS=		$(LDLIBS.lib)
151
152OBJS=		$(OBJECTS:%=objs/%)
153PICS=		$(OBJECTS:%=pics/%)
154
155# Declare that all library .o's can all be made in parallel.
156# The DUMMY target is for those instances where OBJS and PICS
157# are empty (to avoid an unconditional .PARALLEL declaration).
158.PARALLEL:	$(OBJS) $(PICS) DUMMY
159
160# default value for "portable" source
161SRCS=		$(OBJECTS:%.o=$(SRCDIR)/%.c)
162
163# default build of an archive and a shared object,
164# overridden locally when extra processing is needed
165BUILD.AR=	$(AR) $(ARFLAGS) $@ $(AROBJS)
166BUILD.SO=	$(CC) -o $@ $(GSHARED) $(DYNFLAGS) $(PICS) $(LDLIBS)
167BUILDCCC.SO=	$(CCC) -o $@ $(GSHARED) $(DYNFLAGS) $(PICS) $(LDLIBS)
168
169# default dynamic library symlink
170INS.liblink=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKS)$(VERS) $@
171INS.liblinkccc=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKSCCC)$(VERS) $@
172
173# default 64-bit dynamic library symlink
174INS.liblink64=	-$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKS)$(VERS) $@
175INS.liblinkccc64= -$(RM) $@; $(SYMLINK) $(LIBLINKPATH)$(LIBLINKSCCC)$(VERS) $@
176
177#
178# If appropriate, augment POST_PROCESS_O and POST_PROCESS_SO to do CTF
179# processing.  We'd like to just conditionally append to POST_PROCESS_O and
180# POST_PROCESS_SO, but ParallelMake has a bug which causes the same value to
181# sometimes get appended more than once, which will cause ctfconvert to fail.
182# So, instead we introduce CTFCONVERT_POST and CTFMERGE_POST, which are always
183# appended to POST_PROCESS_O and POST_PROCESS_SO but are no-ops unless CTF
184# processing should be done.
185#
186CTFCONVERT_POST = :
187CTFMERGE_POST	= :
188POST_PROCESS_O += ; $(CTFCONVERT_POST)
189POST_PROCESS_SO += ; $(CTFMERGE_POST)
190
191CTFMERGE_LIB	= $(CTFMERGE) -t -f -L VERSION -o $@ $(PICS)
192
193# conditional assignments
194
195$(OBJS)  :=	sparc_CFLAGS += -xregs=no%appl
196
197$(PICS)  :=	sparc_CFLAGS += -xregs=no%appl $(sparc_C_PICFLAGS)
198$(PICS)  :=	sparcv9_CFLAGS += -xregs=no%appl $(sparcv9_C_PICFLAGS)
199$(PICS)  :=	i386_CFLAGS += $(i386_C_PICFLAGS)
200$(PICS)  :=	amd64_CFLAGS += $(amd64_C_PICFLAGS)
201$(PICS)  :=	CCFLAGS += $(CC_PICFLAGS)
202$(PICS)  :=	CPPFLAGS += -DPIC -D_REENTRANT
203$(PICS)  :=	sparcv9_CCFLAGS += -xregs=no%appl $(sparcv9_CC_PICFLAGS)
204$(PICS)  :=	amd64_CCFLAGS += $(amd64_CC_PICFLAGS)
205$(PICS)  :=	CFLAGS += $(CTF_FLAGS)
206$(PICS)	 :=	CFLAGS64 += $(CTF_FLAGS)
207$(PICS)  :=	CTFCONVERT_POST = $(CTFCONVERT_O)
208$(DYNLIB) :=	CTFMERGE_POST = $(CTFMERGE_LIB)
209
210$(LINTLIB):=	LOG = -DLOGGING
211$(LIBRARY):=	AROBJS = $(OBJS)
212$(LIBRARY):=	DIR = objs
213$(DYNLIB):=	DIR = pics
214$(DYNLIBCCC):=	DIR = pics
215
216SONAMECCC=	$(DYNLIBCCC)
217HSONAMECCC=	-h $(SONAMECCC)
218#
219# Keep in sync with the standard DYNFLAGS
220#
221$(DYNLIBCCC):=	DYNFLAGS = $(HSONAMECCC) $(ZTEXT) $(ZDEFS) $(ZCOMBRELOC) \
222		$(SPECMAPFILE:%=-M%) $(PGA_MAPFILE:%=-M%) $(NX_MAP:%=-M%) \
223		$(NORUNPATH)
224
225
226# build rule for "portable" source
227objs/%.o pics/%.o: %.c
228	$(COMPILE.c) -o $@ $<
229	$(POST_PROCESS_O)
230
231objs/%.o pics/%.o: %.cc
232	$(COMPILE.cc) -o $@ $<
233	$(POST_PROCESS_O)
234
235.PRECIOUS: $(LIBS)
236
237# Define the majority text domain in this directory.
238TEXT_DOMAIN= SUNW_OST_OSLIB
239
240$(ROOTMAN3)/%: %.sunman
241	$(INS.rename)
242
243#
244# For library source code, we expect that some symbols may not be used or
245# may *appear* to be able to rescoped to static; shut lint up.  Never add
246# a flag here unless you're *sure* that all libraries need to be linted
247# with it.
248#
249LINTCHECKFLAGS = -m -erroff=E_NAME_DEF_NOT_USED2
250LINTCHECKFLAGS += -erroff=E_NAME_DECL_NOT_USED_DEF2
251
252#
253# Spec/ABI stuff
254#
255# Spectranslator Target Architecture
256TRANSMACH=	$(MACH)
257SPECMAPFILES=	$(SPECMAPFILE:%/$(MACH64)/mapfile=%/$(MACH)/mapfile)
258$(BUILD64)SPECMAPFILES += $(SPECMAPFILE:%/$(MACH)/mapfile=%/$(MACH64)/mapfile)
259
260#
261# Allow people to define their own clobber rules.  Normal makefiles
262# shouldn't override this - they should override $(CLOBBERFILES) instead.
263#
264CLOBBERTARGFILES= $(LIBS) $(DYNLIB) $(SPECMAPFILE) $(CLOBBERFILES)
265