@@ -21,6 +21,10 @@ ELSE()
2121 SET (PTHREADPOOL_BUILD_TESTS OFF CACHE BOOL "Build pthreadpool unit tests" )
2222 SET (PTHREADPOOL_BUILD_BENCHMARKS OFF CACHE BOOL "Build pthreadpool micro-benchmarks" )
2323ENDIF ()
24+ OPTION (USE_SYSTEM_LIBS "Use system libraries instead of downloading and building them" OFF )
25+ OPTION (USE_SYSTEM_GOOGLE_BENCHMARK "Use system Google Benchmark library instead of downloading and building it" ${USE_SYSTEM_LIBS} )
26+ OPTION (USE_SYSTEM_GOOGLE_TEST "Use system Google Test library instead of downloading and building it" ${USE_SYSTEM_LIBS} )
27+ OPTION (USE_SYSTEM_FXDIV "Use system FXdiv library instead of downloading and building it" ${USE_SYSTEM_LIBS} )
2428
2529# ---[ CMake options
2630INCLUDE (GNUInstallDirs )
@@ -40,7 +44,10 @@ MACRO(PTHREADPOOL_TARGET_ENABLE_CXX11 target)
4044ENDMACRO ()
4145
4246# ---[ Download deps
43- IF (NOT DEFINED FXDIV_SOURCE_DIR )
47+ IF (USE_SYSTEM_FXDIV)
48+ FIND_PACKAGE (FXdiv REQUIRED )
49+ ADD_LIBRARY (fxdiv INTERFACE IMPORTED )
50+ ELSEIF (NOT DEFINED FXDIV_SOURCE_DIR )
4451 MESSAGE (STATUS "Downloading FXdiv to ${CMAKE_BINARY_DIR} /FXdiv-source (define FXDIV_SOURCE_DIR to avoid it)" )
4552 CONFIGURE_FILE (cmake/DownloadFXdiv.cmake "${CMAKE_BINARY_DIR} /FXdiv-download/CMakeLists.txt" )
4653 EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " -G "${CMAKE_GENERATOR} " .
@@ -50,24 +57,32 @@ IF(NOT DEFINED FXDIV_SOURCE_DIR)
5057 SET (FXDIV_SOURCE_DIR "${CMAKE_BINARY_DIR} /FXdiv-source" CACHE STRING "FXdiv source directory" )
5158ENDIF ()
5259
53- IF (PTHREADPOOL_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR )
54- MESSAGE (STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR} /googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)" )
55- CONFIGURE_FILE (cmake/DownloadGoogleTest.cmake "${CMAKE_BINARY_DIR} /googletest-download/CMakeLists.txt" )
56- EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " -G "${CMAKE_GENERATOR} " .
57- WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googletest-download" )
58- EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " --build .
59- WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googletest-download" )
60- SET (GOOGLETEST_SOURCE_DIR "${CMAKE_BINARY_DIR} /googletest-source" CACHE STRING "Google Test source directory" )
60+ IF (PTHREADPOOL_BUILD_TESTS)
61+ IF (USE_SYSTEM_GOOGLE_TEST)
62+ FIND_PACKAGE (GTest REQUIRED )
63+ ELSEIF (NOT DEFINED GOOGLETEST_SOURCE_DIR )
64+ MESSAGE (STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR} /googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)" )
65+ CONFIGURE_FILE (cmake/DownloadGoogleTest.cmake "${CMAKE_BINARY_DIR} /googletest-download/CMakeLists.txt" )
66+ EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " -G "${CMAKE_GENERATOR} " .
67+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googletest-download" )
68+ EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " --build .
69+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googletest-download" )
70+ SET (GOOGLETEST_SOURCE_DIR "${CMAKE_BINARY_DIR} /googletest-source" CACHE STRING "Google Test source directory" )
71+ ENDIF ()
6172ENDIF ()
6273
63- IF (PTHREADPOOL_BUILD_BENCHMARKS AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR )
64- MESSAGE (STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR} /googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)" )
65- CONFIGURE_FILE (cmake/DownloadGoogleBenchmark.cmake "${CMAKE_BINARY_DIR} /googlebenchmark-download/CMakeLists.txt" )
66- EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " -G "${CMAKE_GENERATOR} " .
67- WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googlebenchmark-download" )
68- EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " --build .
69- WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googlebenchmark-download" )
70- SET (GOOGLEBENCHMARK_SOURCE_DIR "${CMAKE_BINARY_DIR} /googlebenchmark-source" CACHE STRING "Google Benchmark source directory" )
74+ IF (PTHREADPOOL_BUILD_BENCHMARKS)
75+ IF (USE_SYSTEM_GOOGLE_BENCHMARK)
76+ FIND_PACKAGE (benchmark REQUIRED )
77+ ELSEIF (NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR )
78+ MESSAGE (STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR} /googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)" )
79+ CONFIGURE_FILE (cmake/DownloadGoogleBenchmark.cmake "${CMAKE_BINARY_DIR} /googlebenchmark-download/CMakeLists.txt" )
80+ EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " -G "${CMAKE_GENERATOR} " .
81+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googlebenchmark-download" )
82+ EXECUTE_PROCESS (COMMAND "${CMAKE_COMMAND} " --build .
83+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /googlebenchmark-download" )
84+ SET (GOOGLEBENCHMARK_SOURCE_DIR "${CMAKE_BINARY_DIR} /googlebenchmark-source" CACHE STRING "Google Benchmark source directory" )
85+ ENDIF ()
7186ENDIF ()
7287
7388# ---[ pthreadpool library
@@ -91,11 +106,15 @@ ELSE()
91106ENDIF ()
92107
93108ADD_LIBRARY (pthreadpool_interface INTERFACE )
94- TARGET_INCLUDE_DIRECTORIES (pthreadpool_interface INTERFACE include )
109+ TARGET_INCLUDE_DIRECTORIES (pthreadpool_interface INTERFACE
110+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
111+ $<INSTALL_INTERFACE :include >
112+ )
95113IF (NOT PTHREADPOOL_ALLOW_DEPRECATED_API)
96114 TARGET_COMPILE_DEFINITIONS (pthreadpool_interface INTERFACE PTHREADPOOL_NO_DEPRECATED_API=1 )
97115ENDIF ()
98- INSTALL (FILES include/pthreadpool.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
116+ INSTALL (TARGETS pthreadpool_interface EXPORT ${CMAKE_PROJECT_NAME} Targets )
117+ INSTALL (DIRECTORY include/ DESTINATION include)
99118
100119IF (PTHREADPOOL_LIBRARY_TYPE STREQUAL "default" )
101120 ADD_LIBRARY (pthreadpool ${PTHREADPOOL_SRCS} )
@@ -154,7 +173,7 @@ IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
154173ENDIF ()
155174
156175# ---[ Configure FXdiv
157- IF (NOT TARGET fxdiv)
176+ IF (NOT TARGET fxdiv AND NOT USE_SYSTEM_FXDIV )
158177 SET (FXDIV_BUILD_TESTS OFF CACHE BOOL "" )
159178 SET (FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "" )
160179 ADD_SUBDIRECTORY (
@@ -163,13 +182,25 @@ IF(NOT TARGET fxdiv)
163182ENDIF ()
164183TARGET_LINK_LIBRARIES (pthreadpool PRIVATE fxdiv )
165184
185+ INCLUDE (CMakePackageConfigHelpers )
186+ CONFIGURE_PACKAGE_CONFIG_FILE (
187+ ${CMAKE_CURRENT_SOURCE_DIR} /cmake/${CMAKE_PROJECT_NAME}-config.cmake.in
188+ ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_PROJECT_NAME}-config.cmake
189+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${CMAKE_PROJECT_NAME}
190+ )
191+
166192INSTALL (TARGETS pthreadpool
193+ EXPORT ${CMAKE_PROJECT_NAME} Targets
167194 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
168195 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
196+ INSTALL (EXPORT ${CMAKE_PROJECT_NAME} Targets
197+ FILE ${CMAKE_PROJECT_NAME} -config.cmake
198+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/${CMAKE_PROJECT_NAME}
199+ )
169200
170201IF (PTHREADPOOL_BUILD_TESTS)
171202 # ---[ Build google test
172- IF (NOT TARGET gtest)
203+ IF (NOT TARGET gtest AND NOT USE_SYSTEM_GOOGLE_TEST )
173204 SET (gtest_force_shared_crt ON CACHE BOOL "" FORCE )
174205 ADD_SUBDIRECTORY (
175206 "${GOOGLETEST_SOURCE_DIR} "
@@ -193,7 +224,7 @@ ENDIF()
193224
194225IF (PTHREADPOOL_BUILD_BENCHMARKS)
195226 # ---[ Build google benchmark
196- IF (NOT TARGET benchmark)
227+ IF (NOT TARGET benchmark AND NOT USE_SYSTEM_GOOGLE_BENCHMARK )
197228 SET (BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" )
198229 ADD_SUBDIRECTORY (
199230 "${GOOGLEBENCHMARK_SOURCE_DIR} "
0 commit comments