mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
FindThreads: Replace the pthread symbol checking in libc.
With asan build, we will have the pthread_create() symbol in libc. However, libasan doesn't have full pthread implementation. We can't assume that we have the pthread implementation in libc using pthread_create() symbol. Replace the pthread_create() with pthread_kill() as a quick fix.
This commit is contained in:
@@ -131,9 +131,17 @@ else()
|
||||
#
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY)
|
||||
if(NOT THREADS_HAVE_PTHREAD_ARG)
|
||||
# Check if pthread functions are in normal C library
|
||||
CHECK_SYMBOL_EXISTS(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE)
|
||||
if(CMAKE_HAVE_LIBC_CREATE)
|
||||
# Check if pthread functions are in normal C library.
|
||||
# If the pthread functions already exist in C library, we could just use
|
||||
# them instead of linking to the additional pthread library. We could
|
||||
# try to check any pthread symbol name, but here is an exception. If we
|
||||
# use clang asan build, we will find the pthread_create() symbol in the
|
||||
# libc(libasan). However, it doesn't have the full pthread implementation.
|
||||
# So, we can't assume that we have the pthread implementation in libc
|
||||
# using the pthread_create() checking here. Then, we turn to check the
|
||||
# pthread_kill() symbol instead.
|
||||
CHECK_SYMBOL_EXISTS(pthread_kill pthread.h CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
if(CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
set(CMAKE_THREAD_LIBS_INIT "")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(Threads_FOUND TRUE)
|
||||
@@ -159,7 +167,7 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE)
|
||||
if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_PTHREAD_KILL)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(Threads_FOUND TRUE)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user