xref: /illumos-gate/usr/src/lib/libc/Makefile (revision b1593d50e783f7d66722dde093752b74ffa95176)
17c478bd9Sstevel@tonic-gate#
27c478bd9Sstevel@tonic-gate# CDDL HEADER START
37c478bd9Sstevel@tonic-gate#
47c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the
5f808c858Sraf# Common Development and Distribution License (the "License").
680ab886dSwesolows# You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate#
87c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate# and limitations under the License.
127c478bd9Sstevel@tonic-gate#
137c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate#
197c478bd9Sstevel@tonic-gate# CDDL HEADER END
207c478bd9Sstevel@tonic-gate#
217c478bd9Sstevel@tonic-gate#
22*b1593d50SJason Beloro# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate# Use is subject to license terms.
247c478bd9Sstevel@tonic-gate#
257c478bd9Sstevel@tonic-gate#
267c478bd9Sstevel@tonic-gate
277c478bd9Sstevel@tonic-gateLIBBASENAME=	libc
287c478bd9Sstevel@tonic-gateLIBRARY=	$(LIBBASENAME:%=%.a)
297c478bd9Sstevel@tonic-gateVERS=		.1
307c478bd9Sstevel@tonic-gate
317c478bd9Sstevel@tonic-gate# Note that we build libc_pic.a for the benefit of building
327c478bd9Sstevel@tonic-gate# ld.so.1, but we do not install it.  Only ld.so.1 needs it
337c478bd9Sstevel@tonic-gate# and it must be built in the same workspace as libc.
347c478bd9Sstevel@tonic-gateLIB_PIC= libc_pic.a
357c478bd9Sstevel@tonic-gate
367c478bd9Sstevel@tonic-gateROOTLIB=	$(ROOT)/usr/lib
377c478bd9Sstevel@tonic-gateROOTFS_LIB=	$(ROOT)/lib
387c478bd9Sstevel@tonic-gateROOTLIB64=	$(ROOTLIB)/$(MACH64)
397c478bd9Sstevel@tonic-gateROOTFS_LIB64=	$(ROOTFS_LIB)/$(MACH64)
407c478bd9Sstevel@tonic-gate
417c478bd9Sstevel@tonic-gateROOTVARIANTDIR=	$(ROOTLIB)/libc
42*b1593d50SJason BeloroROOTVARIANTDIR64=	$(ROOTLIB64)/libc
437c478bd9Sstevel@tonic-gate
447c478bd9Sstevel@tonic-gateROOTFS_LINTDIR=		$(ROOTFS_LIB)
457c478bd9Sstevel@tonic-gateROOTFS_LINTDIR64=	$(ROOTFS_LIB64)
467c478bd9Sstevel@tonic-gateROOTFS_LINTLIB=		$(ROOTFS_LINTDIR)/$(LINTLIB)
477c478bd9Sstevel@tonic-gateROOTFS_LINTLIB64=	$(ROOTFS_LINTDIR64)/$(LINTLIB)
487c478bd9Sstevel@tonic-gate
497c478bd9Sstevel@tonic-gate# include common library definitions
507c478bd9Sstevel@tonic-gateinclude ../Makefile.lib
517c478bd9Sstevel@tonic-gate
527c478bd9Sstevel@tonic-gate#
537c478bd9Sstevel@tonic-gate# on some architectures, we build multiple libc variants
547c478bd9Sstevel@tonic-gate#
557c478bd9Sstevel@tonic-gateVAR1 =		hwcap1
567c478bd9Sstevel@tonic-gateVAR2 =		hwcap2
57843e1988SjohnlevVAR3 =		hwcap3
587c478bd9Sstevel@tonic-gate
59*b1593d50SJason BeloroVARBLD_1=	$(MACH:sparc=sparc)
60*b1593d50SJason BeloroVARBLD=		$(VARBLD_1:i386=)
61*b1593d50SJason Beloro
62*b1593d50SJason BeloroVARBLD64_1=	$(MACH:sparc=sparcv9)
63*b1593d50SJason BeloroVARBLD64=	$(VARBLD64_1:i386=)
64*b1593d50SJason Beloro
657c478bd9Sstevel@tonic-gateVAR1_DYNLIB =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
66*b1593d50SJason BeloroVAR1_BLDDIR =	$(MACH)_$(VAR1)/$(VARBLD)
677c478bd9Sstevel@tonic-gateVAR2_DYNLIB =	$(LIBRARY:%.a=%_$(VAR2).so$(VERS))
68*b1593d50SJason BeloroVAR2_BLDDIR =	$(MACH)_$(VAR2)/$(VARBLD)
69843e1988SjohnlevVAR3_DYNLIB =	$(LIBRARY:%.a=%_$(VAR3).so$(VERS))
70*b1593d50SJason BeloroVAR3_BLDDIR =	$(MACH)_$(VAR3)/$(VARBLD)
71*b1593d50SJason Beloro
72*b1593d50SJason BeloroVAR1_DYNLIB64 =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
73*b1593d50SJason BeloroVAR1_BLDDIR64 =	$(MACH)_$(VAR1)/$(VARBLD64)
747c478bd9Sstevel@tonic-gate
75843e1988Sjohnlevi386_VARIANTS=	$(VAR1) $(VAR2) $(VAR3)
76*b1593d50SJason Belorosparc_VARIANTS= $(VAR1)
77*b1593d50SJason Belorosparcv9_VARIANTS= $(VAR1)
787c478bd9Sstevel@tonic-gate
79a7123019Skucharski386_ETC=	$(MACH)/etc
80a7123019Skucharsksparc_ETC=
81a7123019Skucharsk
827c478bd9Sstevel@tonic-gateVARIANTS=	$($(MACH)_VARIANTS)
83*b1593d50SJason BeloroVARIANT_SUBDIRS	= $(VARIANTS:%=$(MACH)_%/$(VARBLD))
84*b1593d50SJason Beloro
85*b1593d50SJason BeloroVARIANTS64=	$($(MACH64)_VARIANTS)
86*b1593d50SJason BeloroVARIANT_SUBDIRS64	= $(VARIANTS64:%=$(MACH)_%/$(VARBLD64))
877c478bd9Sstevel@tonic-gate
88a7123019SkucharskSUBDIRS=	$(MACH) $(MACH_ETC) $(VARIANT_SUBDIRS)
897c478bd9Sstevel@tonic-gate$(BUILD64)SUBDIRS += $(MACH64)
907c478bd9Sstevel@tonic-gate
917c478bd9Sstevel@tonic-gateLIBS =		$(DYNLIB) $(LINTLIB)
927c478bd9Sstevel@tonic-gate
937c478bd9Sstevel@tonic-gateROOTLIBS64=	$(ROOTLIBDIR64)/$(DYNLIB) $(ROOTLIBDIR64)/$(LINTLIB)
947c478bd9Sstevel@tonic-gateMACHLIBS64=	$(MACH64)/$(DYNLIB) $(MACH64)/$(LINTLIB)
95*b1593d50SJason BeloroVARIANTLIBS=	$(VARIANTS:%=$(MACH)_%/$(VARBLD)/$(LIBBASENAME)_%.so.1)
96*b1593d50SJason BeloroVARIANTLIBS64=	$(VARIANTS64:%=$(MACH)_%/$(VARBLD64)/$(LIBBASENAME)_%.so.1)
977c478bd9Sstevel@tonic-gateROOTVARIANTLIBS= $(VARIANTS:%=$(ROOTVARIANTDIR)/$(LIBBASENAME)_%.so.1)
98*b1593d50SJason BeloroROOTVARIANTLIBS64= $(VARIANTS64:%=$(ROOTVARIANTDIR64)/$(LIBBASENAME)_%.so.1)
997c478bd9Sstevel@tonic-gate
1007c478bd9Sstevel@tonic-gate# definitions for install_h target
1017c478bd9Sstevel@tonic-gateBASEHDRS=	getxby_door.h
1027c478bd9Sstevel@tonic-gateCHECKHDRS=	$(BASEHDRS:%.h=port/gen/%.check)
1037c478bd9Sstevel@tonic-gateHDRS=		$(BASEHDRS)
1047c478bd9Sstevel@tonic-gate
1057c478bd9Sstevel@tonic-gate# install rules for install_h target
1067c478bd9Sstevel@tonic-gate$(ROOTHDRDIR)/%: port/gen/%
1077c478bd9Sstevel@tonic-gate	$(INS.file)
1087c478bd9Sstevel@tonic-gate
1097c478bd9Sstevel@tonic-gate$(ROOTLIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
1107c478bd9Sstevel@tonic-gate$(ROOTLIBDIR64)/$(DYNLIB) :=	FILEMODE = 755
1117c478bd9Sstevel@tonic-gate$(ROOTFS_LIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
1127c478bd9Sstevel@tonic-gate$(ROOTFS_LIBDIR64)/$(DYNLIB)	:=	FILEMODE = 755
1137c478bd9Sstevel@tonic-gate
1147c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR)			:= FILEMODE= 755
1157c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR)/$(VAR1_DYNLIB)	:= FILEMODE= 755
1167c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR)/$(VAR2_DYNLIB)	:= FILEMODE= 755
117843e1988Sjohnlev$(ROOTVARIANTDIR)/$(VAR3_DYNLIB)	:= FILEMODE= 755
1187c478bd9Sstevel@tonic-gate
119*b1593d50SJason Beloro$(ROOTVARIANTDIR64)			:= FILEMODE= 755
120*b1593d50SJason Beloro$(ROOTVARIANTDIR64)/$(VAR1_DYNLIB64)	:= FILEMODE= 755
121*b1593d50SJason Beloro
1227c478bd9Sstevel@tonic-gate.KEEP_STATE:
1237c478bd9Sstevel@tonic-gate
124f808c858Srafall:	check_i18n .WAIT lib32 $(BUILD64) .WAIT lib64 .WAIT etc
125fb9f9b97Skupfer
126fb9f9b97Skupfercheck_i18n:
127e8031f0aSraf	@if [ ! -f $(ROOTFS_LIBDIR)/libc_i18n.a -o \
128fb9f9b97Skupfer	    ! -f $(ROOTFS_LIBDIR64)/libc_i18n.a ]; then \
129fb9f9b97Skupfer		if [ "$$CLOSED_IS_PRESENT" = no ]; then \
130fb9f9b97Skupfer			$(ECHO) "Warning: closed binaries not" \
131fb9f9b97Skupfer			    "properly unpacked." >&2;\
132fb9f9b97Skupfer			$(ECHO) "Missing libc_i18n.a" >&2; \
133fb9f9b97Skupfer			exit 1; \
134fb9f9b97Skupfer		else \
135fb9f9b97Skupfer			$(ECHO) "Warning: libc_i18n.a must be built" \
136fb9f9b97Skupfer			    "before libc can be built." >&2; \
137fb9f9b97Skupfer			exit 1; \
138fb9f9b97Skupfer		fi \
139fb9f9b97Skupfer	fi
140a7123019Skucharsk
141a7123019Skucharsketc:	$($(MACH)_ETC)
1427c478bd9Sstevel@tonic-gate
1437c478bd9Sstevel@tonic-gatelib32:	$(MACHLIBS) $(MACH)/$(LIB_PIC) $(VARIANTLIBS)
144e8031f0aSraf	mkdir -p $(MACH)/i18n_pics
145e8031f0aSraf	cd $(MACH)/i18n_pics ; $(AR) -x $(ROOTFS_LIBDIR)/libc_i18n.a
14659f081edSraf	@if $(ELFDUMP) -r $(MACH)/$(DYNLIB) | $(GREP) -w environ ; then \
14759f081edSraf		$(ECHO) "Error: Invalid reference to environ" ; \
14859f081edSraf		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
14959f081edSraf		exit 1; \
15059f081edSraf	fi
1517c478bd9Sstevel@tonic-gate
152*b1593d50SJason Belorolib64:	$(MACHLIBS64) $(MACH64)/$(LIB_PIC) $(VARIANTLIBS64)
153e8031f0aSraf	mkdir -p $(MACH64)/i18n_pics
154e8031f0aSraf	cd $(MACH64)/i18n_pics ; $(AR) -x $(ROOTFS_LIBDIR64)/libc_i18n.a
15559f081edSraf	@if $(ELFDUMP) -r $(MACH64)/$(DYNLIB) | $(GREP) -w environ ; then \
15659f081edSraf		$(ECHO) "Error: Invalid reference to environ" ; \
15759f081edSraf		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
15859f081edSraf		exit 1; \
15959f081edSraf	fi
1607c478bd9Sstevel@tonic-gate
1617c478bd9Sstevel@tonic-gate$(VARIANTLIBS): FRC
1627c478bd9Sstevel@tonic-gate	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
1637c478bd9Sstevel@tonic-gate
164*b1593d50SJason Beloro$(VARIANTLIBS64): FRC
165*b1593d50SJason Beloro	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
166*b1593d50SJason Beloro
167a7123019Skucharsk$($(MACH)_ETC): FRC
168a7123019Skucharsk	@cd $(@); pwd; $(MAKE) $(TARGET)
169a7123019Skucharsk
1707c478bd9Sstevel@tonic-gateinstall:	all			\
171a7123019Skucharsk		etc			\
1727c478bd9Sstevel@tonic-gate		inslib32		\
1737c478bd9Sstevel@tonic-gate		$(BUILD64) inslib64
1747c478bd9Sstevel@tonic-gate
1757c478bd9Sstevel@tonic-gateinslib32:	$(ROOTFS_LIBS) $(ROOTFS_LINKS) $(ROOTFS_LINT) \
1767c478bd9Sstevel@tonic-gate		$(ROOTFS_LINTLIB) \
1777c478bd9Sstevel@tonic-gate		$(ROOTVARIANTLIBS)
1787c478bd9Sstevel@tonic-gate
1797c478bd9Sstevel@tonic-gateinslib64:	$(ROOTFS_LIBS64) $(ROOTFS_LINKS64) \
180*b1593d50SJason Beloro		$(ROOTFS_LINTLIB64) \
181*b1593d50SJason Beloro		$(ROOTVARIANTLIBS64)
1827c478bd9Sstevel@tonic-gate
1837c478bd9Sstevel@tonic-gateinstall_h: $(ROOTHDRS)
1847c478bd9Sstevel@tonic-gate
1857c478bd9Sstevel@tonic-gatecheck:	$(CHECKHDRS)
1867c478bd9Sstevel@tonic-gate
1877c478bd9Sstevel@tonic-gate$(ROOTFS_LIB)/%: $(MACH)/%
1887c478bd9Sstevel@tonic-gate	$(INS.file)
1897c478bd9Sstevel@tonic-gate$(ROOTFS_LIBDIR)/$(LIBLINKS): $(ROOTFS_LIBDIR)/$(LIBLINKS)$(VERS)
1907c478bd9Sstevel@tonic-gate	$(INS.liblink)
1917c478bd9Sstevel@tonic-gate$(ROOTFS_LIB64)/%: $(MACH64)/%
1927c478bd9Sstevel@tonic-gate	$(INS.file)
1937c478bd9Sstevel@tonic-gate$(ROOTFS_LIBDIR64)/$(LIBLINKS): $(ROOTFS_LIBDIR64)/$(LIBLINKS)$(VERS)
1947c478bd9Sstevel@tonic-gate	$(INS.liblink)
1957c478bd9Sstevel@tonic-gate
1967c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR): $(ROOTLIB)
1977c478bd9Sstevel@tonic-gate	$(INS.dir)
1987c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR1_BLDDIR)/%
1997c478bd9Sstevel@tonic-gate	$(INS.file)
2007c478bd9Sstevel@tonic-gate$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR2_BLDDIR)/%
2017c478bd9Sstevel@tonic-gate	$(INS.file)
202843e1988Sjohnlev$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR3_BLDDIR)/%
203843e1988Sjohnlev	$(INS.file)
2047c478bd9Sstevel@tonic-gate
205*b1593d50SJason Beloro$(ROOTVARIANTDIR64): $(ROOTLIB64)
206*b1593d50SJason Beloro	$(INS.dir)
207*b1593d50SJason Beloro$(ROOTVARIANTDIR64)/%: $(ROOTVARIANTDIR64) $(VAR1_BLDDIR64)/%
208*b1593d50SJason Beloro	$(INS.file)
209*b1593d50SJason Beloro
2107c478bd9Sstevel@tonic-gate# install rule for lint library target
2117c478bd9Sstevel@tonic-gate$(ROOTFS_LINTDIR)/%: port/%
2127c478bd9Sstevel@tonic-gate	$(INS.file)
2137c478bd9Sstevel@tonic-gate$(ROOTFS_LINTDIR64)/%: port/%
2147c478bd9Sstevel@tonic-gate	$(INS.file)
2157c478bd9Sstevel@tonic-gate$(ROOTFS_LINTDIR)/%: $(MACH)/%
2167c478bd9Sstevel@tonic-gate	$(INS.file)
2177c478bd9Sstevel@tonic-gate$(ROOTFS_LINTDIR64)/%: $(MACH64)/%
2187c478bd9Sstevel@tonic-gate	$(INS.file)
2197c478bd9Sstevel@tonic-gate
2207c478bd9Sstevel@tonic-gate$(LINTLIB):
2217c478bd9Sstevel@tonic-gate	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $@
2227c478bd9Sstevel@tonic-gate$(LINTLIB64):
2237c478bd9Sstevel@tonic-gate	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $@
2247c478bd9Sstevel@tonic-gate
2257c478bd9Sstevel@tonic-gate$(MACH)/$(LIB_PIC): FRC
2267c478bd9Sstevel@tonic-gate	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
2277c478bd9Sstevel@tonic-gate$(MACH64)/$(LIB_PIC): FRC
2287c478bd9Sstevel@tonic-gate	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
2297c478bd9Sstevel@tonic-gate
2307c478bd9Sstevel@tonic-gateall	:=	TARGET= all
2317c478bd9Sstevel@tonic-gateinstall	:=	TARGET= install
2327c478bd9Sstevel@tonic-gateclean	:=	TARGET= clean
2337c478bd9Sstevel@tonic-gateclobber	:=	TARGET= clobber
2347c478bd9Sstevel@tonic-gatelint	:=	TARGET= lint
2357c478bd9Sstevel@tonic-gate
2367c478bd9Sstevel@tonic-gate.PARALLEL:	$(SUBDIRS)
2377c478bd9Sstevel@tonic-gate
238f808c858Sraf$(SUBDIRS): FRC
2397c478bd9Sstevel@tonic-gate	@cd $@; pwd; VERSION='$(VERSION)' $(MAKE) $(TARGET)
2407c478bd9Sstevel@tonic-gate
241f808c858Srafclean clobber: $(SUBDIRS)
242e8031f0aSraf	$(RM) -r $(MACH)/i18n_pics
243e8031f0aSraf	$(BUILD64)$(RM) -r $(MACH64)/i18n_pics
2447c478bd9Sstevel@tonic-gate
2457c478bd9Sstevel@tonic-gatelint: $(SUBDIRS)
2467c478bd9Sstevel@tonic-gate
2477c478bd9Sstevel@tonic-gate_msg:	$(MSGDOMAIN) catalog
2487c478bd9Sstevel@tonic-gate
2497c478bd9Sstevel@tonic-gatecatalog:
2507c478bd9Sstevel@tonic-gate	sh ./makelibccatalog.sh $(MSGDOMAIN)
2517c478bd9Sstevel@tonic-gate
2527c478bd9Sstevel@tonic-gate$(MSGDOMAIN):
2537c478bd9Sstevel@tonic-gate	$(INS.dir)
2547c478bd9Sstevel@tonic-gate
2557c478bd9Sstevel@tonic-gatecscope.out tags: FRC
2567c478bd9Sstevel@tonic-gate	$(XREF) -x $@
2577c478bd9Sstevel@tonic-gate
2587c478bd9Sstevel@tonic-gateFRC:
2597c478bd9Sstevel@tonic-gate# include MACH-specific library targets
2607c478bd9Sstevel@tonic-gateinclude ../Makefile.mach
261