cmake_minimum_required(VERSION 3.9.0) project(pthreads) set(PTHREAD_PUBLIC_HEADERS pthread.h sched.h semaphore.h) set(PTHREAD_SHARED_SOURCES autostatic.c barrier.c cancel.c cleanup.c condvar.c create.c dll.c errno.c exit.c fork.c global.c misc.c mutex.c nonportable.c private.c rwlock.c sched.c semaphore.c signal.c spin.c sync.c tsd.c attr.C version.rc ) set(PTHREAD_STATIC_SOURCES autostatic.c cleanup.c create.c dll.c errno.c fork.c global.c pthread_attr_destroy.c pthread_attr_getdetachstate.c pthread_attr_getinheritsched.c pthread_attr_getschedparam.c pthread_attr_getschedpolicy.c pthread_attr_getscope.c pthread_attr_getstackaddr.c pthread_attr_getstacksize.c pthread_attr_init.c pthread_attr_setdetachstate.c pthread_attr_setinheritsched.c pthread_attr_setschedparam.c pthread_attr_setschedpolicy.c pthread_attr_setscope.c pthread_attr_setstackaddr.c pthread_attr_setstacksize.c pthread_barrier_destroy.c pthread_barrier_init.c pthread_barrier_wait.c pthread_barrierattr_destroy.c pthread_barrierattr_getpshared.c pthread_barrierattr_init.c pthread_barrierattr_setpshared.c pthread_cancel.c pthread_cond_destroy.c pthread_cond_init.c pthread_cond_signal.c pthread_cond_wait.c pthread_condattr_destroy.c pthread_condattr_getpshared.c pthread_condattr_init.c pthread_condattr_setpshared.c pthread_delay_np.c pthread_detach.c pthread_equal.c pthread_exit.c pthread_getconcurrency.c pthread_getschedparam.c pthread_getspecific.c pthread_getunique_np.c pthread_getw32threadhandle_np.c pthread_join.c pthread_key_create.c pthread_key_delete.c pthread_kill.c pthread_mutex_consistent.c pthread_mutex_destroy.c pthread_mutex_init.c pthread_mutex_lock.c pthread_mutex_timedlock.c pthread_mutex_trylock.c pthread_mutex_unlock.c pthread_mutexattr_destroy.c pthread_mutexattr_getkind_np.c pthread_mutexattr_getpshared.c pthread_mutexattr_getrobust.c pthread_mutexattr_gettype.c pthread_mutexattr_init.c pthread_mutexattr_setkind_np.c pthread_mutexattr_setpshared.c pthread_mutexattr_setrobust.c pthread_mutexattr_settype.c pthread_num_processors_np.c pthread_once.c pthread_rwlock_destroy.c pthread_rwlock_init.c pthread_rwlock_rdlock.c pthread_rwlock_tryrdlock.c pthread_rwlock_trywrlock.c pthread_rwlock_unlock.c pthread_rwlock_wrlock.c pthread_rwlockattr_destroy.c pthread_rwlockattr_getpshared.c pthread_rwlockattr_init.c pthread_rwlockattr_setpshared.c pthread_self.c pthread_setcancelstate.c pthread_setcanceltype.c pthread_setconcurrency.c pthread_setschedparam.c pthread_setspecific.c pthread_spin_destroy.c pthread_spin_init.c pthread_spin_lock.c pthread_spin_trylock.c pthread_spin_unlock.c pthread_testcancel.c pthread_timechange_handler_np.c pthread_win32_attach_detach_np.c ptw32_calloc.c ptw32_callUserDestroyRoutines.c ptw32_cond_check_need_init.c ptw32_getprocessors.c ptw32_is_attr.c ptw32_MCS_lock.c ptw32_mutex_check_need_init.c ptw32_new.c ptw32_processInitialize.c ptw32_processTerminate.c ptw32_relmillisecs.c ptw32_reuse.c ptw32_rwlock_check_need_init.c ptw32_semwait.c ptw32_spinlock_check_need_init.c ptw32_threadDestroy.c ptw32_threadStart.c ptw32_throw.c ptw32_timespec.c ptw32_tkAssocCreate.c ptw32_tkAssocDestroy.c sched_get_priority_max.c sched_get_priority_min.c sched_getscheduler.c sched_setscheduler.c sched_yield.c sem_close.c sem_destroy.c sem_getvalue.c sem_init.c sem_open.c sem_post_multiple.c sem_post.c sem_timedwait.c sem_trywait.c sem_unlink.c sem_wait.c signal.c w32_CancelableWait.c ) add_definitions(-DPTW32_ARCH="${PTW32_ARCH}" -DPTW32_RC_MSC -DHAVE_PTW32_CONFIG_H -D_TIMESPEC_DEFINED) if(BUILD_SHARED_LIBS) set(PTHREAD_SOURCES ${PTHREAD_SHARED_SOURCES}) add_definitions(-DPTW32_BUILD) else() set(PTHREAD_SOURCES ${PTHREAD_STATIC_SOURCES}) add_definitions(-DPTW32_STATIC_LIB) endif() if(PTHREADS_BUILD_CPP) set(PTHREADS_EXCEPTION_SCHEME CE) add_definitions(/__CLEANUP_CXX) elseif(PTHREADS_BUILD_SEH) set(PTHREADS_EXCEPTION_SCHEME SE) add_definitions(/__CLEANUP_SEH) else() set(PTHREADS_EXCEPTION_SCHEME C) endif() set(PTHREADS_COMPATIBILITY_VERSION 2) set(CMAKE_DEBUG_POSTFIX d) set(PTHREADS_COMPILER V) set(PTHREADS_LIBRARY "pthread${PTHREADS_COMPILER}${PTHREADS_EXCEPTION_SCHEME}${PTHREADS_COMPATIBILITY_VERSION}") add_library(pthreads ${PTHREAD_SOURCES}) target_include_directories(pthreads PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) set_target_properties(pthreads PROPERTIES OUTPUT_NAME ${PTHREADS_LIBRARY}) if(NOT DISABLE_INSTALL_HEADERS) set_property(TARGET pthreads PROPERTY PUBLIC_HEADER ${PTHREAD_PUBLIC_HEADERS}) endif() install( TARGETS pthreads EXPORT pthreads-config RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib PUBLIC_HEADER DESTINATION include INCLUDES DESTINATION include ) install(EXPORT pthreads-config DESTINATION share/pthreads)