diff --git a/CMakeLists.txt b/CMakeLists.txt index 1361e94..5798f2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR) PROJECT(pthreadpool C) # ---[ Options. -SET(PTHREADPOOL_LIBRARY_TYPE "default" CACHE STRING "Type of library (shared, static, or default) to build") -SET_PROPERTY(CACHE PTHREADPOOL_LIBRARY_TYPE PROPERTY STRINGS default static shared) OPTION(PTHREADPOOL_ALLOW_DEPRECATED_API "Enable deprecated API functions" ON) SET(PTHREADPOOL_SYNC_PRIMITIVE "default" CACHE STRING "Synchronization primitive (condvar, futex, gcd, event, or default) for worker threads") SET_PROPERTY(CACHE PTHREADPOOL_SYNC_PRIMITIVE PROPERTY STRINGS default condvar futex gcd event) @@ -14,7 +12,7 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$") ELSE() OPTION(PTHREADPOOL_ENABLE_FASTPATH "Enable fast path using atomic decrement instead of atomic compare-and-swap" OFF) ENDIF() -IF("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") +IF(FALSE) OPTION(PTHREADPOOL_BUILD_TESTS "Build pthreadpool unit tests" ON) OPTION(PTHREADPOOL_BUILD_BENCHMARKS "Build pthreadpool micro-benchmarks" ON) ELSE() @@ -40,7 +38,7 @@ MACRO(PTHREADPOOL_TARGET_ENABLE_CXX11 target) ENDMACRO() # ---[ Download deps -IF(NOT DEFINED FXDIV_SOURCE_DIR) +IF(FALSE) MESSAGE(STATUS "Downloading FXdiv to ${CMAKE_BINARY_DIR}/FXdiv-source (define FXDIV_SOURCE_DIR to avoid it)") CONFIGURE_FILE(cmake/DownloadFXdiv.cmake "${CMAKE_BINARY_DIR}/FXdiv-download/CMakeLists.txt") EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . @@ -92,21 +90,13 @@ ELSE() ENDIF() ADD_LIBRARY(pthreadpool_interface INTERFACE) -TARGET_INCLUDE_DIRECTORIES(pthreadpool_interface INTERFACE include) +TARGET_INCLUDE_DIRECTORIES(pthreadpool_interface INTERFACE $ $) IF(NOT PTHREADPOOL_ALLOW_DEPRECATED_API) TARGET_COMPILE_DEFINITIONS(pthreadpool_interface INTERFACE PTHREADPOOL_NO_DEPRECATED_API=1) ENDIF() INSTALL(FILES include/pthreadpool.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -IF(PTHREADPOOL_LIBRARY_TYPE STREQUAL "default") - ADD_LIBRARY(pthreadpool ${PTHREADPOOL_SRCS}) -ELSEIF(PTHREADPOOL_LIBRARY_TYPE STREQUAL "shared") - ADD_LIBRARY(pthreadpool SHARED ${PTHREADPOOL_SRCS}) -ELSEIF(PTHREADPOOL_LIBRARY_TYPE STREQUAL "static") - ADD_LIBRARY(pthreadpool STATIC ${PTHREADPOOL_SRCS}) -ELSE() - MESSAGE(FATAL_ERROR "Unsupported library type ${PTHREADPOOL_LIBRARY_TYPE}") -ENDIF() +ADD_LIBRARY(pthreadpool ${PTHREADPOOL_SRCS}) IF(PTHREADPOOL_SYNC_PRIMITIVE STREQUAL "condvar") TARGET_COMPILE_DEFINITIONS(pthreadpool PRIVATE PTHREADPOOL_USE_FUTEX=0) @@ -155,6 +145,9 @@ IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") ENDIF() # ---[ Configure FXdiv + +find_package(unofficial-fxdiv CONFIG REQUIRED) +add_library(fxdiv ALIAS unofficial::fxdiv::fxdiv) IF(NOT TARGET fxdiv) SET(FXDIV_BUILD_TESTS OFF CACHE BOOL "") SET(FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "") @@ -162,12 +155,24 @@ IF(NOT TARGET fxdiv) "${FXDIV_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/FXdiv") ENDIF() -TARGET_LINK_LIBRARIES(pthreadpool PRIVATE fxdiv) +TARGET_LINK_LIBRARIES(pthreadpool PUBLIC fxdiv) + -INSTALL(TARGETS pthreadpool +INSTALL(TARGETS pthreadpool pthreadpool_interface + EXPORT unofficial-pthreadpool-config-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(EXPORT unofficial-pthreadpool-config-targets NAMESPACE unofficial:: + FILE unofficial-pthreadpool-config-targets.cmake + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unofficial-${PROJECT_NAME}) # share/unofficial-pthreadpool + +include(CMakePackageConfigHelpers) +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/unofficial-pthreadpool-config.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unofficial-${PROJECT_NAME}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unofficial-pthreadpool-config.cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unofficial-${PROJECT_NAME}) + + IF(PTHREADPOOL_BUILD_TESTS) # ---[ Build google test IF(NOT TARGET gtest) diff --git a/Config.cmake.in b/Config.cmake.in new file mode 100644 index 0000000..575b8b1 --- /dev/null +++ b/Config.cmake.in @@ -0,0 +1,6 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(unofficial-fxdiv) + +include ( "${CMAKE_CURRENT_LIST_DIR}/unofficial-pthreadpool-config-targets.cmake" )