[Mesa-dev] [PATCH] move pthread_setaffinity_np check to the build system
Dylan Baker
dylan at pnwbakers.com
Thu Sep 13 18:41:38 UTC 2018
Rather than trying to encode all of the rules in a header, lets just put
them in the build system where they belong. This fixes the build on
FreeBSD, which does have pthraed_setaffinity_np, but it's in a
pthread_np.h, not behind _GNU_SOURCE. FreeBSD also implements cpu_set
slightly differently, so additional changes would be required to get it
working right there anyway.
Fixes: 9f1bbbdbbd77d346c74c7abbb31f399151a85713
("util: try to fix the Android and MacOS build")
Cc: Marek Olšák <maraeo at gmail.com>
Cc: Emil Velikov <emil.velikov at collabora.com>
---
configure.ac | 16 ++++++++++++++++
meson.build | 7 +++++++
src/util/u_thread.h | 4 ----
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index f8bb131cb63..d10236dbead 100644
--- a/configure.ac
+++ b/configure.ac
@@ -968,6 +968,22 @@ if test "x$pthread_stubs_possible" = xyes; then
PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
fi
+save_LIBS="$LIBS"
+LIBS="$PTHREAD_LIBS"
+AC_MSG_CHECKING(whether pthread_setaffinity_np is supported)
+AC_LINK_IFELSE([AC_LANG_SOURCE([[
+ #define _GNU_SOURCE
+ #include <pthread.h>
+ int main() {
+ void *a = (void*) &pthread_setaffinity_np;
+ long b = (long) a;
+ return (int) b;
+ }]])],
+ [DEFINES="$DEFINES -DPTHREAD_SETAFFINITY"];
+ AC_MSG_RESULT([yes]),
+ AC_MSG_RESULT([no]))
+LIBS="$save_LIBS"
+
dnl Check for futex for fast inline simple_mtx_t.
AC_CHECK_HEADER([linux/futex.h], [DEFINES="$DEFINES -DHAVE_LINUX_FUTEX_H"])
diff --git a/meson.build b/meson.build
index 0d534b9b4a9..0588ebf8e7a 100644
--- a/meson.build
+++ b/meson.build
@@ -1070,6 +1070,13 @@ pre_args += '-DHAVE_ZLIB'
dep_thread = dependency('threads')
if dep_thread.found() and host_machine.system() != 'windows'
pre_args += '-DHAVE_PTHREAD'
+ if cc.has_function(
+ 'pthread_setaffinity_np',
+ dependencies : dep_thread,
+ prefix : '#include <pthread.h>',
+ args : '-D_GNU_SOURCE')
+ pre_args += '-DHAVE_PTHREAD_SETAFFINITY'
+ endif
endif
if with_amd_vk or with_gallium_radeonsi or with_gallium_r600 or with_gallium_opencl
dep_elf = dependency('libelf', required : false)
diff --git a/src/util/u_thread.h b/src/util/u_thread.h
index eee6f3c712d..7538d7d634b 100644
--- a/src/util/u_thread.h
+++ b/src/util/u_thread.h
@@ -36,10 +36,6 @@
#include <signal.h>
#endif
-#if defined(HAVE_PTHREAD) && !defined(ANDROID) && !defined(__APPLE__)
-#define HAVE_PTHREAD_SETAFFINITY
-#endif
-
static inline thrd_t u_thread_create(int (*routine)(void *), void *param)
{
thrd_t thread;
--
2.19.0
More information about the mesa-dev
mailing list