b05648aa26
This is much better handled by a user-land tool. Proposed on tech-net here: https://mail-index.netbsd.org/tech-net/2020/04/22/msg007766.html Note that the ioctl SIOCGIFINFO_IN6 no longer sets flags. That now needs to be done using the pre-existing SIOCSIFINFO_FLAGS ioctl. Compat is fully provided where it makes sense, but trying to turn on RA handling will obviously throw an error as it no longer exists. Note that if you use IPv6 temporary addresses, this now needs to be turned on in dhcpcd.conf(5) rather than in sysctl.conf(5).
267 lines
8.3 KiB
Makefile
267 lines
8.3 KiB
Makefile
# $NetBSD: Makefile.rump,v 1.129 2020/06/12 11:04:45 roy Exp $
|
|
#
|
|
|
|
.if !defined(_RUMP_MK)
|
|
_RUMP_MK= #defined
|
|
|
|
WARNS?= 3 # XXX: src/sys won't compile with -Wsign-compare yet
|
|
NOLINT= # kernel code
|
|
|
|
.include <bsd.own.mk>
|
|
|
|
# Use NetBSD kernel ABI by default on x86 archs. Performance-related
|
|
# compile-time options may override this at a later date.
|
|
.if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64")
|
|
_RUMP_NATIVEABI= yes
|
|
.else
|
|
_RUMP_NATIVEABI= no
|
|
CPPFLAGS:= -I${RUMPTOP}/include ${CPPFLAGS}
|
|
CPPFLAGS+= -D_RUMPKERNEL -I${RUMPTOP}/librump/rumpkern
|
|
.endif
|
|
|
|
# We are compiling the kernel code with no-delete-null-pointer-checks,
|
|
# and compiling without it, causes issues at least on sh3 by adding
|
|
# aborts after kern_assert on NULL pointer checks.
|
|
CFLAGS+= ${${ACTIVE_CC} == "gcc":? -fno-delete-null-pointer-checks :}
|
|
|
|
# NULL + 0 arithmetic raises LLVM UBSan warnings, specially in sys/pslist.h
|
|
# in the type-safe macros _PSLIST_VALIDATE_PTRS and _PSLIST_VALIDATE_CONTAINER.
|
|
.if ${MKSANITIZER:Uno} == "yes" || ${MKLIBCSANITIZER:Uno} == "yes"
|
|
CFLAGS+= ${${ACTIVE_CC} == "clang":? -fno-delete-null-pointer-checks :}
|
|
.endif
|
|
|
|
# Define baseline cpu for mips ports, required for
|
|
# rumpcomp_sync_icache() hypercall.
|
|
.if !empty(MACHINE_ARCH:Mmips*)
|
|
.if !empty(MACHINE_ARCH:Mmips64*)
|
|
CPPFLAGS+= -DMIPS64=1
|
|
.else
|
|
CPPFLAGS+= -DMIPS1=1
|
|
.endif
|
|
.endif
|
|
|
|
# which NetBSD compat to build
|
|
RUMP_NBCOMPAT?=default
|
|
.if ${RUMP_NBCOMPAT} == "all" || ${RUMP_NBCOMPAT} == "default"
|
|
RUMP_NBCOMPAT= 50 60 70 80 90
|
|
.endif
|
|
.if ${RUMP_NBCOMPAT} == "none"
|
|
RUMP_NBCOMPAT=
|
|
.endif
|
|
RUMP_NBCOMPAT:= ${RUMP_NBCOMPAT:S/,/ /g}
|
|
CPPFLAGS+= ${RUMP_NBCOMPAT:C/[1-9]0/-DCOMPAT_&/g}
|
|
|
|
CPPFLAGS+= -nostdinc
|
|
CFLAGS+= -ffreestanding -fno-strict-aliasing
|
|
|
|
CWARNFLAGS+= -Wno-format-zero-length -Wno-pointer-sign
|
|
|
|
CPPFLAGS+= -imacros ${RUMPTOP}/include/opt/opt_rumpkernel.h
|
|
.ifdef BUILDRUMP_IMACROS
|
|
CPPFLAGS+= -imacros ${BUILDRUMP_IMACROS}
|
|
.endif
|
|
|
|
CPPFLAGS+= -I${.CURDIR} -I.
|
|
CPPFLAGS+= -I${RUMPTOP}/../../common/include
|
|
CPPFLAGS+= -I${RUMPTOP}/include
|
|
CPPFLAGS+= -I${RUMPTOP}/include/opt
|
|
|
|
SHLIB_MAJOR?= 0
|
|
SHLIB_MINOR?= 0
|
|
|
|
.ifdef NEED_ISYSTEM
|
|
CPPFLAGS+= -isystem ${RUMPTOP}/../arch
|
|
CPPFLAGS+= -isystem ${RUMPTOP}/..
|
|
.else
|
|
CPPFLAGS+= -I${RUMPTOP}/../arch
|
|
CPPFLAGS+= -I${RUMPTOP}/..
|
|
.endif
|
|
|
|
RUMP_LDSCRIPT?= GNU
|
|
.if ${RUMP_LDSCRIPT} != "no"
|
|
# my ld or yours?
|
|
.if ${RUMP_LDSCRIPT} == "sun"
|
|
LDFLAGS+= -Wl,-M ${RUMPTOP}/ldscript_sun.rump
|
|
SRCS+= linksyms_sun.c
|
|
.PATH: ${RUMPTOP}
|
|
.elif ${RUMP_LDSCRIPT} == "GNU"
|
|
LDFLAGS+= -Wl,-T,${RUMPTOP}/ldscript.rump
|
|
.elif ${RUMP_LDSCRIPT} == "ctor"
|
|
CPPFLAGS+= -DRUMP_USE_CTOR
|
|
.else
|
|
.error Unknown ldscript ${RUMP_LDSCRIPT}
|
|
.endif
|
|
.endif
|
|
|
|
.if defined(RUMP_CURLWP)
|
|
.if ${RUMP_CURLWP} == "hypercall"
|
|
CPPFLAGS+= -DRUMP_CURLWP=RUMP_CURLWP_HYPERCALL
|
|
.elif ${RUMP_CURLWP} == "__thread"
|
|
CPPFLAGS+= -DRUMP_CURLWP=RUMP_CURLWP___THREAD
|
|
.elif ${RUMP_CURLWP} == "register"
|
|
CPPFLAGS+= -DRUMP_CURLWP=RUMP_CURLWP_REGISTER
|
|
.else
|
|
.error Unsupported curlwp scheme: ${RUMP_CURLWP}
|
|
.endif
|
|
.endif
|
|
|
|
RUMP_DIAGNOSTIC?=yes
|
|
.if ${RUMP_DIAGNOSTIC} == "yes"
|
|
CPPFLAGS+= -DDIAGNOSTIC
|
|
.endif
|
|
|
|
.ifdef RUMP_DEBUG
|
|
CPPFLAGS+= -DDEBUG
|
|
.endif
|
|
|
|
.ifdef RUMP_LOCKDEBUG
|
|
CPPFLAGS+= -DLOCKDEBUG
|
|
.endif
|
|
|
|
RUMP_KTRACE?=yes
|
|
.if ${RUMP_KTRACE} == "yes"
|
|
CPPFLAGS+= -DKTRACE
|
|
.endif
|
|
|
|
# kernel libs should not get linked against libc
|
|
# XXX: actually, we would like to enable this but cannot, since it
|
|
# also leaves out libgcc, it causes problems on some platforms.
|
|
# revisit some day.
|
|
#LDFLAGS+= -nodefaultlibs
|
|
|
|
# make sure __NetBSD__ gets defined (for builds on non-NetBSD)
|
|
# also, give those builds a way to undef the local compiler's macros
|
|
CPPFLAGS+= ${RUMPKERN_UNDEF}
|
|
|
|
RUMPKERNEL= This is NetBSD and I am the rump. Good evening.
|
|
|
|
# workaround: evbppc is not a well-defined arch
|
|
.if (${MACHINE} == "evbppc")
|
|
CPPFLAGS+= -DPPC_OEA
|
|
.endif
|
|
|
|
# If any of these files change, we need a full rebuild
|
|
DPSRCS+= ${RUMPTOP}/Makefile.rump
|
|
|
|
#
|
|
# Support for component-specific hypercalls
|
|
#
|
|
|
|
# no easy way to get WARNS out of bsd.sys.mk
|
|
RUMPCOMP_USER_WARNFLAGS= -Wall -Wextra -Wno-unused-parameter
|
|
RUMPCOMP_USER_WARNFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
|
|
|
|
.ifdef RUMPCOMP_USER_SRCS && !defined(RUMPKERN_ONLY)
|
|
.if empty(DESTDIR)
|
|
DESTDIR=/
|
|
.endif
|
|
BUILDRUMP_CPPFLAGS ?= -isysroot ${DESTDIR}
|
|
RUMPCOMP_USER_WERROR = ${${_NOWERROR} == "no" :?-Werror:}
|
|
.for rcusrc in ${RUMPCOMP_USER_SRCS:R}
|
|
${rcusrc}.d: ${rcusrc}.c
|
|
${_MKTARGET_CREATE}
|
|
${MKDEP} -f ${.TARGET} -- ${MKDEPFLAGS} ${CPUFLAGS} ${REPROFLAGS} ${BUILDRUMP_CPPFLAGS} ${RUMPCOMP_USER_CPPFLAGS} ${.ALLSRC:O:u:M*${rcusrc}.c}
|
|
|
|
${rcusrc}.o: ${rcusrc}.c
|
|
${_MKTARGET_COMPILE}
|
|
${CC} -o ${.TARGET} ${DBG} ${CWARNFLAGS} ${CPUFLAGS} ${REPROFLAGS} ${RUMPCOMP_USER_WERROR} ${RUMPCOMP_USER_WARNFLAGS} ${BUILDRUMP_CPPFLAGS} ${BUILDRUMP_CFLAGS} ${RUMPCOMP_USER_CPPFLAGS} ${RUMPCOMP_USER_CFLAGS} -c ${.ALLSRC:O:u:M*${rcusrc}.c}
|
|
|
|
${rcusrc}.pico: ${rcusrc}.c
|
|
${_MKTARGET_COMPILE}
|
|
${CC} -o ${.TARGET} -fPIC -DPIC ${DBG} ${CWARNFLAGS} ${CPUFLAGS} ${REPROFLAGS} ${RUMPCOMP_USER_WERROR} ${RUMPCOMP_USER_WARNFLAGS} ${BUILDRUMP_CPPFLAGS} ${BUILDRUMP_CFLAGS} ${RUMPCOMP_USER_CPPFLAGS} ${RUMPCOMP_USER_CFLAGS} -c ${.ALLSRC:O:u:M*${rcusrc}.c}
|
|
|
|
${rcusrc}.po: ${rcusrc}.c
|
|
${_MKTARGET_COMPILE}
|
|
${CC} -o ${.TARGET} ${PROFFLAGS} -pg ${DBG} ${CWARNFLAGS} ${CPUFLAGS} ${REPROFLAGS} ${RUMPCOMP_USER_WERROR} ${RUMPCOMP_USER_WARNFLAGS} ${BUILDRUMP_CPPFLAGS} ${BUILDRUMP_CFLAGS} ${RUMPCOMP_USER_CPPFLAGS} ${RUMPCOMP_USER_CFLAGS} -c ${.ALLSRC:O:u:M*${rcusrc}.c}
|
|
|
|
RUMPOBJ_NORENAME+=${rcusrc}.o ${rcusrc}.pico ${rcusrc}.po
|
|
SRCS+=${rcusrc}.c
|
|
.endfor
|
|
.endif
|
|
|
|
#
|
|
# Rename library symbols before use. If a symbol does not already belong
|
|
# to a rump namespace ("rump" or "RUMP"), prefix it with "rumpns". This
|
|
# avoids accidentally linking any kernel symbol against host platform
|
|
# libraries. The only non-renamed symbols are linkset delimiters and
|
|
# the GOT, which are more a property of the compiler than the kernel.
|
|
#
|
|
# Some toolchains generate unresolved symbols which are supposed to be
|
|
# satisfied by the toolchain itself when the program is linked.
|
|
# Unfortunately, we do not know which of the symbols are generated by
|
|
# the toolchain. Worse, they vary from platform to platform and
|
|
# toolchain to toolchain. The good news, however, is that this will
|
|
# be detected by a compile-time failure, so we can fairly easily manage
|
|
# a quirktable here.
|
|
#
|
|
# We also allow calling ourselves externally with e.g.:
|
|
# make -f /sys/rump/Makefile.rump RUMP_SYMREN=ffs.kobj
|
|
#
|
|
.if ${MACHINE_CPU} == "mips"
|
|
_SYMQUIRK='|_gp_disp'
|
|
.elif ${MACHINE_CPU} == "hppa"
|
|
_SYMQUIRK='|\$$\$$'
|
|
.elif ${MACHINE_ARCH} == "powerpc64"
|
|
_SYMQUIRK="|PF_funcs"
|
|
.endif
|
|
|
|
#
|
|
# Prefix quirks. At least one toolchain generates global
|
|
# symbols with prefixes which really need to remain as prefixes
|
|
# (i.e. the '.' on the front of some ppc64 globals). The
|
|
# way to know if you have the problem is if you get later
|
|
# complaints about symbols like 'rumpns_XrumpBLAH' or 'XrumpBLAH';
|
|
# the 'X' part was added by the toolchain and will need to
|
|
# be mentioned here.
|
|
#
|
|
.if ${MACHINE_ARCH} == "powerpc64"
|
|
_PQ="\.?"
|
|
.else
|
|
_PQ=
|
|
.endif
|
|
|
|
rump_symren: __archivebuild
|
|
.if !defined(RUMP_SYMREN)
|
|
@echo "Must supply RUMP_SYMREN for target rump_symren"
|
|
@false
|
|
.endif
|
|
|
|
# if we are called from lib build (RUMP_SYMREN is not specified),
|
|
# build the arrrrchive. otherwise just rename symbols.
|
|
__archivebuild: .USE
|
|
.if defined(RUMP_SYMREN) && defined(RUMPTOP)
|
|
@echo "ERROR: RUMP_SYMREN can only be used standalone"
|
|
@false
|
|
.endif
|
|
.if defined(RUMP_SYMREN)
|
|
${_MKMSG} " symbol rename " ${RUMP_SYMREN}
|
|
.else
|
|
${_MKTARGET_BUILD}
|
|
rm -f ${.TARGET}
|
|
.endif
|
|
for renameobj in ${RUMP_SYMREN:U${.ALLSRC:C/(${RUMPOBJ_NORENAME:ts|})//g}}; do \
|
|
${NM} -go $${renameobj} | ${TOOL_AWK} ' \
|
|
$$NF!~/^'${_PQ}'(rump|RUMP|__|_GLOBAL_OFFSET_TABLE|\.TOC\.'${_SYMQUIRK}'${RUMP_SYM_NORENAME:D|${RUMP_SYM_NORENAME}})/ \
|
|
{s=$$NF;sub(/^'${_PQ}'/, "&rumpns_", s); print $$NF, s}'\
|
|
| sort | uniq > renametab.$${renameobj}; \
|
|
${OBJCOPY} --preserve-dates --redefine-syms \
|
|
renametab.$${renameobj} $${renameobj}; \
|
|
rm -f renametab.$${renameobj}; \
|
|
done
|
|
.if !defined(RUMP_SYMREN)
|
|
${AR} ${_ARFL} ${.TARGET} \
|
|
`NM=${NM} ${LORDER} ${.ALLSRC:M*o} | ${TSORT}`
|
|
.endif
|
|
|
|
COMMENT?= (no description)
|
|
rumpdescribe: .PHONY
|
|
@printf '%-24s %s\n' '${LIB}' '${COMMENT}'
|
|
|
|
_BSD_IOCONF_MK_USER_=1
|
|
.include <bsd.ioconf.mk>
|
|
|
|
.-include "${NETBSDSRCDIR}/sys/arch/${MACHINE_CPU}/include/Makefile.inc"
|
|
.-include "${NETBSDSRCDIR}/sys/arch/${MACHINE}/include/Makefile.inc"
|
|
|
|
.endif # _RUMP_MK
|