gallium/gallivm: enable linking lp_bld_printf function with C++ code
[mesa.git] / src / util / u_thread.h
index 8c8cc803199ce6c6d16f94eedd317ecd51d43943..6fc89099fec9d1efdb8594d5d73b7aac5d55f367 100644 (file)
 #include <stdbool.h>
 
 #include "c11/threads.h"
+#include "detect_os.h"
 
 #ifdef HAVE_PTHREAD
 #include <signal.h>
+#ifdef PTHREAD_SETAFFINITY_IN_NP_HEADER
+#include <pthread_np.h>
+#endif
+#endif
+
+#ifdef __FreeBSD__
+#define cpu_set_t cpuset_t
 #endif
 
 static inline thrd_t u_thread_create(int (*routine)(void *), void *param)
@@ -61,7 +69,17 @@ static inline thrd_t u_thread_create(int (*routine)(void *), void *param)
 static inline void u_thread_setname( const char *name )
 {
 #if defined(HAVE_PTHREAD)
+#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS
    pthread_setname_np(pthread_self(), name);
+#elif DETECT_OS_FREEBSD || DETECT_OS_OPENBSD
+   pthread_set_name_np(pthread_self(), name);
+#elif DETECT_OS_NETBSD
+   pthread_setname_np(pthread_self(), "%s", (void *)name);
+#elif DETECT_OS_APPLE
+   pthread_setname_np(name);
+#else
+#error Not sure how to call pthread_setname_np
+#endif
 #endif
    (void)name;
 }
@@ -131,7 +149,7 @@ util_get_L3_for_pinned_thread(thrd_t thread, unsigned cores_per_L3)
 static inline int64_t
 u_thread_get_time_nano(thrd_t thread)
 {
-#if defined(__linux__) && defined(HAVE_PTHREAD)
+#if defined(HAVE_PTHREAD) && !defined(__APPLE__)
    struct timespec ts;
    clockid_t cid;