[Mesa-dev] [PATCH] move pthread_setaffinity_np check to the build system

Marek Olšák maraeo at gmail.com
Thu Sep 13 18:49:57 UTC 2018


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Sep 13, 2018 at 2:41 PM, Dylan Baker <dylan at pnwbakers.com> wrote:
> 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