package/numactl: make available on all architectures

Since its introduction in commit
b05e74ff92 in 2013, numactl has had an
explicit list of architectures that it supports. Interestingly, this
list does not include ARM, and now that rt-tests unconditionally needs
numactl, it meant the rt-tests package was no longer available on ARM.

Further investigation revealed that there is nothing in recent
versions of numactl that appears to be architecture-specific. It does
build with all of Buildroot toolchains currently used in the
autobuilders.

The only necessary changes are:

 * Exclude no-MMU architectures, as madvise() is used in the code
   base, and this is not available on no-MMU architectures.

 * Make sure to use -latomic when needed, as some atomic operations
   are used.

 * Backport a patch that fixes the .symver usage, which only affects
   really old gcc versions: only the old ARM Sourcery toolchain was
   affected by this. Newer gcc versions support the gcc "symver"
   attribute, so that the code that directly emits the assembly
   .symver directive is not invoked.

With these changes, numactl builds successfully on all our supported
toolchains.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
Thomas Petazzoni 2021-04-18 18:23:58 +02:00 committed by Yann E. MORIN
parent 281b11105a
commit 4ed540ddf5
4 changed files with 31 additions and 13 deletions

View File

@ -0,0 +1,25 @@
From f96c96af7fbf2779b15f66f03b10315a24fb4f5a Mon Sep 17 00:00:00 2001
From: Scott McMillan <smcmillan@nvidia.com>
Date: Fri, 9 Oct 2020 08:56:52 -0500
Subject: [PATCH] Do not stringify SYMVER symbols
Upstream: f96c96af7fbf2779b15f66f03b10315a24fb4f5a
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
util.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/util.h b/util.h
index 99ada33..f2a20ac 100644
--- a/util.h
+++ b/util.h
@@ -22,5 +22,5 @@ extern char *policy_name(int policy);
#if HAVE_ATTRIBUTE_SYMVER
#define SYMVER(a,b) __attribute__ ((symver (b)))
#else
-#define SYMVER(a,b) __asm__ (".symver " #a "," #b);
+#define SYMVER(a,b) __asm__ (".symver " a "," b);
#endif
--
2.30.2

View File

@ -1,15 +1,6 @@
config BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
bool
# numactl uses some system calls that are not available on all
# architectures.
default y if BR2_aarch64
default y if BR2_i386 || BR2_x86_64
default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
default y if BR2_powerpc
config BR2_PACKAGE_NUMACTL
bool "numactl"
depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
depends on BR2_USE_MMU # madvise()
help
numactl allows you to run your application on specific cpus
and memory nodes. It does this by supplying a NUMA memory

View File

@ -12,4 +12,8 @@ NUMACTL_INSTALL_STAGING = YES
NUMACTL_AUTORECONF = YES
NUMACTL_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -fPIC"
ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
NUMACTL_CONF_ENV += LDFLAGS="$(TARGET_LDFLAGS) -latomic"
endif
$(eval $(autotools-package))

View File

@ -2,10 +2,9 @@ config BR2_PACKAGE_RT_TESTS
bool "rt-tests"
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14 # deadline scheduler syscall
depends on BR2_USE_MMU # fork()
depends on BR2_USE_MMU # fork(), numactl
depends on !BR2_STATIC_LIBS # dlopen
depends on !BR2_TOOLCHAIN_USES_MUSL # cyclictest
depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS
select BR2_PACKAGE_NUMACTL
help
Set of utilities for testing the real-time behaviour of a
@ -34,4 +33,3 @@ comment "rt-tests needs a uClibc or glibc toolchain w/ NPTL, headers >= 3.14, dy
depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS \
|| BR2_TOOLCHAIN_USES_MUSL || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
depends on BR2_USE_MMU
depends on BR2_PACKAGE_NUMACTL_ARCH_SUPPORTS