move pthread_setaffinity_np check to the build system
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: 9f1bbbdbbd
("util: try to fix the Android and MacOS build")
Cc: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
This commit is contained in:
16
configure.ac
16
configure.ac
@@ -968,6 +968,22 @@ if test "x$pthread_stubs_possible" = xyes; then
|
|||||||
PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
|
PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
|
||||||
fi
|
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 -DHAVE_PTHREAD_SETAFFINITY"];
|
||||||
|
AC_MSG_RESULT([yes]),
|
||||||
|
AC_MSG_RESULT([no]))
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
|
||||||
dnl Check for futex for fast inline simple_mtx_t.
|
dnl Check for futex for fast inline simple_mtx_t.
|
||||||
AC_CHECK_HEADER([linux/futex.h], [DEFINES="$DEFINES -DHAVE_LINUX_FUTEX_H"])
|
AC_CHECK_HEADER([linux/futex.h], [DEFINES="$DEFINES -DHAVE_LINUX_FUTEX_H"])
|
||||||
|
|
||||||
|
@@ -1070,6 +1070,13 @@ pre_args += '-DHAVE_ZLIB'
|
|||||||
dep_thread = dependency('threads')
|
dep_thread = dependency('threads')
|
||||||
if dep_thread.found() and host_machine.system() != 'windows'
|
if dep_thread.found() and host_machine.system() != 'windows'
|
||||||
pre_args += '-DHAVE_PTHREAD'
|
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
|
endif
|
||||||
if with_amd_vk or with_gallium_radeonsi or with_gallium_r600 or with_gallium_opencl
|
if with_amd_vk or with_gallium_radeonsi or with_gallium_r600 or with_gallium_opencl
|
||||||
dep_elf = dependency('libelf', required : false)
|
dep_elf = dependency('libelf', required : false)
|
||||||
|
@@ -36,10 +36,6 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#endif
|
#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)
|
static inline thrd_t u_thread_create(int (*routine)(void *), void *param)
|
||||||
{
|
{
|
||||||
thrd_t thread;
|
thrd_t thread;
|
||||||
|
Reference in New Issue
Block a user