On Tue, Mar 08, 2022 at 11:46:59AM +0100, Miroslav Lichvar wrote: > Add a function using ethtool netlink to check whether a PHC is a virtual > clock of an interface. > > Signed-off-by: Miroslav Lichvar <mlich...@redhat.com> > Acked-by: Hangbin Liu <liuhang...@gmail.com> > --- > incdefs.sh | 4 +++ > missing.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > rtnl.c | 85 ++++++++++++++++++++++++++++++++++++++++++++ > rtnl.h | 9 +++++ > 4 files changed, 199 insertions(+) > > diff --git a/incdefs.sh b/incdefs.sh > index 19e620e..21333e5 100755 > --- a/incdefs.sh > +++ b/incdefs.sh > @@ -86,6 +86,10 @@ kernel_flags() > if grep -q HWTSTAMP_TX_ONESTEP_P2P ${prefix}${tstamp}; then > printf " -DHAVE_ONESTEP_P2P" > fi > + > + if grep -q SOF_TIMESTAMPING_BIND_PHC ${prefix}${tstamp}; then > + printf " -DHAVE_VCLOCKS" > + fi > } > diff --git a/rtnl.c b/rtnl.c > index f8bdbe6..fa02388 100644 > --- a/rtnl.c > +++ b/rtnl.c > @@ -19,6 +19,9 @@ > #include <asm/types.h> > #include <sys/socket.h> /* Must come before linux/netlink.h on some systems. > */ > #include <linux/netlink.h> > +#ifdef HAVE_VCLOCKS > +#include <linux/ethtool_netlink.h> > +#endif > #include <linux/rtnetlink.h> > #include <linux/genetlink.h> > #include <linux/if_team.h>
I will take this opportunity to state that incdefs.h is broken with cross-compilation, because it wants me to set $KBUILD_OUTPUT to the sysroot path, otherwise it searches the system-wide /usr/include/linux/net_tstamp.h for SOF_TIMESTAMPING_BIND_PHC, and finds it, and says "oh, yeah, I have vclocks". Then when I go ahead and compile linuxptp, it fails to find linux/ethtool_netlink.h, because the actual _sysroot_ doesn't have vclock support (only the system kernel headers do). You're probably going to say "just set KBUILD_OUTPUT", which I am indeed forced to do. But in fact I have an environment script that I just source for cross-compilation. And this variable isn't only used by linuxptp, it also affects where the Linux kernel output gets compiled to. Simply put, KBUILD_OUTPUT is _not_ the right choice to determine whether linuxptp will be compiled with kernel headers that have a certain symbol exported. It's also frustrating to have an env file that works for cross compiling everything, including the kernel itself, except linuxptp. What I usually do when I need to determine whether a feature is available is to compile a dummy C program using the same CFLAGS as the main program itself. No dumpster diving through paths on the host system, depending on variables you're not supposed to, etc. Like this: cat toolchain_deps.sh #!/bin/bash CC="$1" CFLAGS="$2" EXTRA_CFLAGS="" ${CC} ${CFLAGS} -x c -c -o $(mktemp) - > /dev/null 2>&1 << EOF #include <linux/net_tstamp.h> int main(void) { return SOF_TIMESTAMPING_BIND_PHC; } EOF if [ $? = 0 ]; then EXTRA_CFLAGS="${EXTRA_CFLAGS} -DHAVE_VCLOCKS" fi echo ${EXTRA_CFLAGS} Used like this: cat Makefile CFLAGS += $(shell ./toolchain_deps.sh "$(CC)" "$(CFLAGS)") _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel