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