xref: /onnv-gate/usr/src/lib/libc/Makefile (revision 13135:9f04f32f7f45)
10Sstevel@tonic-gate#
20Sstevel@tonic-gate# CDDL HEADER START
30Sstevel@tonic-gate#
40Sstevel@tonic-gate# The contents of this file are subject to the terms of the
52522Sraf# Common Development and Distribution License (the "License").
61717Swesolows# You may not use this file except in compliance with the License.
70Sstevel@tonic-gate#
80Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate# See the License for the specific language governing permissions
110Sstevel@tonic-gate# and limitations under the License.
120Sstevel@tonic-gate#
130Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate#
190Sstevel@tonic-gate# CDDL HEADER END
200Sstevel@tonic-gate#
210Sstevel@tonic-gate#
2212719SRod.Evans@Sun.COM# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
230Sstevel@tonic-gate#
240Sstevel@tonic-gate#
250Sstevel@tonic-gate
260Sstevel@tonic-gateLIBBASENAME=	libc
270Sstevel@tonic-gateLIBRARY=	$(LIBBASENAME:%=%.a)
280Sstevel@tonic-gateVERS=		.1
290Sstevel@tonic-gate
300Sstevel@tonic-gate# Note that we build libc_pic.a for the benefit of building
310Sstevel@tonic-gate# ld.so.1, but we do not install it.  Only ld.so.1 needs it
320Sstevel@tonic-gate# and it must be built in the same workspace as libc.
330Sstevel@tonic-gateLIB_PIC= libc_pic.a
340Sstevel@tonic-gate
350Sstevel@tonic-gateROOTLIB=	$(ROOT)/usr/lib
360Sstevel@tonic-gateROOTFS_LIB=	$(ROOT)/lib
370Sstevel@tonic-gateROOTLIB64=	$(ROOTLIB)/$(MACH64)
380Sstevel@tonic-gateROOTFS_LIB64=	$(ROOTFS_LIB)/$(MACH64)
390Sstevel@tonic-gate
400Sstevel@tonic-gateROOTVARIANTDIR=	$(ROOTLIB)/libc
419202SJason.Beloro@Sun.COMROOTVARIANTDIR64=	$(ROOTLIB64)/libc
420Sstevel@tonic-gate
430Sstevel@tonic-gateROOTFS_LINTDIR=		$(ROOTFS_LIB)
440Sstevel@tonic-gateROOTFS_LINTDIR64=	$(ROOTFS_LIB64)
450Sstevel@tonic-gateROOTFS_LINTLIB=		$(ROOTFS_LINTDIR)/$(LINTLIB)
460Sstevel@tonic-gateROOTFS_LINTLIB64=	$(ROOTFS_LINTDIR64)/$(LINTLIB)
470Sstevel@tonic-gate
480Sstevel@tonic-gate# include common library definitions
490Sstevel@tonic-gateinclude ../Makefile.lib
500Sstevel@tonic-gate
510Sstevel@tonic-gate#
520Sstevel@tonic-gate# on some architectures, we build multiple libc variants
530Sstevel@tonic-gate#
540Sstevel@tonic-gateVAR1 =		hwcap1
550Sstevel@tonic-gateVAR2 =		hwcap2
565084SjohnlevVAR3 =		hwcap3
570Sstevel@tonic-gate
589202SJason.Beloro@Sun.COMVARBLD_1=	$(MACH:sparc=sparc)
599202SJason.Beloro@Sun.COMVARBLD=		$(VARBLD_1:i386=)
609202SJason.Beloro@Sun.COM
619202SJason.Beloro@Sun.COMVARBLD64_1=	$(MACH:sparc=sparcv9)
629202SJason.Beloro@Sun.COMVARBLD64=	$(VARBLD64_1:i386=)
639202SJason.Beloro@Sun.COM
640Sstevel@tonic-gateVAR1_DYNLIB =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
659202SJason.Beloro@Sun.COMVAR1_BLDDIR =	$(MACH)_$(VAR1)/$(VARBLD)
660Sstevel@tonic-gateVAR2_DYNLIB =	$(LIBRARY:%.a=%_$(VAR2).so$(VERS))
679202SJason.Beloro@Sun.COMVAR2_BLDDIR =	$(MACH)_$(VAR2)/$(VARBLD)
685084SjohnlevVAR3_DYNLIB =	$(LIBRARY:%.a=%_$(VAR3).so$(VERS))
699202SJason.Beloro@Sun.COMVAR3_BLDDIR =	$(MACH)_$(VAR3)/$(VARBLD)
709202SJason.Beloro@Sun.COM
719202SJason.Beloro@Sun.COMVAR1_DYNLIB64 =	$(LIBRARY:%.a=%_$(VAR1).so$(VERS))
729202SJason.Beloro@Sun.COMVAR1_BLDDIR64 =	$(MACH)_$(VAR1)/$(VARBLD64)
730Sstevel@tonic-gate
745084Sjohnlevi386_VARIANTS=	$(VAR1) $(VAR2) $(VAR3)
7512719SRod.Evans@Sun.COMsparc_VARIANTS=
7612719SRod.Evans@Sun.COMsparcv9_VARIANTS=
7712719SRod.Evans@Sun.COM
7812719SRod.Evans@Sun.COMi386_COMP=
7912719SRod.Evans@Sun.COMsparc_COMP=	capabilities
8012719SRod.Evans@Sun.COM
8112719SRod.Evans@Sun.COMMACH_COMP=	$($(MACH)_COMP)
820Sstevel@tonic-gate
83772Skucharski386_ETC=	$(MACH)/etc
84772Skucharsksparc_ETC=
85772Skucharsk
860Sstevel@tonic-gateVARIANTS=	$($(MACH)_VARIANTS)
879202SJason.Beloro@Sun.COMVARIANT_SUBDIRS	= $(VARIANTS:%=$(MACH)_%/$(VARBLD))
889202SJason.Beloro@Sun.COM
899202SJason.Beloro@Sun.COMVARIANTS64=	$($(MACH64)_VARIANTS)
909202SJason.Beloro@Sun.COMVARIANT_SUBDIRS64	= $(VARIANTS64:%=$(MACH)_%/$(VARBLD64))
910Sstevel@tonic-gate
9212719SRod.Evans@Sun.COMSUBDIRS=	$(MACH_CAP) $(MACH) $(MACH_ETC) $(VARIANT_SUBDIRS)
939264SRoger.Faulkner@Sun.COM$(BUILD64)SUBDIRS += $(MACH64) $(VARIANT_SUBDIRS64)
940Sstevel@tonic-gate
950Sstevel@tonic-gateLIBS =		$(DYNLIB) $(LINTLIB)
960Sstevel@tonic-gate
970Sstevel@tonic-gateROOTLIBS64=	$(ROOTLIBDIR64)/$(DYNLIB) $(ROOTLIBDIR64)/$(LINTLIB)
980Sstevel@tonic-gateMACHLIBS64=	$(MACH64)/$(DYNLIB) $(MACH64)/$(LINTLIB)
999202SJason.Beloro@Sun.COMVARIANTLIBS=	$(VARIANTS:%=$(MACH)_%/$(VARBLD)/$(LIBBASENAME)_%.so.1)
1009202SJason.Beloro@Sun.COMVARIANTLIBS64=	$(VARIANTS64:%=$(MACH)_%/$(VARBLD64)/$(LIBBASENAME)_%.so.1)
1010Sstevel@tonic-gateROOTVARIANTLIBS= $(VARIANTS:%=$(ROOTVARIANTDIR)/$(LIBBASENAME)_%.so.1)
1029202SJason.Beloro@Sun.COMROOTVARIANTLIBS64= $(VARIANTS64:%=$(ROOTVARIANTDIR64)/$(LIBBASENAME)_%.so.1)
1030Sstevel@tonic-gate
1040Sstevel@tonic-gate# definitions for install_h target
1050Sstevel@tonic-gateBASEHDRS=	getxby_door.h
1060Sstevel@tonic-gateCHECKHDRS=	$(BASEHDRS:%.h=port/gen/%.check)
1070Sstevel@tonic-gateHDRS=		$(BASEHDRS)
1080Sstevel@tonic-gate
1090Sstevel@tonic-gate# install rules for install_h target
1100Sstevel@tonic-gate$(ROOTHDRDIR)/%: port/gen/%
1110Sstevel@tonic-gate	$(INS.file)
1120Sstevel@tonic-gate
1130Sstevel@tonic-gate$(ROOTLIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
1140Sstevel@tonic-gate$(ROOTLIBDIR64)/$(DYNLIB) :=	FILEMODE = 755
1150Sstevel@tonic-gate$(ROOTFS_LIBDIR)/$(DYNLIB)	:=	FILEMODE = 755
1160Sstevel@tonic-gate$(ROOTFS_LIBDIR64)/$(DYNLIB)	:=	FILEMODE = 755
1170Sstevel@tonic-gate
1180Sstevel@tonic-gate$(ROOTVARIANTDIR)			:= FILEMODE= 755
1190Sstevel@tonic-gate$(ROOTVARIANTDIR)/$(VAR1_DYNLIB)	:= FILEMODE= 755
1200Sstevel@tonic-gate$(ROOTVARIANTDIR)/$(VAR2_DYNLIB)	:= FILEMODE= 755
1215084Sjohnlev$(ROOTVARIANTDIR)/$(VAR3_DYNLIB)	:= FILEMODE= 755
1220Sstevel@tonic-gate
1239202SJason.Beloro@Sun.COM$(ROOTVARIANTDIR64)			:= FILEMODE= 755
1249202SJason.Beloro@Sun.COM$(ROOTVARIANTDIR64)/$(VAR1_DYNLIB64)	:= FILEMODE= 755
1259202SJason.Beloro@Sun.COM
1260Sstevel@tonic-gate.KEEP_STATE:
1270Sstevel@tonic-gate
1282522Srafall:	check_i18n .WAIT lib32 $(BUILD64) .WAIT lib64 .WAIT etc
1291167Skupfer
1301167Skupfercheck_i18n:
1311219Sraf	@if [ ! -f $(ROOTFS_LIBDIR)/libc_i18n.a -o \
1321167Skupfer	    ! -f $(ROOTFS_LIBDIR64)/libc_i18n.a ]; then \
1331167Skupfer		if [ "$$CLOSED_IS_PRESENT" = no ]; then \
1341167Skupfer			$(ECHO) "Warning: closed binaries not" \
1351167Skupfer			    "properly unpacked." >&2;\
1361167Skupfer			$(ECHO) "Missing libc_i18n.a" >&2; \
1371167Skupfer			exit 1; \
1381167Skupfer		else \
1391167Skupfer			$(ECHO) "Warning: libc_i18n.a must be built" \
1401167Skupfer			    "before libc can be built." >&2; \
1411167Skupfer			exit 1; \
1421167Skupfer		fi \
1431167Skupfer	fi
144772Skucharsk
145772Skucharsketc:	$($(MACH)_ETC)
1460Sstevel@tonic-gate
14712719SRod.Evans@Sun.COMlib32:	$(MACH_COMP) $(MACHLIBS) $(MACH)/$(LIB_PIC) $(VARIANTLIBS)
1481219Sraf	mkdir -p $(MACH)/i18n_pics
1491219Sraf	cd $(MACH)/i18n_pics ; $(AR) -x $(ROOTFS_LIBDIR)/libc_i18n.a
1506879Sraf	@if $(ELFDUMP) -r $(MACH)/$(DYNLIB) | $(GREP) -w environ ; then \
1516879Sraf		$(ECHO) "Error: Invalid reference to environ" ; \
1526879Sraf		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
1536879Sraf		exit 1; \
1546879Sraf	fi
1550Sstevel@tonic-gate
156*13135SChris.Kiick@Sun.COM$(MACHLIBS):	$(MACH_COMP)
157*13135SChris.Kiick@Sun.COM
15812719SRod.Evans@Sun.COMlib64:	$(MACH_COMP) $(MACHLIBS64) $(MACH64)/$(LIB_PIC) $(VARIANTLIBS64)
1591219Sraf	mkdir -p $(MACH64)/i18n_pics
1601219Sraf	cd $(MACH64)/i18n_pics ; $(AR) -x $(ROOTFS_LIBDIR64)/libc_i18n.a
1616879Sraf	@if $(ELFDUMP) -r $(MACH64)/$(DYNLIB) | $(GREP) -w environ ; then \
1626879Sraf		$(ECHO) "Error: Invalid reference to environ" ; \
1636879Sraf		$(ECHO) "Error: See comments in port/gen/env_data.c" ; \
1646879Sraf		exit 1; \
1656879Sraf	fi
1660Sstevel@tonic-gate
167*13135SChris.Kiick@Sun.COM$(MACHLIBS64):	$(MACH_COMP)
168*13135SChris.Kiick@Sun.COM
1690Sstevel@tonic-gate$(VARIANTLIBS): FRC
1700Sstevel@tonic-gate	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
1710Sstevel@tonic-gate
1729202SJason.Beloro@Sun.COM$(VARIANTLIBS64): FRC
1739202SJason.Beloro@Sun.COM	@cd $(@D); pwd; VERSION='$(VERSION)' $(MAKE) $(@F)
1749202SJason.Beloro@Sun.COM
175772Skucharsk$($(MACH)_ETC): FRC
176772Skucharsk	@cd $(@); pwd; $(MAKE) $(TARGET)
177772Skucharsk
17812719SRod.Evans@Sun.COM$($(MACH)_COMP): FRC
17912719SRod.Evans@Sun.COM	@cd $(@); pwd; $(MAKE) $(TARGET)
18012719SRod.Evans@Sun.COM
1810Sstevel@tonic-gateinstall:	all			\
182772Skucharsk		etc			\
1830Sstevel@tonic-gate		inslib32		\
1840Sstevel@tonic-gate		$(BUILD64) inslib64
1850Sstevel@tonic-gate
1860Sstevel@tonic-gateinslib32:	$(ROOTFS_LIBS) $(ROOTFS_LINKS) $(ROOTFS_LINT) \
1870Sstevel@tonic-gate		$(ROOTFS_LINTLIB) \
1880Sstevel@tonic-gate		$(ROOTVARIANTLIBS)
1890Sstevel@tonic-gate
1900Sstevel@tonic-gateinslib64:	$(ROOTFS_LIBS64) $(ROOTFS_LINKS64) \
1919202SJason.Beloro@Sun.COM		$(ROOTFS_LINTLIB64) \
1929202SJason.Beloro@Sun.COM		$(ROOTVARIANTLIBS64)
1930Sstevel@tonic-gate
1940Sstevel@tonic-gateinstall_h: $(ROOTHDRS)
1950Sstevel@tonic-gate
1960Sstevel@tonic-gatecheck:	$(CHECKHDRS)
1970Sstevel@tonic-gate
1980Sstevel@tonic-gate$(ROOTFS_LIB)/%: $(MACH)/%
1990Sstevel@tonic-gate	$(INS.file)
2000Sstevel@tonic-gate$(ROOTFS_LIBDIR)/$(LIBLINKS): $(ROOTFS_LIBDIR)/$(LIBLINKS)$(VERS)
2010Sstevel@tonic-gate	$(INS.liblink)
2020Sstevel@tonic-gate$(ROOTFS_LIB64)/%: $(MACH64)/%
2030Sstevel@tonic-gate	$(INS.file)
2040Sstevel@tonic-gate$(ROOTFS_LIBDIR64)/$(LIBLINKS): $(ROOTFS_LIBDIR64)/$(LIBLINKS)$(VERS)
2050Sstevel@tonic-gate	$(INS.liblink)
2060Sstevel@tonic-gate
2070Sstevel@tonic-gate$(ROOTVARIANTDIR): $(ROOTLIB)
2080Sstevel@tonic-gate	$(INS.dir)
2090Sstevel@tonic-gate$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR1_BLDDIR)/%
2100Sstevel@tonic-gate	$(INS.file)
2110Sstevel@tonic-gate$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR2_BLDDIR)/%
2120Sstevel@tonic-gate	$(INS.file)
2135084Sjohnlev$(ROOTVARIANTDIR)/%: $(ROOTVARIANTDIR) $(VAR3_BLDDIR)/%
2145084Sjohnlev	$(INS.file)
2150Sstevel@tonic-gate
2169202SJason.Beloro@Sun.COM$(ROOTVARIANTDIR64): $(ROOTLIB64)
2179202SJason.Beloro@Sun.COM	$(INS.dir)
2189202SJason.Beloro@Sun.COM$(ROOTVARIANTDIR64)/%: $(ROOTVARIANTDIR64) $(VAR1_BLDDIR64)/%
2199202SJason.Beloro@Sun.COM	$(INS.file)
2209202SJason.Beloro@Sun.COM
2210Sstevel@tonic-gate# install rule for lint library target
2220Sstevel@tonic-gate$(ROOTFS_LINTDIR)/%: port/%
2230Sstevel@tonic-gate	$(INS.file)
2240Sstevel@tonic-gate$(ROOTFS_LINTDIR64)/%: port/%
2250Sstevel@tonic-gate	$(INS.file)
2260Sstevel@tonic-gate$(ROOTFS_LINTDIR)/%: $(MACH)/%
2270Sstevel@tonic-gate	$(INS.file)
2280Sstevel@tonic-gate$(ROOTFS_LINTDIR64)/%: $(MACH64)/%
2290Sstevel@tonic-gate	$(INS.file)
2300Sstevel@tonic-gate
2310Sstevel@tonic-gate$(LINTLIB):
2320Sstevel@tonic-gate	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $@
2330Sstevel@tonic-gate$(LINTLIB64):
2340Sstevel@tonic-gate	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $@
2350Sstevel@tonic-gate
2360Sstevel@tonic-gate$(MACH)/$(LIB_PIC): FRC
2370Sstevel@tonic-gate	@cd $(MACH); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
2380Sstevel@tonic-gate$(MACH64)/$(LIB_PIC): FRC
2390Sstevel@tonic-gate	@cd $(MACH64); pwd; VERSION='$(VERSION)' $(MAKE) $(LIB_PIC)
2400Sstevel@tonic-gate
2410Sstevel@tonic-gateall	:=	TARGET= all
2420Sstevel@tonic-gateinstall	:=	TARGET= install
2430Sstevel@tonic-gateclean	:=	TARGET= clean
2440Sstevel@tonic-gateclobber	:=	TARGET= clobber
2450Sstevel@tonic-gatelint	:=	TARGET= lint
2460Sstevel@tonic-gate
2470Sstevel@tonic-gate.PARALLEL:	$(SUBDIRS)
2480Sstevel@tonic-gate
2492522Sraf$(SUBDIRS): FRC
2500Sstevel@tonic-gate	@cd $@; pwd; VERSION='$(VERSION)' $(MAKE) $(TARGET)
2510Sstevel@tonic-gate
2522522Srafclean clobber: $(SUBDIRS)
2531219Sraf	$(RM) -r $(MACH)/i18n_pics
2541219Sraf	$(BUILD64)$(RM) -r $(MACH64)/i18n_pics
2550Sstevel@tonic-gate
2560Sstevel@tonic-gatelint: $(SUBDIRS)
2570Sstevel@tonic-gate
2580Sstevel@tonic-gate_msg:	$(MSGDOMAIN) catalog
2590Sstevel@tonic-gate
2600Sstevel@tonic-gatecatalog:
2610Sstevel@tonic-gate	sh ./makelibccatalog.sh $(MSGDOMAIN)
2620Sstevel@tonic-gate
2630Sstevel@tonic-gate$(MSGDOMAIN):
2640Sstevel@tonic-gate	$(INS.dir)
2650Sstevel@tonic-gate
2660Sstevel@tonic-gatecscope.out tags: FRC
2670Sstevel@tonic-gate	$(XREF) -x $@
2680Sstevel@tonic-gate
2690Sstevel@tonic-gateFRC:
2700Sstevel@tonic-gate# include MACH-specific library targets
2710Sstevel@tonic-gateinclude ../Makefile.mach
272