From 3acc18fcf7c38e7060e43e2de59f09392aa8fdea Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 13 Sep 2018 11:06:09 -0700 Subject: [PATCH] move pthread_setaffinity_np check to the build system MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. v2: - fix #define in autotools Fixes: 9f1bbbdbbd77d346c74c7abbb31f399151a85713 ("util: try to fix the Android and MacOS build") Cc: Emil Velikov Reviewed-by: Marek Olšák Reviewed-by: Eric Engestrom --- 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..7583a375ad7 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 + int main() { + void *a = (void*) &pthread_setaffinity_np; + long b = (long) a; + return (int) b; + }]])], + [DEFINES="$DEFINES -DHAVE_PTHREAD_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 ', + 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 #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.30.2