> I'd prefer here the https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01418.html > changes to libgomp.h and associated configury changes.
OK, like the following? [gomp4] libgomp: guard pthreads usage by LIBGOMP_USE_PTHREADS This allows to avoid referencing pthread types and functions on nvptx. * configure.ac [nvptx*-*-*] (libgomp_use_pthreads): Set and use it... (LIBGOMP_USE_PTHREADS): ...here; new define. * configure: Regenerate. * config.h.in: Likewise. * libgomp.h: Guard pthread.h inclusion. (gomp_thread_attr): Guard by LIBGOMP_USE_PTHREADS. (gomp_init_thread_affinity): Ditto. --- libgomp/config.h.in | 3 +++ libgomp/configure | 7 +++++++ libgomp/configure.ac | 6 ++++++ libgomp/libgomp.h | 6 ++++++ 4 files changed, 22 insertions(+) diff --git a/libgomp/config.h.in b/libgomp/config.h.in index 7685bfb..ba64fd7 100644 --- a/libgomp/config.h.in +++ b/libgomp/config.h.in @@ -91,6 +91,9 @@ /* Define to 1 if GNU symbol versioning is used for libgomp. */ #undef LIBGOMP_GNU_SYMBOL_VERSIONING +/* Define to 1 if libgomp should use POSIX threads. */ +#undef LIBGOMP_USE_PTHREADS + /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR diff --git a/libgomp/configure b/libgomp/configure index 7407b4c..de87d4a 100755 --- a/libgomp/configure +++ b/libgomp/configure @@ -15043,6 +15043,7 @@ case "$host" in ;; nvptx*-*-*) # NVPTX does not support Pthreads, has its own code replacement. + libgomp_use_pthreads=no ;; *) # Check to see if -pthread or -lpthread is needed. Prefer the former. @@ -15088,6 +15089,12 @@ rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext esac +if test x$libgomp_use_pthreads != xno; then + +$as_echo "#define LIBGOMP_USE_PTHREADS 1" >>confdefs.h + +fi + # Plugins for offload execution, configure.ac fragment. -*- mode: autoconf -*- # # Copyright (C) 2014-2015 Free Software Foundation, Inc. diff --git a/libgomp/configure.ac b/libgomp/configure.ac index b1696d0..3bce745 100644 --- a/libgomp/configure.ac +++ b/libgomp/configure.ac @@ -181,6 +181,7 @@ case "$host" in ;; nvptx*-*-*) # NVPTX does not support Pthreads, has its own code replacement. + libgomp_use_pthreads=no ;; *) # Check to see if -pthread or -lpthread is needed. Prefer the former. @@ -202,6 +203,11 @@ case "$host" in [AC_MSG_ERROR([Pthreads are required to build libgomp])])]) esac +if test x$libgomp_use_pthreads != xno; then + AC_DEFINE(LIBGOMP_USE_PTHREADS, 1, + [Define to 1 if libgomp should use POSIX threads.]) +fi + m4_include([plugin/configfrag.ac]) # Check for functions needed. diff --git a/libgomp/libgomp.h b/libgomp/libgomp.h index d51b08b..1454adf 100644 --- a/libgomp/libgomp.h +++ b/libgomp/libgomp.h @@ -40,7 +40,9 @@ #include "gstdint.h" #include "libgomp-plugin.h" +#ifdef HAVE_PTHREAD_H #include <pthread.h> +#endif #include <stdbool.h> #include <stdlib.h> #include <stdarg.h> @@ -510,15 +512,19 @@ static inline struct gomp_task_icv *gomp_icv (bool write) return &gomp_global_icv; } +#ifdef LIBGOMP_USE_PTHREADS /* The attributes to be used during thread creation. */ extern pthread_attr_t gomp_thread_attr; +#endif /* Function prototypes. */ /* affinity.c */ extern void gomp_init_affinity (void); +#ifdef LIBGOMP_USE_PTHREADS extern void gomp_init_thread_affinity (pthread_attr_t *, unsigned int); +#endif extern void **gomp_affinity_alloc (unsigned long, bool); extern void gomp_affinity_init_place (void *); extern bool gomp_affinity_add_cpus (void *, unsigned long, unsigned long, -- 1.8.3.1