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 #
  23 # Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
  24 # Copyright (c) 2018, Joyent, Inc.
  25 # Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
  26 #
  27 
  28 RTLD=           ld.so.1
  29 
  30 AVLOBJ=         avl.o
  31 DTROBJ=         dtrace_data.o
  32 SGSCOMMONOBJ=   alist.o strhash.o
  33 BLTOBJ=         msg.o
  34 ELFCAPOBJ=      elfcap.o
  35 OBJECTS=        $(BLTOBJ) \
  36                 $(AVLOBJ) \
  37                 $(DTROBJ) \
  38                 $(SGSCOMMONOBJ) \
  39                 $(ELFCAPOBJ) \
  40                 $(P_ASOBJS)   $(P_COMOBJS)   $(P_MACHOBJS)   $(G_MACHOBJS)  \
  41                 $(S_ASOBJS)   $(S_COMOBJS)   $(S_MACHOBJS)   $(CP_MACHOBJS)
  42 
  43 COMOBJS=        $(P_COMOBJS)  $(S_COMOBJS)
  44 ASOBJS=         $(P_ASOBJS)   $(S_ASOBJS)
  45 MACHOBJS=       $(P_MACHOBJS) $(S_MACHOBJS)
  46 NOCTFOBJS=      $(ASOBJS)
  47 
  48 include         $(SRC)/lib/Makefile.lib
  49 include         $(SRC)/cmd/sgs/Makefile.com
  50 
  51 SRCDIR =        ../common
  52 ELFCAP =        $(SRC)/common/elfcap
  53 PLAT =          $(VAR_PLAT_$(BASEPLAT))
  54 
  55 # DTrace needs an executable data segment.
  56 MAPFILE.NED=
  57 
  58 MAPFILES +=     $(MAPFILE-ORDER)
  59 
  60 # For the libc/libthread unified world:
  61 # This library needs to be placed in /lib to allow
  62 # dlopen() functionality while in single-user mode.
  63 ROOTFS_DYNLIB=  $(RTLD:%=$(ROOTFS_LIBDIR)/%)
  64 ROOTFS_DYNLIB64=        $(RTLD:%=$(ROOTFS_LIBDIR64)/%)
  65 
  66 # For the libc/libthread separated world:
  67 # A version of this library needs to be placed in /etc/lib to allow
  68 # dlopen() functionality while in single-user mode.
  69 ETCLIBDIR=      $(ROOT)/etc/lib
  70 ETCDYNLIB=      $(RTLD:%=$(ETCLIBDIR)/%)
  71 
  72 ROOTDYNLIB=     $(RTLD:%=$(ROOTFS_LIBDIR)/%)
  73 ROOTDYNLIB64=   $(RTLD:%=$(ROOTFS_LIBDIR64)/%)
  74 
  75 
  76 FILEMODE =      755
  77 
  78 CPPFLAGS +=     -I$(SRC)/lib/libc/inc \
  79                 -I$(SRC)/uts/common/krtld \
  80                 -I$(SRC)/uts/$(PLAT) \
  81                 -I$(SRC)/uts/$(PLAT)/krtld \
  82                 -I$(SRC)/common/sgsrtcid \
  83                 -I$(ELFCAP) \
  84                  $(CPPFEATUREMACROS)
  85 
  86 ASFLAGS=        -P -D_ASM $(CPPFLAGS)
  87 LDLIB =         -L ../../libld/$(MACH)
  88 RTLDLIB =       -L ../../librtld/$(MACH)
  89 
  90 CERRWARN +=     -_gcc=-Wno-uninitialized
  91 CERRWARN +=     -_gcc=-Wno-unused-variable
  92 CERRWARN +=     -_gcc=-Wno-switch
  93 
  94 # not linted
  95 SMATCH=off
  96 
  97 # These definitions require that libc be built in the same workspace
  98 # as the run-time linker and before the run-time linker is built.
  99 # This is required for the system's self-consistency in any case.
 100 CPICLIB =       $(VAR_RTLD_CPICLIB)
 101 CPICLIB64 =     $(VAR_RTLD_CPICLIB64)
 102 CLIB =          -lc_pic
 103 
 104 LDLIBS +=       $(CONVLIBDIR) -lconv \
 105                 $(CPICLIB) $(CLIB) \
 106                 $(LDDBGLIBDIR) -llddbg \
 107                 $(RTLDLIB) -lrtld \
 108                 $(LDLIB) -lld
 109 
 110 DYNFLAGS +=     -i -e _rt_boot $(VERSREF) $(ZNODLOPEN) \
 111                 $(ZINTERPOSE) -zdtrace=dtrace_data '-R$$ORIGIN'
 112 
 113 BUILD.s=        $(AS) $(ASFLAGS) $< -o $@
 114 
 115 BLTDEFS=        msg.h
 116 BLTDATA=        msg.c
 117 BLTMESG=        $(SGSMSGDIR)/rtld
 118 
 119 BLTFILES=       $(BLTDEFS) $(BLTDATA) $(BLTMESG)
 120 
 121 SGSMSGCOM=      ../common/rtld.msg
 122 SGSMSG32=       ../common/rtld.32.msg
 123 SGSMSG64=       ../common/rtld.64.msg
 124 SGSMSGSPARC=    ../common/rtld.sparc.msg
 125 SGSMSGSPARC32=  ../common/rtld.sparc32.msg
 126 SGSMSGSPARC64=  ../common/rtld.sparc64.msg
 127 SGSMSGINTEL=    ../common/rtld.intel.msg
 128 SGSMSGINTEL32=  ../common/rtld.intel32.msg
 129 SGSMSGINTEL64=  ../common/rtld.intel64.msg
 130 SGSMSGCHK=      ../common/rtld.chk.msg
 131 SGSMSGTARG=     $(SGSMSGCOM)
 132 SGSMSGALL=      $(SGSMSGCOM) $(SGSMSG32) $(SGSMSG64) \
 133                 $(SGSMSGSPARC) $(SGSMSGSPARC32) $(SGSMSGSPARC64) \
 134                 $(SGSMSGINTEL) $(SGSMSGINTEL32) $(SGSMSGINTEL64)
 135 
 136 SGSMSGFLAGS1=   $(SGSMSGFLAGS) -m $(BLTMESG)
 137 SGSMSGFLAGS2=   $(SGSMSGFLAGS) -h $(BLTDEFS) -d $(BLTDATA) -n rtld_msg
 138 
 139 SRCS=           $(AVLOBJ:%.o=$(VAR_AVLDIR)/%.c) \
 140                 $(DTROBJ:%.o=$(VAR_DTRDIR)/%.c) \
 141                 $(SGSCOMMONOBJ:%.o=$(SGSCOMMON)/%.c) \
 142                 $(COMOBJS:%.o=../common/%.c)  $(MACHOBJS:%.o=%.c) $(BLTDATA) \
 143                 $(G_MACHOBJS:%.o=$(SRC)/uts/$(PLAT)/krtld/%.c) \
 144                 $(CP_MACHOBJS:%.o=../$(MACH)/%.c) \
 145                 $(ASOBJS:%.o=%.s)
 146 
 147 CLEANFILES +=   $(CRTS) $(BLTFILES)
 148 CLOBBERFILES += $(RTLD)