xref: /illumos-gate/usr/src/lib/libc/Makefile (revision f20211217f12ce291fd518e61065cd273f23e4ea)
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/OPENSOLARIS.LICENSE
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/OPENSOLARIS.LICENSE.
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# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
23#
24# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27
28LIBBASENAME=	libc
29LIBRARY=	$(LIBBASENAME:%=%.a)
30VERS=		.1
31
32# Note that we build libc_pic.a for the benefit of building
33# ld.so.1, but we do not install it.  Only ld.so.1 needs it
34# and it must be built in the same workspace as libc.
35LIB_PIC= libc_pic.a
36
37ROOTLIB=	$(ROOT)/usr/lib
38ROOTFS_LIB=	$(ROOT)/lib
39ROOTLIB64=	$(ROOTLIB)/$(MACH64)
40ROOTFS_LIB64=	$(ROOTFS_LIB)/$(MACH64)
41
42ROOTVARIANTDIR=	$(ROOTLIB)/libc
43ROOTVARIANTDIR64=	$(ROOTLIB64)/libc
44
45ROOTFS_LINTDIR=		$(ROOTFS_LIB)
46ROOTFS_LINTDIR64=	$(ROOTFS_LIB64)
47ROOTFS_LINTLIB=		$(ROOTFS_LINTDIR)/$(LINTLIB)
48ROOTFS_LINTLIB64=	$(ROOTFS_LINTDIR64)/$(LINTLIB)
49
50# include common library definitions
51include ../Makefile.lib
52
53#
54# on some architectures, we build multiple libc variants
55#
56VAR1 =		hwcap1
57VAR2 =		hwcap2
58VAR3 =		hwcap3
59
60VARBLD_1=	$(MACH:sparc=sparc)
61VARBLD=		$(VARBLD_1:i386=)
62
63VARBLD64_1=	$(MACH:sparc=sparcv9)
64VARBLD64=	$(VARBLD64_1:i386=)
65
66VAR1_DYNLIB =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
67VAR1_BLDDIR =	$(MACH)_$(VAR1)/$(VARBLD)
68VAR2_DYNLIB =	$(LIBRARY:%.a=%_$(VAR2).so$(VERS))
69VAR2_BLDDIR =	$(MACH)_$(VAR2)/$(VARBLD)
70VAR3_DYNLIB =	$(LIBRARY:%.a=%_$(VAR3).so$(VERS))
71VAR3_BLDDIR =	$(MACH)_$(VAR3)/$(VARBLD)
72
73VAR1_DYNLIB64 =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
74VAR1_BLDDIR64 =	$(MACH)_$(VAR1)/$(VARBLD64)
75
76i386_VARIANTS=	$(VAR1) $(VAR2) $(VAR3)
77sparc_VARIANTS=
78sparcv9_VARIANTS=
79
80i386_COMP=
81sparc_COMP=	capabilities
82
83MACH_COMP=	$($(MACH)_COMP)
84
85i386_ETC=	$(MACH)/etc
86sparc_ETC=
87
88VARIANTS=	$($(MACH)_VARIANTS)
89VARIANT_SUBDIRS	= $(VARIANTS:%=$(MACH)_%/$(VARBLD))
90
91VARIANTS64=	$($(MACH64)_VARIANTS)
92VARIANT_SUBDIRS64	= $(VARIANTS64:%=$(MACH)_%/$(VARBLD64))
93
94SUBDIRS=	$(MACH_CAP) $(MACH) $(MACH_ETC) $(VARIANT_SUBDIRS)
95$(BUILD64)SUBDIRS += $(MACH64) $(VARIANT_SUBDIRS64)
96
97LIBS =		$(DYNLIB) $(LINTLIB)
98
99ROOTLIBS64=	$(ROOTLIBDIR64)/$(DYNLIB) $(ROOTLIBDIR64)/$(LINTLIB)
100MACHLIBS64=	$(MACH64)/$(DYNLIB) $(MACH64)/$(LINTLIB)
101VARIANTLIBS=	$(VARIANTS:%=$(MACH)_%/$(VARBLD)/$(LIBBASENAME)_%.so.1)
102VARIANTLIBS64=	$(VARIANTS64:%=$(MACH)_%/$(VARBLD64)/$(LIBBASENAME)_%.so.1)
103ROOTVARIANTLIBS= $(VARIANTS:%=$(ROOTVARIANTDIR)/$(LIBBASENAME)_%.so.1)
104ROOTVARIANTLIBS64= $(VARIANTS64:%=$(ROOTVARIANTDIR64)/$(LIBBASENAME)_%.so.1)
105
106# definitions for install_h target
107BASEHDRS=	getxby_door.h
108CHECKHDRS=	$(BASEHDRS:%.h=port/gen/%.check)
109HDRS=		$(BASEHDRS)
110
111CLOBBERFILES += THIRDPARTYLICENSE extract-copyright
112
113# install rules for install_h target
114$(ROOTHDRDIR)/%: port/gen/%
115	$(INS.file)
116
117$(ROOTLIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
118$(ROOTLIBDIR64)/$(DYNLIB) :=	FILEMODE = 755
119$(ROOTFS_LIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
120$(ROOTFS_LIBDIR64)/$(DYNLIB)	:=	FILEMODE = 755
121
122$(ROOTVARIANTDIR)			:= FILEMODE= 755
123$(ROOTVARIANTDIR)/$(VAR1_DYNLIB)	:= FILEMODE= 755
124$(ROOTVARIANTDIR)/$(VAR2_DYNLIB)	:= FILEMODE= 755
125$(ROOTVARIANTDIR)/$(VAR3_DYNLIB)	:= FILEMODE= 755
126
127$(ROOTVARIANTDIR64)			:= FILEMODE= 755
128$(ROOTVARIANTDIR64)/$(VAR1_DYNLIB64)	:= FILEMODE= 755
129
130.KEEP_STATE:
131
132all:	all_h lib32 $(BUILD64) .WAIT lib64 .WAIT etc THIRDPARTYLICENSE
133
134THIRDPARTYLICENSE: extract-copyright
135	$(RM) $@
136	./extract-copyright . > $@
137
138etc:	$($(MACH)_ETC)
139
140lib32:	$(MACH_COMP) $(MACHLIBS) $(MACH)/$(LIB_PIC) $(VARIANTLIBS)
141	@if $(ELFDUMP) -r $(MACH)/$(DYNLIB) | $(GREP) -w environ ; then \
142		$(ECHO) "Error: Invalid reference to environ" ; \
143		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
144		exit 1; \
145	fi
146
147lib64:	$(MACH_COMP) $(MACHLIBS64) $(MACH64)/$(LIB_PIC) $(VARIANTLIBS64)
148	@if $(ELFDUMP) -r $(MACH64)/$(DYNLIB) | $(GREP) -w environ ; then \
149		$(ECHO) "Error: Invalid reference to environ" ; \
150		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
151		exit 1; \
152	fi
153
154$(MACH)/assym.h $(MACH64)/assym.h:
155	@cd $(@D); $(MAKE) assym.h
156
157$(VARIANTLIBS): FRC
158	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
159
160$(VARIANTLIBS64): FRC
161	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
162
163$($(MACH)_ETC): FRC
164	@cd $(@); pwd; $(MAKE) $(TARGET)
165
166$($(MACH)_COMP): FRC
167	@cd $(@); pwd; $(MAKE) $(TARGET)
168
169install:	all			\
170		etc			\
171		inslib32		\
172		$(BUILD64) inslib64
173
174inslib32:	$(ROOTFS_LIBS) $(ROOTFS_LINKS) $(ROOTFS_LINT) \
175		$(ROOTFS_LINTLIB) \
176		$(ROOTVARIANTLIBS)
177
178inslib64:	$(ROOTFS_LIBS64) $(ROOTFS_LINKS64) \
179		$(ROOTFS_LINTLIB64) \
180		$(ROOTVARIANTLIBS64)
181
182install_h: all_h $(ROOTHDRS)
183
184all_h:	$(MACH)/assym.h $(MACH64)/assym.h
185
186check:	$(CHECKHDRS)
187
188$(ROOTFS_LIB)/%: $(MACH)/%
189	$(INS.file)
190$(ROOTFS_LIBDIR)/$(LIBLINKS): $(ROOTFS_LIBDIR)/$(LIBLINKS)$(VERS)
191	$(INS.liblink)
192$(ROOTFS_LIB64)/%: $(MACH64)/%
193	$(INS.file)
194$(ROOTFS_LIBDIR64)/$(LIBLINKS): $(ROOTFS_LIBDIR64)/$(LIBLINKS)$(VERS)
195	$(INS.liblink)
196
197$(ROOTVARIANTDIR): $(ROOTLIB)
198	$(INS.dir)
199$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR1_BLDDIR)/%
200	$(INS.file)
201$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR2_BLDDIR)/%
202	$(INS.file)
203$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR3_BLDDIR)/%
204	$(INS.file)
205
206$(ROOTVARIANTDIR64): $(ROOTLIB64)
207	$(INS.dir)
208$(ROOTVARIANTDIR64)/%: $(ROOTVARIANTDIR64) $(VAR1_BLDDIR64)/%
209	$(INS.file)
210
211# install rule for lint library target
212$(ROOTFS_LINTDIR)/%: port/%
213	$(INS.file)
214$(ROOTFS_LINTDIR64)/%: port/%
215	$(INS.file)
216$(ROOTFS_LINTDIR)/%: $(MACH)/%
217	$(INS.file)
218$(ROOTFS_LINTDIR64)/%: $(MACH64)/%
219	$(INS.file)
220
221$(LINTLIB):
222	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $@
223$(LINTLIB64):
224	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $@
225
226$(MACH)/$(LIB_PIC): FRC
227	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
228$(MACH64)/$(LIB_PIC): FRC
229	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
230
231all	:=	TARGET= all
232install	:=	TARGET= install
233clean	:=	TARGET= clean
234clobber	:=	TARGET= clobber
235lint	:=	TARGET= lint
236
237.PARALLEL:	$(SUBDIRS)
238
239$(SUBDIRS): FRC
240	@cd $@; pwd; VERSION='$(VERSION)' $(MAKE) $(TARGET)
241
242clean: $(SUBDIRS)
243clobber: $(SUBDIRS) etc clobber_local
244clobber_local:
245	$(RM) $(CLOBBERFILES)
246
247lint: $(SUBDIRS)
248
249_msg:	$(MSGDOMAIN) catalog
250
251catalog:
252	sh ./makelibccatalog.sh $(MSGDOMAIN)
253
254$(MSGDOMAIN):
255	$(INS.dir)
256
257cscope.out tags: FRC
258	$(XREF) -x $@
259
260FRC:
261# include MACH-specific library targets
262include ../Makefile.mach
263