package/numactl: make available on all architectures
authorThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sun, 18 Apr 2021 16:23:58 +0000 (18:23 +0200)
committerYann E. MORIN <yann.morin.1998@free.fr>
Sat, 24 Apr 2021 20:07:45 +0000 (22:07 +0200)
Since its introduction in commit
b05e74ff92b6728369e1540fc0a2bd60025f2146 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>
package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch [new file with mode: 0644]
package/numactl/Config.in
package/numactl/numactl.mk
package/rt-tests/Config.in

diff --git a/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch b/package/numactl/0001-Do-not-stringify-SYMVER-symbols.patch
new file mode 100644 (file)
index 0000000..c6981aa
--- /dev/null
@@ -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
+
index cd47f2f9a96709076fb180790b7d535eab0029c6..23cf7facb0da9e445484e44aab6a572c41d8d74f 100644 (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
index cf9c7596937827b60dd37d6e3e696354fe2d1f0e..3364f6c5c3b72f216b1c2dec79cf5995fd39f343 100644 (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))
index cc9b14dccb3154331c7dce416510e3ead7f6a974..477fa288d74718f903610c144585ce9bd0ae4680 100644 (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