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