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 
  28 LIBBASENAME=    libc
  29 LIBRARY=        $(LIBBASENAME:%=%.a)
  30 VERS=           .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.
  35 LIB_PIC= libc_pic.a
  36 
  37 ROOTLIB=        $(ROOT)/usr/lib
  38 ROOTFS_LIB=     $(ROOT)/lib
  39 ROOTLIB64=      $(ROOTLIB)/$(MACH64)
  40 ROOTFS_LIB64=   $(ROOTFS_LIB)/$(MACH64)
  41 
  42 ROOTVARIANTDIR= $(ROOTLIB)/libc
  43 ROOTVARIANTDIR64=       $(ROOTLIB64)/libc
  44 
  45 ROOTFS_LINTDIR=         $(ROOTFS_LIB)
  46 ROOTFS_LINTDIR64=       $(ROOTFS_LIB64)
  47 ROOTFS_LINTLIB=         $(ROOTFS_LINTDIR)/$(LINTLIB)
  48 ROOTFS_LINTLIB64=       $(ROOTFS_LINTDIR64)/$(LINTLIB)
  49 
  50 # include common library definitions
  51 include ../Makefile.lib
  52 
  53 #
  54 # on some architectures, we build multiple libc variants
  55 #
  56 VAR1 =          hwcap1
  57 VAR2 =          hwcap2
  58 VAR3 =          hwcap3
  59 
  60 VARBLD_1=       $(MACH:sparc=sparc)
  61 VARBLD=         $(VARBLD_1:i386=)
  62 
  63 VARBLD64_1=     $(MACH:sparc=sparcv9)
  64 VARBLD64=       $(VARBLD64_1:i386=)
  65 
  66 VAR1_DYNLIB =   $(LIBRARY:%.a=%_$(VAR1).so$(VERS))
  67 VAR1_BLDDIR =   $(MACH)_$(VAR1)/$(VARBLD)
  68 VAR2_DYNLIB =   $(LIBRARY:%.a=%_$(VAR2).so$(VERS))
  69 VAR2_BLDDIR =   $(MACH)_$(VAR2)/$(VARBLD)
  70 VAR3_DYNLIB =   $(LIBRARY:%.a=%_$(VAR3).so$(VERS))
  71 VAR3_BLDDIR =   $(MACH)_$(VAR3)/$(VARBLD)
  72 
  73 VAR1_DYNLIB64 = $(LIBRARY:%.a=%_$(VAR1).so$(VERS))
  74 VAR1_BLDDIR64 = $(MACH)_$(VAR1)/$(VARBLD64)
  75 
  76 i386_VARIANTS=  $(VAR1) $(VAR2) $(VAR3)
  77 sparc_VARIANTS=
  78 sparcv9_VARIANTS=
  79 
  80 i386_COMP=
  81 sparc_COMP=     capabilities
  82 
  83 MACH_COMP=      $($(MACH)_COMP)
  84 
  85 i386_ETC=       $(MACH)/etc
  86 sparc_ETC=
  87 
  88 VARIANTS=       $($(MACH)_VARIANTS)
  89 VARIANT_SUBDIRS = $(VARIANTS:%=$(MACH)_%/$(VARBLD))
  90 
  91 VARIANTS64=     $($(MACH64)_VARIANTS)
  92 VARIANT_SUBDIRS64       = $(VARIANTS64:%=$(MACH)_%/$(VARBLD64))
  93 
  94 SUBDIRS=        $(MACH_CAP) $(MACH) $(MACH_ETC) $(VARIANT_SUBDIRS)
  95 $(BUILD64)SUBDIRS += $(MACH64) $(VARIANT_SUBDIRS64)
  96 
  97 LIBS =          $(DYNLIB) $(LINTLIB)
  98 
  99 ROOTLIBS64=     $(ROOTLIBDIR64)/$(DYNLIB) $(ROOTLIBDIR64)/$(LINTLIB)
 100 MACHLIBS64=     $(MACH64)/$(DYNLIB) $(MACH64)/$(LINTLIB)
 101 VARIANTLIBS=    $(VARIANTS:%=$(MACH)_%/$(VARBLD)/$(LIBBASENAME)_%.so.1)
 102 VARIANTLIBS64=  $(VARIANTS64:%=$(MACH)_%/$(VARBLD64)/$(LIBBASENAME)_%.so.1)
 103 ROOTVARIANTLIBS= $(VARIANTS:%=$(ROOTVARIANTDIR)/$(LIBBASENAME)_%.so.1)
 104 ROOTVARIANTLIBS64= $(VARIANTS64:%=$(ROOTVARIANTDIR64)/$(LIBBASENAME)_%.so.1)
 105 
 106 # definitions for install_h target
 107 BASEHDRS=       getxby_door.h 
 108 CHECKHDRS=      $(BASEHDRS:%.h=port/gen/%.check)
 109 HDRS=           $(BASEHDRS)
 110 
 111 CLOBBERFILES += 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 
 132 all:    all_h lib32 $(BUILD64) .WAIT lib64 .WAIT etc THIRDPARTYLICENSE
 133 
 134 THIRDPARTYLICENSE: extract-copyright
 135         $(RM) $@
 136         ./extract-copyright . > $@
 137 
 138 etc:    $($(MACH)_ETC)
 139 
 140 lib32:  $(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 
 147 lib64:  $(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 
 169 install:        all                     \
 170                 etc                     \
 171                 inslib32                \
 172                 $(BUILD64) inslib64
 173 
 174 inslib32:       $(ROOTFS_LIBS) $(ROOTFS_LINKS) $(ROOTFS_LINT) \
 175                 $(ROOTFS_LINTLIB) \
 176                 $(ROOTVARIANTLIBS)
 177 
 178 inslib64:       $(ROOTFS_LIBS64) $(ROOTFS_LINKS64) \
 179                 $(ROOTFS_LINTLIB64) \
 180                 $(ROOTVARIANTLIBS64)
 181 
 182 install_h: all_h $(ROOTHDRS)
 183 
 184 all_h:  $(MACH)/assym.h $(MACH64)/assym.h
 185 
 186 check:  $(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 
 231 all     :=      TARGET= all
 232 install :=      TARGET= install
 233 clean   :=      TARGET= clean
 234 clobber :=      TARGET= clobber
 235 lint    :=      TARGET= lint
 236 
 237 .PARALLEL:      $(SUBDIRS)
 238 
 239 $(SUBDIRS): FRC
 240         @cd $@; pwd; VERSION='$(VERSION)' $(MAKE) $(TARGET)
 241 
 242 clean: $(SUBDIRS)
 243 clobber: $(SUBDIRS) etc clobber_local
 244 clobber_local:
 245         $(RM) $(CLOBBERFILES)
 246 
 247 lint: $(SUBDIRS)
 248 
 249 _msg:   $(MSGDOMAIN) catalog
 250 
 251 catalog:
 252         sh ./makelibccatalog.sh $(MSGDOMAIN)
 253 
 254 $(MSGDOMAIN):
 255         $(INS.dir)
 256 
 257 cscope.out tags: FRC
 258         $(XREF) -x $@
 259 
 260 FRC:
 261 # include MACH-specific library targets
 262 include ../Makefile.mach