From 9d35ec163185c0cf5759c38daf03e9890e9d0657 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 24 Mar 2010 17:12:05 +0000 Subject: [PATCH] Added a compile test for pthread_setaffinity_np to workaround problem with the FreeBSD pthread lib containing the function but the pthread.h header not containing it. --- src/OpenThreads/pthreads/CMakeLists.txt | 30 ++++++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/OpenThreads/pthreads/CMakeLists.txt b/src/OpenThreads/pthreads/CMakeLists.txt index b20006be4..a297bd50d 100644 --- a/src/OpenThreads/pthreads/CMakeLists.txt +++ b/src/OpenThreads/pthreads/CMakeLists.txt @@ -30,6 +30,7 @@ ENDIF() SET(CMAKE_REQUIRED_LIBRARIES_SAFE "${CMAKE_REQUIRED_LIBRARIES}") SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + CHECK_FUNCTION_EXISTS(pthread_yield HAVE_PTHREAD_YIELD) IF(HAVE_PTHREAD_YIELD) ADD_DEFINITIONS(-DHAVE_PTHREAD_YIELD) @@ -64,16 +65,33 @@ IF(HAVE_PTHREAD_GETCONCURRENCY) ENDIF() CHECK_FUNCTION_EXISTS(pthread_setaffinity_np HAVE_PTHREAD_SETAFFINITY_NP) +IF(HAVE_PTHREAD_SETAFFINITY_NP) + # double check that pthread_setaffinity_np is available as FreeBSD header doesn't contain required function + CHECK_CXX_SOURCE_COMPILES(" + #include + int main() { + cpu_set_t cpumask; + CPU_ZERO( &cpumask ); + CPU_SET( 0, &cpumask ); + pthread_setaffinity_np( pthread_self(), sizeof(cpumask), &cpumask); + return 0; + }" COMPILES_PTHREAD_SETAFFINITY_NP) + + IF (NOT COMPILES_PTHREAD_SETAFFINITY_NP) + SET(HAVE_PTHREAD_SETAFFINITY_NP OFF) + ENDIF() +ENDIF() + IF(HAVE_PTHREAD_SETAFFINITY_NP) ADD_DEFINITIONS(-DHAVE_PTHREAD_SETAFFINITY_NP) ELSE() CHECK_CXX_SOURCE_COMPILES(" -#include -int main() { - cpu_set_t cpumask; - sched_setaffinity( 0, sizeof(cpumask), &cpumask ); - return 0; -}" HAVE_THREE_PARAM_SCHED_SETAFFINITY) + #include + int main() { + cpu_set_t cpumask; + sched_setaffinity( 0, sizeof(cpumask), &cpumask ); + return 0; + }" HAVE_THREE_PARAM_SCHED_SETAFFINITY) IF(HAVE_THREE_PARAM_SCHED_SETAFFINITY) ADD_DEFINITIONS(-DHAVE_THREE_PARAM_SCHED_SETAFFINITY) ELSE()