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 TOOLOBJS=       alist.o strhash.o
  33 BLTOBJ=         msg.o
  34 ELFCAPOBJ=      elfcap.o
  35 OBJECTS=        $(BLTOBJ) \
  36                 $(AVLOBJ) \
  37                 $(DTROBJ) \
  38                 $(TOOLOBJS) \
  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 COMPATLINKS=    /etc/lib/ld.so.1 /usr/lib/ld.so.1 /usr/lib/$(MACH64)/ld.so.1
  76 $(ROOT)/etc/lib/ld.so.1 := COMPATLINKTARGET= ../../lib/ld.so.1
  77 $(ROOT)/usr/lib/ld.so.1 := COMPATLINKTARGET= ../../lib/ld.so.1
  78 $(ROOT)/usr/lib/$(MACH64)/ld.so.1 := \
  79         COMPATLINKTARGET= ../../../lib/$(MACH64)/ld.so.1
  80 
  81 install: $(ROOTCOMPATLINKS)
  82 
  83 FILEMODE =      755
  84 
  85 CPPFLAGS +=     -I$(SRCBASE)/lib/libc/inc \
  86                 -I$(SRCBASE)/uts/common/krtld \
  87                 -I$(SRCBASE)/uts/$(PLAT) \
  88                 -I$(SRCBASE)/uts/$(PLAT)/krtld \
  89                 -I$(SRC)/common/sgsrtcid \
  90                 -I$(ELFCAP) \
  91                  $(CPPFEATUREMACROS)
  92 
  93 ASFLAGS=        -P -D_ASM $(CPPFLAGS)
  94 LDLIB =         -L ../../libld/$(MACH)
  95 RTLDLIB =       -L ../../librtld/$(MACH)
  96 
  97 CERRWARN +=     -_gcc=-Wno-uninitialized
  98 CERRWARN +=     -_gcc=-Wno-unused-variable
  99 CERRWARN +=     -_gcc=-Wno-switch
 100 
 101 # not linted
 102 SMATCH=off
 103 
 104 # These definitions require that libc be built in the same workspace
 105 # as the run-time linker and before the run-time linker is built.
 106 # This is required for the system's self-consistency in any case.
 107 CPICLIB =       $(VAR_RTLD_CPICLIB)
 108 CPICLIB64 =     $(VAR_RTLD_CPICLIB64)
 109 CLIB =          -lc_pic
 110 
 111 LDLIBS +=       $(CONVLIBDIR) $(CONV_LIB) \
 112                 $(CPICLIB) $(CLIB) \
 113                 $(LDDBGLIBDIR) $(LDDBG_LIB) \
 114                 $(RTLDLIB) -lrtld \
 115                 $(LDLIB) $(LD_LIB)
 116 
 117 DYNFLAGS +=     -i -e _rt_boot $(VERSREF) $(ZNODLOPEN) \
 118                 $(ZINTERPOSE) -zdtrace=dtrace_data '-R$$ORIGIN'
 119 
 120 BUILD.s=        $(AS) $(ASFLAGS) $< -o $@
 121 
 122 BLTDEFS=        msg.h
 123 BLTDATA=        msg.c
 124 BLTMESG=        $(SGSMSGDIR)/rtld
 125 
 126 BLTFILES=       $(BLTDEFS) $(BLTDATA) $(BLTMESG)
 127 
 128 SGSMSGCOM=      ../common/rtld.msg
 129 SGSMSG32=       ../common/rtld.32.msg
 130 SGSMSG64=       ../common/rtld.64.msg
 131 SGSMSGSPARC=    ../common/rtld.sparc.msg
 132 SGSMSGSPARC32=  ../common/rtld.sparc32.msg
 133 SGSMSGSPARC64=  ../common/rtld.sparc64.msg
 134 SGSMSGINTEL=    ../common/rtld.intel.msg
 135 SGSMSGINTEL32=  ../common/rtld.intel32.msg
 136 SGSMSGINTEL64=  ../common/rtld.intel64.msg
 137 SGSMSGCHK=      ../common/rtld.chk.msg
 138 SGSMSGTARG=     $(SGSMSGCOM)
 139 SGSMSGALL=      $(SGSMSGCOM) $(SGSMSG32) $(SGSMSG64) \
 140                 $(SGSMSGSPARC) $(SGSMSGSPARC32) $(SGSMSGSPARC64) \
 141                 $(SGSMSGINTEL) $(SGSMSGINTEL32) $(SGSMSGINTEL64)
 142 
 143 SGSMSGFLAGS1=   $(SGSMSGFLAGS) -m $(BLTMESG)
 144 SGSMSGFLAGS2=   $(SGSMSGFLAGS) -h $(BLTDEFS) -d $(BLTDATA) -n rtld_msg
 145 
 146 SRCS=           $(AVLOBJ:%.o=$(VAR_AVLDIR)/%.c) \
 147                 $(DTROBJ:%.o=$(VAR_DTRDIR)/%.c) \
 148                 $(TOOLOBJS:%.o=$(SGSTOOLS)/common/%.c) \
 149                 $(COMOBJS:%.o=../common/%.c)  $(MACHOBJS:%.o=%.c) $(BLTDATA) \
 150                 $(G_MACHOBJS:%.o=$(SRCBASE)/uts/$(PLAT)/krtld/%.c) \
 151                 $(CP_MACHOBJS:%.o=../$(MACH)/%.c) \
 152                 $(ASOBJS:%.o=%.s)
 153 
 154 CLEANFILES +=   $(CRTS) $(BLTFILES)
 155 CLOBBERFILES += $(RTLD)