diff --git a/cmake/Threads.cmake b/cmake/Threads.cmake new file mode 100644 index 000000000..09834117f --- /dev/null +++ b/cmake/Threads.cmake @@ -0,0 +1,63 @@ + + +macro_optional_find_package (Threads OFF) +macro_log_feature (THREADS_FOUND "Threads Support" + "GNU Threads Library (or similar)" + "http://www.gnu.org/software/threads") +if (WITH_Threads) + # + # CMAKE_THREAD_LIBS_INIT - the thread library + # CMAKE_USE_SPROC_INIT - are we using sproc? + # CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? + # CMAKE_USE_PTHREADS_INIT - are we using pthreads + # CMAKE_HP_PTHREADS_INIT - are we using hp pthreads + # + # The following import target is created + # + # :: + # + # Threads::Threads + # + # For systems with multiple thread libraries, caller can set + # + # :: + # + # CMAKE_THREAD_PREFER_PTHREAD + # + # If the use of the -pthread compiler and linker flag is prefered then the + # caller can set + # + # :: + # + set( THREADS_PREFER_PTHREAD_FLAG ON) + + if (CMAKE_USE_PTHREADS_INIT) + target_link_libraries(libYap pthread) + set (HAVE_READLINE_READLINE_H 1) +# set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) + check_function_exists( pthread_mutexattr_setkind_np HAVE_PTHREAD_MUTEXATTR_SETKIND_NP ) + check_function_exists( pthread_mutexattr_settype HAVE_PTHREAD_MUTEXATTR_SETTYPE ) + check_function_exists( pthread_setconcurrency HAVE_PTHREAD_SETCONCURRENCY ) + endif (CMAKE_USE_PTHREADS_INIT) + set(YAP_SYSTEM_OPTIONS "threads " ${YAP_SYSTEM_OPTIONS}) + set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADS=1) + # + # Please note that the compiler flag can only be used with the imported + # target. Use of both the imported target as well as this switch is highly + # recommended for new code. +endif (WITH_Threads) + + +cmake_dependent_option (WITH_Pthread_Locking + "use pthread locking primitives for internal locking" ON + "WITH_Threads" OFF) + +IF(WITH_Pthread_Lockin) + set_DIRECTORY_properties(PROPERTIES APPEND COMPILE_DEFINITIONS USE_PTHREAD_LOCKING=1) +ENDIF() + +CMAKE_DEPENDENT_OPTION (WITH_MAX_Threads 1024 + "maximum number of threads" "WITH_Threads" 1) + +CMAKE_DEPENDENT_OPTION (WITH_MAX_Workers 64 + "maximum number of or-parallel workers" "WITH_MAX_Workers" 1)