Makefile revision 1.146
1# $NetBSD: Makefile,v 1.146 2023/07/30 09:19:19 riastradh 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,--no-undefined 53LDFLAGS+= -Wl,-Map=${.TARGET}.map 54 55COPTS+= -fvisibility=hidden 56 57# Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source 58# is first. 59.if exists($M/Makefile.inc) 60.include "$M/Makefile.inc" 61.endif 62 63# Support compat ld.elf_so. 64.if defined(MLIBDIR) 65PROG= ld.elf_so-${MLIBDIR} 66CPPFLAGS+= -DRTLD_ARCH_SUBDIR=\"${MLIBDIR}\" 67. if ${MLIBDIR} == "o32" 68. endif 69.else 70PROG= ld.elf_so 71.endif 72 73CLIBOBJ!= cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR} 74 75SRCS+= compat.c 76SRCS+= debug.c 77SRCS+= diagassert.c 78SRCS+= expand.c 79SRCS+= headers.c 80SRCS+= load.c 81SRCS+= map_object.c 82SRCS+= paths.c 83SRCS+= reloc.c 84SRCS+= rtld.c 85SRCS+= search.c 86SRCS+= symbol.c 87SRCS+= symver.c 88SRCS+= tls.c 89SRCS+= xmalloc.c 90SRCS+= xprintf.c 91 92.if ${USE_FORT} == "yes" 93.PATH.c: ${NETBSDSRCDIR}/lib/libc/misc 94SRCS+= stack_protector.c 95.endif 96 97.PATH.c: ${NETBSDSRCDIR}/lib/libc/stdlib 98SRCS+= exit.c 99 100errlist_concat.h: ${NETBSDSRCDIR}/lib/libc/gen/errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h 101 ${TOOL_AWK} -v concat=1 -f ${.ALLSRC} > ${.TARGET}.tmp && \ 102 mv -f ${.TARGET}.tmp ${.TARGET} 103 104xprintf.c: errlist_concat.h 105 106CLEANFILES+= errlist_concat.h ${PROG}.map 107 108BINDIR= ${SHLINKINSTALLDIR} 109 110CPPFLAGS.tls.c+= -std=gnu11 111CPPFLAGS+= -DLIBDIR=\"${LIBDIR}\" -D_PATH_RTLD=\"${BINDIR}/${PROG}\" 112CPPFLAGS+= -I${.CURDIR} -I. -D_KERNTYPES 113CPPFLAGS+= -DRTLD_LOADER 114CPPFLAGS+= -DGNU_RELRO 115CPPFLAGS+= -D_RTLD_SOURCE 116CPPFLAGS+= -DHAVE_INITFINI_ARRAY 117#CPPFLAGS+= -DDEBUG 118#CPPFLAGS+= -DRTLD_DEBUG 119#CPPFLAGS+= -DRTLD_DEBUG_RELOC 120.if !empty(LDELFSO_MACHINE_ARCH:Mearm*) 121CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libexecinfo 122.endif 123#DBG= -g 124COPTS+= -O3 125 126.if ${MACHINE_CPU} != "m68k" && ${MACHINE_CPU} != "sh3" && ${MACHINE_ARCH} != "vax" 127COPTS+= -fomit-frame-pointer 128.endif 129 130.if ${LDELFSO_MACHINE_ARCH} == "i386" || ${LDELFSO_MACHINE_ARCH} == "x86_64" 131COPTS+= -mno-3dnow -mno-mmx -mno-sse -mno-sse2 -mno-sse3 132.endif 133 134 135.if ${SHLIBDIR} != ${LIBDIR} 136CPPFLAGS+= -DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\" 137.endif 138 139# rtld.c and symbol.c use alloca, so disable SSP warnings. 140COPTS.rtld.c+= -Wno-stack-protector 141COPTS.symbol.c+=-Wno-stack-protector 142 143.if ${MACHINE_CPU} == "vax" 144COPTS.rtld.c+= -O0 145.endif 146 147LDADD+= -Wl,--version-script=${.CURDIR}/symbols.map 148LDADD+= -L${CLIBOBJ} -L${DESTDIR}${LIBDIR} 149.if ${MKPICLIB} != "no" 150LDADD+= -lc_pic 151.if ${MKPICINSTALL} != "no" 152DPADD+= ${LIBC_PIC} 153.endif 154DPADD+= ${CLIBOBJ}/libc_pic.a 155.else 156LDADD+= -lc 157DPADD+= ${CLIBOBJ}/libc.a 158.endif 159 160.if ${MACHINE_CPU} == "hppa" || ${MACHINE_CPU} == "sh3" 161# for $$divU, $$remU etc. (millicode) 162LDADD+= -lgcc 163DPADD+= ${LIBGCC} 164.endif 165 166STRIPFLAG= 167 168.PATH: $M 169 170 171${PROG}: ${OBJS} ${DPADD} 172 ${_MKMSG_LINK} ${PROG} 173 ${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LDADD} 174.if ${MKDEBUG} != "no" 175 ( ${OBJCOPY} --only-keep-debug ${.TARGET} ${.TARGET}.debug \ 176 && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ 177 --add-gnu-debuglink=${.TARGET}.debug ${.TARGET} \ 178 ) || (rm -f ${.TARGET}.debug; false) 179 180_PROGDEBUG.${PROG} := ${PROG}.debug 181.endif 182 183 184.if ${SHLINKINSTALLDIR} != "/usr/libexec" 185SYMLINKS+= ${SHLINKINSTALLDIR}/${PROG} /usr/libexec/${PROG} 186.if ${MKDEBUG} != "no" 187SYMLINKS+= ${DEBUGDIR}${BINDIR}/${PROG}.debug \ 188 ${DEBUGDIR}/usr${BINDIR}/${PROG}.debug 189.endif 190.endif 191 192.include <bsd.prog.mk> 193.else 194 195MAN= ld.elf_so.1 196 197.include <bsd.man.mk> 198.endif 199