FindThreads.cmake 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # This module determines the thread library of the system.
  2. # The following variables are set
  3. # CMAKE_THREAD_LIBS_INIT - the thread library to link into an application (-lpthread )
  4. # CMAKE_USE_SPROC_INIT - are we using sproc?
  5. # CMAKE_USE_WIN32_THREADS_INIT - are we using WIN32 threads
  6. # CMAKE_USE_PTHREADS_INIT - are we using pthreads
  7. # CMAKE_HP_PTHREADS_INIT - are we using hp pthreads
  8. INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
  9. INCLUDE (${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake)
  10. IF(CMAKE_SYSTEM MATCHES IRIX)
  11. CHECK_INCLUDE_FILE("sys/prctl.h" CMAKE_HAVE_SPROC_H)
  12. ENDIF(CMAKE_SYSTEM MATCHES IRIX)
  13. CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
  14. IF(CMAKE_HAVE_PTHREAD_H)
  15. IF(NOT CMAKE_HAVE_SPROC_H)
  16. IF(NOT APPLE)
  17. IF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
  18. MESSAGE(STATUS "Check if compiler accepts -pthread")
  19. TRY_RUN(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
  20. ${CMAKE_BINARY_DIR}
  21. ${CMAKE_ROOT}/Modules/CheckForPthreads.c
  22. CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
  23. OUTPUT_VARIABLE OUTPUT)
  24. IF(THREADS_HAVE_PTHREAD_ARG)
  25. IF(THREADS_PTHREAD_ARG MATCHES "^2$")
  26. MESSAGE(STATUS "Check if compiler accepts -pthread - yes")
  27. ELSE(THREADS_PTHREAD_ARG MATCHES "^2$")
  28. MESSAGE(STATUS "Check if compiler accepts -pthread - no")
  29. FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log
  30. "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
  31. ENDIF(THREADS_PTHREAD_ARG MATCHES "^2$")
  32. ELSE(THREADS_HAVE_PTHREAD_ARG)
  33. MESSAGE(STATUS "Check if compiler accepts -pthread - no")
  34. FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log
  35. "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
  36. ENDIF(THREADS_HAVE_PTHREAD_ARG)
  37. ENDIF("THREADS_HAVE_PTHREAD_ARG" MATCHES "^THREADS_HAVE_PTHREAD_ARG")
  38. ENDIF(NOT APPLE)
  39. IF(THREADS_HAVE_PTHREAD_ARG)
  40. SET(CMAKE_THREAD_LIBS_INIT "-pthread")
  41. ELSE(THREADS_HAVE_PTHREAD_ARG)
  42. CHECK_LIBRARY_EXISTS(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
  43. IF(CMAKE_HAVE_PTHREADS_CREATE)
  44. SET(CMAKE_THREAD_LIBS_INIT "-lpthreads")
  45. ENDIF(CMAKE_HAVE_PTHREADS_CREATE)
  46. CHECK_LIBRARY_EXISTS(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE)
  47. IF(CMAKE_HAVE_PTHREAD_CREATE)
  48. SET(CMAKE_THREAD_LIBS_INIT "-lpthread")
  49. ENDIF(CMAKE_HAVE_PTHREAD_CREATE)
  50. IF(CMAKE_SYSTEM MATCHES "SunOS.*")
  51. CHECK_LIBRARY_EXISTS(thread thr_create "" CMAKE_HAVE_THR_CREATE)
  52. IF(CMAKE_HAVE_THR_CREATE)
  53. SET(CMAKE_THREAD_LIBS_INIT "-lthread")
  54. ENDIF(CMAKE_HAVE_THR_CREATE)
  55. ENDIF(CMAKE_SYSTEM MATCHES "SunOS.*")
  56. ENDIF(THREADS_HAVE_PTHREAD_ARG)
  57. ENDIF(NOT CMAKE_HAVE_SPROC_H)
  58. ENDIF(CMAKE_HAVE_PTHREAD_H)
  59. IF(CMAKE_HAVE_SPROC_H)
  60. SET(CMAKE_USE_SPROC_INIT 1)
  61. ENDIF(CMAKE_HAVE_SPROC_H)
  62. IF(CMAKE_THREAD_LIBS_INIT)
  63. SET(CMAKE_USE_PTHREADS_INIT 1)
  64. ENDIF(CMAKE_THREAD_LIBS_INIT)
  65. IF(CMAKE_SYSTEM MATCHES "Windows")
  66. SET(CMAKE_USE_WIN32_THREADS_INIT 1)
  67. ENDIF(CMAKE_SYSTEM MATCHES "Windows")
  68. IF(CMAKE_USE_PTHREADS_INIT)
  69. IF(CMAKE_SYSTEM MATCHES "HP-UX-*")
  70. SET(CMAKE_THREAD_LIBS_INIT "-lcma")
  71. SET(CMAKE_USE_PTHREADS_INIT 1)
  72. SET(CMAKE_HP_PTHREADS_INIT 1)
  73. ENDIF(CMAKE_SYSTEM MATCHES "HP-UX-*")
  74. IF(CMAKE_SYSTEM MATCHES "OSF1-V*")
  75. SET(CMAKE_USE_PTHREADS_INIT 0)
  76. SET(CMAKE_THREAD_LIBS_INIT )
  77. ENDIF(CMAKE_SYSTEM MATCHES "OSF1-V*")
  78. IF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*")
  79. SET(CMAKE_USE_PTHREADS_INIT 1)
  80. SET(CMAKE_THREAD_LIBS_INIT )
  81. SET(CMAKE_USE_WIN32_THREADS_INIT 0)
  82. ENDIF(CMAKE_SYSTEM MATCHES "CYGWIN_NT*")
  83. ENDIF(CMAKE_USE_PTHREADS_INIT)