c11: #include <threads.h> when the os/platform provide it

Closes #6964

CC: mesa-stable

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18043>
This commit is contained in:
Yonggang Luo 2022-08-13 12:29:29 +08:00 committed by Marge Bot
parent f228c26520
commit f97ba1f95d
3 changed files with 28 additions and 1 deletions

View file

@ -1449,6 +1449,15 @@ if cc.has_header_symbol('time.h', 'struct timespec')
pre_args += '-DHAVE_STRUCT_TIMESPEC' pre_args += '-DHAVE_STRUCT_TIMESPEC'
endif endif
with_c11_threads = false
if cc.has_function('thrd_create', prefix: '#include <threads.h>')
if with_platform_android
# Current only Android's c11 <threads.h> are verified
pre_args += '-DHAVE_THRD_CREATE'
with_c11_threads = true
endif
endif
if cc.has_header_symbol('errno.h', 'program_invocation_name', if cc.has_header_symbol('errno.h', 'program_invocation_name',
args : '-D_GNU_SOURCE') args : '-D_GNU_SOURCE')
pre_args += '-DHAVE_PROGRAM_INVOCATION_NAME' pre_args += '-DHAVE_PROGRAM_INVOCATION_NAME'

View file

@ -22,7 +22,9 @@ files_mesa_util_c11 = files(
'time.c', 'time.c',
) )
if host_machine.system() == 'windows' if with_c11_threads
# no need implement c11 threads
elif host_machine.system() == 'windows'
files_mesa_util_c11 += 'threads_win32.c' files_mesa_util_c11 += 'threads_win32.c'
files_mesa_util_c11 += 'threads_win32_tls_callback.cpp' files_mesa_util_c11 += 'threads_win32_tls_callback.cpp'
else else

View file

@ -47,6 +47,20 @@
# error Not supported on this platform. # error Not supported on this platform.
#endif #endif
#if defined(HAVE_THRD_CREATE)
#include <threads.h>
#if defined(ANDROID)
/* Currently, only Android are verified that it's thrd_t are typedef of pthread_t
* So we can define _MTX_INITIALIZER_NP to PTHREAD_MUTEX_INITIALIZER
* FIXME: temporary non-standard hack to ease transition
*/
# define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER
#else
#error Can not define _MTX_INITIALIZER_NP properly for this platform
#endif
#else
/*---------------------------- macros ---------------------------*/ /*---------------------------- macros ---------------------------*/
#ifndef _Thread_local #ifndef _Thread_local
@ -185,4 +199,6 @@ int tss_set(tss_t, void *);
} }
#endif #endif
#endif /* HAVE_THRD_CREATE */
#endif /* C11_THREADS_H_INCLUDED_ */ #endif /* C11_THREADS_H_INCLUDED_ */