On Thu, 14 Apr 2016, Luiz Capitulino wrote:
> On Wed, 13 Apr 2016 15:37:00 -0500 > Clark Williams <[email protected]> wrote: > > > John, > > > > I ran into issues with parsing cpu masks when trying to run this command: > > > > sudo ./cyclictest -i100 -qmu -h 2000 -p95 -t1 -a3 > > > > I had previously booted a 4-core system with these boot options: > > > > isolcpus=3 nohz_full=3 rcu_nocbs=3 > > > > The intent was to run loads on cpus 0-2 while running cyclictest on the > > isolated cpu 3. > > > > Unfortunately, the libnuma function numa_parse_cpumask() (which we use when > > it's available) seems to check the current affinity mask and fails the > > parse if any of the cpus in the input string are not in the current > > affinity mask. I find this "unhelpful" when trying to place a measurement > > thread on an isolated cpu. > > > > This patch removes the wrapper function which uses libnuma cpumask parsing > > functions and instead uses the parser function we wrote for when libnuma is > > not available. > > There's an alternative solution that I was working on some time ago, > which is having a simple configure script. This is usually done > by simple projects that don't need a full blown autoconf machinery. > > The patch below adds such a script. It detects librt, libpthread and > libnuma. It solves the problem you mention and it removes hardcoded > lib details from the Makefile. > > If there's interest for this solution I can finish it and post for > inclusion. I find this interesting, maybe for the coming new devel system, I wouldn't want to stick it in now right before a stable release though. Also, I like this much better than full blown auto-tools, but I don't want to lose control over the compiling process either. In otherwords, there should be some way to override what the script detects. Thanks John > > From 4228140e9dbb7fbb1bb495663ae3d896fc447f8f Mon Sep 17 00:00:00 2001 > From: Luiz Capitulino <[email protected]> > Date: Tue, 23 Feb 2016 15:53:43 -0500 > Subject: [PATCH] add configure script > > Signed-off-by: Luiz Capitulino <[email protected]> > --- > .gitignore | 1 + > Makefile | 22 ++---------- > configure | 116 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 120 insertions(+), 19 deletions(-) > create mode 100755 configure > > diff --git a/.gitignore b/.gitignore > index ceee8bf..5b3e4cc 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -34,3 +34,4 @@ SRPMS > rt-tests.spec > tags > TAGS > +config.mk > diff --git a/Makefile b/Makefile > index 280fd3b..dad0175 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,3 +1,5 @@ > +include config.mk > + > VERSION = 0.97 > CC?=$(CROSS_COMPILE)gcc > AR?=$(CROSS_COMPILE)ar > @@ -17,7 +19,6 @@ sources = cyclictest.c \ > svsematest.c > > TARGETS = $(sources:.c=) > -LIBS = -lrt -lpthread > RTTESTLIB = -lrttest -L$(OBJDIR) > EXTRA_LIBS ?= -ldl # for get_cpu > DESTDIR ?= > @@ -48,26 +49,9 @@ ostype := $(lastword $(subst -, ,$(dumpmachine))) > machinetype := $(shell echo $(dumpmachine)| \ > sed -e 's/-.*//' -e 's/i.86/i386/' -e 's/mips.*/mips/' -e > 's/ppc.*/powerpc/') > > -# The default is to assume you have libnuma installed, which is fine to do > -# even on non-numa machines. If you don't want to install the numa libs, for > -# example, they might not be available in an embedded environment, then > -# compile with > -# make NUMA=0 > -ifneq ($(filter x86_64 i386 ia64 mips powerpc,$(machinetype)),) > -NUMA := 1 > -endif > - > -# The default is to assume that you only have numa_parse_cpustring > -# If you are sure you have a version of libnuma with numa_parse_cpustring_all > -# then compile with > -# make HAVE_PARSE_CPUSTRING_ALL=1 > -ifeq ($(NUMA),1) > - CFLAGS += -DNUMA > - NUMA_LIBS = -lnuma > ifdef HAVE_PARSE_CPUSTRING_ALL > CFLAGS += -DHAVE_PARSE_CPUSTRING_ALL > endif > -endif > > include src/arch/android/Makefile > > @@ -100,7 +84,7 @@ $(OBJDIR): > -include $(addprefix $(OBJDIR)/,$(sources:.c=.d)) > > cyclictest: $(OBJDIR)/cyclictest.o $(OBJDIR)/librttest.a > - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(NUMA_LIBS) > + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) > > signaltest: $(OBJDIR)/signaltest.o $(OBJDIR)/librttest.a > $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) > diff --git a/configure b/configure > new file mode 100755 > index 0000000..1d17ef9 > --- /dev/null > +++ b/configure > @@ -0,0 +1,116 @@ > +#!/bin/sh > + > +build_config=config.mk > +temp_dir=$(mktemp -d) > +temp_file=$temp_dir/file.c > + > +LIBS= > +NUMA_LIBS= > +EXTRA_CFLAGS= > +has_numa=n > +has_numa_cpustring_all=n > + > +build_test() > +{ > + local libs=$* > + local ret= > + > + cd $temp_dir > + cc -o prog $temp_file $libs 2> /dev/null > + ret=$? > + cd - > /dev/null > + return $ret > +} > + > +# > +# -lpthread > +# > +pthread_lib=-lpthread > + > +cat > $temp_file << EOF > +#include <pthread.h> > +static void *func(void *p) { return NULL; } > +int main(void) { > + pthread_t thread; > + pthread_create(&thread, 0, func, 0); > + return 0; > +} > +EOF > + > +if ! build_test $pthread_lib; then > + echo ERROR: missing pthread library > + exit 1 > +else > + LIBS="$LIBS $pthread_lib" > +fi > + > +# > +# -lrt > +# > +rt_lib=-lrt > + > +cat > $temp_file << EOF > +#include <sys/mman.h> > +#include <sys/stat.h> > +#include <fcntl.h> > +int main(void) { > + shm_open("", 0, 0); > + return 0; > +} > +EOF > + > +if ! build_test $rt_lib; then > + echo ERROR: missing rt library > + exit 1 > +else > + LIBS="$LIBS $rt_lib" > +fi > + > +# > +# -lnuma > +# > +numa_lib=-lnuma > + > +cat > $temp_file << EOF > +#include <numa.h> > +int main(void) { > + numa_available(); > + return 0; > +} > +EOF > + > +if build_test $numa_lib; then > + LIBS="$LIBS $numa_lib" > + EXTRA_CFLAGS="$EXTRA_CFLAGS -DNUMA" > + has_numa=y > +fi > + > +# > +# numa_parse_cpustring_all > +# > +if [ $has_numa = "y" ]; then > + > + cat > $temp_file << EOF > +#include <numa.h> > +int main(void) { > + numa_parse_cpustring_all(""); > + return 0; > +} > +EOF > + > + if build_test $numa_lib; then > + has_numa_cpustring_all=y; > + fi > +fi > + > +# > +# Write $build_config > +# > +echo "LIBS = $LIBS" > $build_config > +echo "EXTRA_CFLAGS = $EXTRA_CFLAGS" >> $build_config > + > +if [ "$has_numa_cpustring_all" = "y" ]; then > + echo "HAVE_PARSE_CPUSTRING_ALL := 1" >> $build_config > +fi > + > +rm -rf $temp_dir > -- > 2.5.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html >

