From 8f5a456eb28a43a5620064a5074e0ec9b93d4f70 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Wed, 18 Apr 2018 13:13:27 +0000 Subject: [PATCH] [cmake] Improve pthread_[gs]etname_np detection code Summary: Due to some android peculiarities, in some build configurations (statically linked executables targeting older releases) we could detect the presence of these functions (because they are present in libc.a, where check_library_exists searches), but then fail to build because the headers did not include the definition. This attempts to remedy that by upgrading the check_library_exists to check_symbol_exists, which will check that the function is declared too. I am hoping that a more thorough check will make the messy #ifdef we have accumulated in the code obsolete, so I optimistically try to remove them. Reviewers: zturner, kparzysz, danalbert Subscribers: srhines, mgorny, krytarowski, llvm-commits Differential Revision: https://reviews.llvm.org/D45359 llvm-svn: 330251 --- llvm/cmake/config-ix.cmake | 15 +++++++++------ llvm/lib/Support/Unix/Threading.inc | 2 -- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake index b6f0c3695603..aa4f8257d8ec 100644 --- a/llvm/cmake/config-ix.cmake +++ b/llvm/cmake/config-ix.cmake @@ -252,12 +252,15 @@ endif() # This check requires _GNU_SOURCE check_symbol_exists(sched_getaffinity sched.h HAVE_SCHED_GETAFFINITY) check_symbol_exists(CPU_COUNT sched.h HAVE_CPU_COUNT) -if(HAVE_LIBPTHREAD) - check_library_exists(pthread pthread_getname_np "" HAVE_PTHREAD_GETNAME_NP) - check_library_exists(pthread pthread_setname_np "" HAVE_PTHREAD_SETNAME_NP) -elseif(PTHREAD_IN_LIBC) - check_library_exists(c pthread_getname_np "" HAVE_PTHREAD_GETNAME_NP) - check_library_exists(c pthread_setname_np "" HAVE_PTHREAD_SETNAME_NP) +if (NOT PURE_WINDOWS) + if (LLVM_PTHREAD_LIB) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${LLVM_PTHREAD_LIB}) + endif() + check_symbol_exists(pthread_getname_np pthread.h HAVE_PTHREAD_GETNAME_NP) + check_symbol_exists(pthread_setname_np pthread.h HAVE_PTHREAD_SETNAME_NP) + if (LLVM_PTHREAD_LIB) + list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${LLVM_PTHREAD_LIB}) + endif() endif() # available programs checks diff --git a/llvm/lib/Support/Unix/Threading.inc b/llvm/lib/Support/Unix/Threading.inc index dc4912aceb38..31cae474803a 100644 --- a/llvm/lib/Support/Unix/Threading.inc +++ b/llvm/lib/Support/Unix/Threading.inc @@ -204,7 +204,6 @@ void llvm::get_thread_name(SmallVectorImpl &Name) { Name.append(buf, buf + strlen(buf)); #elif defined(__linux__) -#if (defined(__GLIBC__) && defined(_GNU_SOURCE)) || defined(__ANDROID__) #if HAVE_PTHREAD_GETNAME_NP constexpr uint32_t len = get_max_thread_name_length_impl(); char Buffer[len] = {'\0'}; // FIXME: working around MSan false positive. @@ -212,5 +211,4 @@ void llvm::get_thread_name(SmallVectorImpl &Name) { Name.append(Buffer, Buffer + strlen(Buffer)); #endif #endif -#endif }