1# $NetBSD: Makefile,v 1.143 2020/02/09 09:11:59 kamil Exp $ 2# 3# NOTE: when changing ld.so, ensure that ldd still compiles. 4# 5NOLIBCSANITIZER=# defined 6NOSANITIZER= # defined 7WARNS?=4 8 9LDELFSO_MACHINE_ARCH?= ${MACHINE_ARCH} 10 11# This needs to be before bsd.init.mk 12.if defined(BSD_MK_COMPAT_FILE) 13.include <${BSD_MK_COMPAT_FILE}> 14.endif 15 16# We are not building this with PIE 17PIE_CFLAGS= 18PIE_LDFLAGS= 19.include <bsd.init.mk> # for MKPIC definition 20.include <bsd.shlib.mk> # for SHLINKINSTALLDIR definition 21 22.if defined(LDELFSO_MACHINE_CPU) && !empty(LDELFSO_MACHINE_CPU) && \ 23 exists(${.CURDIR}/arch/${LDELFSO_MACHINE_CPU}) 24ARCHSUBDIR= ${LDELFSO_MACHINE_CPU} 25.else 26ARCHSUBDIR= ${MACHINE_CPU} 27.endif 28M= ${.CURDIR}/arch/${ARCHSUBDIR} 29 30.if ((${MACHINE_CPU} == "aarch64") || \ 31 (${LDELFSO_MACHINE_ARCH} == "alpha") || \ 32 (${MACHINE_CPU} == "arm") || \ 33 (${LDELFSO_MACHINE_ARCH} == "coldfire") || \ 34 (${LDELFSO_MACHINE_ARCH} == "hppa") || \ 35 (${LDELFSO_MACHINE_ARCH} == "i386") || \ 36 (${LDELFSO_MACHINE_ARCH} == "m68k") || \ 37 (${MACHINE_CPU} == "mips") || \ 38 (${MACHINE_CPU} == "or1k") || \ 39 (${MACHINE_CPU} == "powerpc") || \ 40 (${MACHINE_CPU} == "riscv") || \ 41 (${MACHINE_CPU} == "sh3") || \ 42 (${LDELFSO_MACHINE_ARCH} == "sparc") || \ 43 (${LDELFSO_MACHINE_ARCH} == "sparc64") || \ 44 (${LDELFSO_MACHINE_ARCH} == "x86_64") || \ 45 (${LDELFSO_MACHINE_ARCH} == "vax")) && \ 46 ${MKPIC} != "no" 47 48LDFLAGS+= ${${ACTIVE_CC} == "clang":? -Wl,-Bsymbolic : -symbolic} \ 49 -shared -nostartfiles -nodefaultlibs 50LDFLAGS+= -Wl,-static 51LDFLAGS+= -Wl,--warn-shared-textrel 52LDFLAGS+= -Wl,-Map=${.TARGET}.map 53 54COPTS+= -fvisibility=hidden 55 56# Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source 57# is first. 58.if exists($M/Makefile.inc) 59.include "$M/Makefile.inc" 60.endif 61 62# Support compat ld.elf_so. 63.if defined(MLIBDIR) 64PROG= ld.elf_so-${MLIBDIR} 65CPPFLAGS+= -DRTLD_ARCH_SUBDIR=\"${MLIBDIR}\" 66. if ${MLIBDIR} == "o32" 67. endif 68.else 69PROG= ld.elf_so 70.endif 71 72CLIBOBJ!= cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR} 73 74SRCS+= rtld.c reloc.c symbol.c xmalloc.c xprintf.c debug.c \ 75 map_object.c load.c search.c headers.c paths.c expand.c \ 76 tls.c symver.c diagassert.c compat.c 77 78.if ${USE_FORT} == "yes" 79.PATH.c: ${NETBSDSRCDIR}/lib/libc/misc 80SRCS+= stack_protector.c 81.endif 82 83.PATH.c: ${NETBSDSRCDIR}/lib/libc/stdlib 84SRCS+= exit.c 85 86errlist_concat.h: ${NETBSDSRCDIR}/lib/libc/gen/errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h 87 ${TOOL_AWK} -v concat=1 -f ${.ALLSRC} > ${.TARGET}.tmp && \ 88 mv -f ${.TARGET}.tmp ${.TARGET} 89 90xprintf.c: errlist_concat.h 91 92CLEANFILES+= errlist_concat.h ${PROG}.map 93 94BINDIR= ${SHLINKINSTALLDIR} 95 96CPPFLAGS.tls.c+= -std=gnu11 97CPPFLAGS+= -DLIBDIR=\"${LIBDIR}\" -D_PATH_RTLD=\"${BINDIR}/${PROG}\" 98CPPFLAGS+= -I${.CURDIR} -I. -D_KERNTYPES 99CPPFLAGS+= -DRTLD_LOADER 100CPPFLAGS+= -DGNU_RELRO 101CPPFLAGS+= -D_RTLD_SOURCE 102CPPFLAGS+= -DHAVE_INITFINI_ARRAY 103#CPPFLAGS+= -DDEBUG 104#CPPFLAGS+= -DRTLD_DEBUG 105#CPPFLAGS+= -DRTLD_DEBUG_RELOC 106.if !empty(LDELFSO_MACHINE_ARCH:Mearm*) 107CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libexecinfo 108.endif 109#DBG= -g 110COPTS+= -O3 111 112.if ${MACHINE_CPU} != "m68k" && ${MACHINE_CPU} != "sh3" && ${MACHINE_ARCH} != "vax" 113COPTS+= -fomit-frame-pointer 114.endif 115 116.if ${LDELFSO_MACHINE_ARCH} == "i386" || ${LDELFSO_MACHINE_ARCH} == "x86_64" 117COPTS+= -mno-3dnow -mno-mmx -mno-sse -mno-sse2 -mno-sse3 118.endif 119 120 121.if ${SHLIBDIR} != ${LIBDIR} 122CPPFLAGS+= -DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\" 123.endif 124 125# rtld.c and symbol.c use alloca, so disable SSP warnings. 126COPTS.rtld.c+= -Wno-stack-protector 127COPTS.symbol.c+=-Wno-stack-protector 128 129.if ${MACHINE_CPU} == "vax" 130COPTS.rtld.c+= -O0 131.endif 132 133LDADD+= -Wl,--version-script=${.CURDIR}/symbols.map 134LDADD+= -L${CLIBOBJ} -L${DESTDIR}${LIBDIR} 135.if ${MKPICLIB} != "no" 136LDADD+= -lc_pic 137.if ${MKPICINSTALL} != "no" 138DPADD+= ${LIBC_PIC} 139.endif 140DPADD+= ${CLIBOBJ}/libc_pic.a 141.else 142LDADD+= -lc 143DPADD+= ${CLIBOBJ}/libc.a 144.endif 145 146.if ${MACHINE_CPU} == "hppa" || ${MACHINE_CPU} == "sh3" 147# for $$divU, $$remU etc. (millicode) 148LDADD+= -lgcc 149DPADD+= ${LIBGCC} 150.endif 151 152STRIPFLAG= 153 154.PATH: $M 155 156 157${PROG}: ${OBJS} ${DPADD} 158 ${_MKMSG_LINK} ${PROG} 159 ${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LDADD} 160.if ${MKDEBUG} != "no" 161 ( ${OBJCOPY} --only-keep-debug ${.TARGET} ${.TARGET}.debug \ 162 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 163 --add-gnu-debuglink=${.TARGET}.debug ${.TARGET} \ 164 ) || (rm -f ${.TARGET}.debug; false) 165 166_PROGDEBUG.${PROG} := ${PROG}.debug 167.endif 168 169 170.if ${SHLINKINSTALLDIR} != "/usr/libexec" 171SYMLINKS+= ${SHLINKINSTALLDIR}/${PROG} /usr/libexec/${PROG} 172.if ${MKDEBUG} != "no" 173SYMLINKS+= ${DEBUGDIR}${BINDIR}/${PROG}.debug \ 174 ${DEBUGDIR}/usr${BINDIR}/${PROG}.debug 175.endif 176.endif 177 178.include <bsd.prog.mk> 179.else 180 181MAN= ld.elf_so.1 182 183.include <bsd.man.mk> 184.endif 185