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