aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorMarat Dukhan <marat@fb.com>2017-10-17 19:57:56 -0700
committerMarat Dukhan <marat@fb.com>2017-10-17 19:57:56 -0700
commitefce26f1dd00732365b1ab2b65d091e0d4e69505 (patch)
tree60fe7c40b85ab17fd0d0b5ee535221b64dd42d9f /CMakeLists.txt
parent6f35d78916158a35723475546822b32de8a3b713 (diff)
downloadpthreadpool-efce26f1dd00732365b1ab2b65d091e0d4e69505.tar.gz
Confu-like deps management in CMake build
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt71
1 files changed, 58 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f849edb..5c254e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR)
INCLUDE(GNUInstallDirs)
@@ -10,11 +10,40 @@ OPTION(PTHREADPOOL_BUILD_TESTS "Build pthreadpool unit tests" ON)
OPTION(PTHREADPOOL_BUILD_BENCHMARKS "Build pthreadpool micro-benchmarks" ON)
# ---[ CMake options
-LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
IF(PTHREADPOOL_BUILD_TESTS)
ENABLE_TESTING()
ENDIF()
+# ---[ Download deps
+SET(CONFU_DEPENDENCIES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps
+ CACHE PATH "Confu-style dependencies source directory")
+SET(CONFU_DEPENDENCIES_BINARY_DIR ${CMAKE_BINARY_DIR}/deps
+ CACHE PATH "Confu-style dependencies binary directory")
+
+IF(NOT TARGET fxdiv)
+ CONFIGURE_FILE(cmake/DownloadFXdiv.cmake fxdiv-download/CMakeLists.txt)
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/fxdiv-download")
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/fxdiv-download")
+ENDIF()
+
+IF(NOT TARGET gtest)
+ CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake googletest-download/CMakeLists.txt)
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download")
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download")
+ENDIF()
+
+IF(NOT TARGET benchmark)
+ CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake googlebenchmark-download/CMakeLists.txt)
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googlebenchmark-download")
+ EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" --build .
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googlebenchmark-download")
+ENDIF()
+
# ---[ Build flags
IF(NOT MSVC)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
@@ -38,9 +67,15 @@ IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
TARGET_LINK_LIBRARIES(pthreadpool PUBLIC Threads::Threads)
ENDIF()
-FIND_PACKAGE(FXdiv REQUIRED)
-TARGET_INCLUDE_DIRECTORIES(pthreadpool PRIVATE ${FXDIV_INCLUDE_DIRS})
-ADD_DEPENDENCIES(pthreadpool ${FXDIV_DEPENDENCY})
+# ---[ Configure FXdiv
+IF(NOT TARGET fxdiv)
+ SET(FXDIV_BUILD_TESTS OFF CACHE BOOL "")
+ SET(FXDIV_BUILD_BENCHMARKS OFF CACHE BOOL "")
+ ADD_SUBDIRECTORY(
+ "${CONFU_DEPENDENCIES_SOURCE_DIR}/fxdiv"
+ "${CONFU_DEPENDENCIES_BINARY_DIR}/fxdiv")
+ENDIF()
+TARGET_LINK_LIBRARIES(pthreadpool PRIVATE fxdiv)
INSTALL(TARGETS pthreadpool
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -48,21 +83,31 @@ INSTALL(TARGETS pthreadpool
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
IF(PTHREADPOOL_BUILD_TESTS)
- FIND_PACKAGE(GTest REQUIRED)
+ # ---[ Build google test
+ IF(NOT TARGET gtest)
+ SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ ADD_SUBDIRECTORY(
+ "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest"
+ "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest")
+ ENDIF()
ADD_EXECUTABLE(pthreadpool-test test/pthreadpool.cc)
- TARGET_INCLUDE_DIRECTORIES(pthreadpool-test PRIVATE ${GTEST_INCLUDE_DIRS})
- TARGET_LINK_LIBRARIES(pthreadpool-test pthreadpool ${GTEST_BOTH_LIBRARIES})
+ TARGET_LINK_LIBRARIES(pthreadpool-test pthreadpool gtest gtest_main)
+ ADD_TEST(pthreadpool pthreadpool-test)
ENDIF()
IF(PTHREADPOOL_BUILD_BENCHMARKS)
- FIND_PACKAGE(GBenchmark REQUIRED)
+ # ---[ Build google benchmark
+ IF(NOT TARGET benchmark)
+ SET(BENCHMARK_ENABLE_TESTING ON CACHE BOOL "")
+ ADD_SUBDIRECTORY(
+ "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark"
+ "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark")
+ ENDIF()
ADD_EXECUTABLE(latency-bench bench/latency.cc)
- TARGET_INCLUDE_DIRECTORIES(latency-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS})
- TARGET_LINK_LIBRARIES(latency-bench pthreadpool ${GBENCHMARK_LIBRARIES})
+ TARGET_LINK_LIBRARIES(latency-bench pthreadpool benchmark)
ADD_EXECUTABLE(throughput-bench bench/throughput.cc)
- TARGET_INCLUDE_DIRECTORIES(throughput-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS})
- TARGET_LINK_LIBRARIES(throughput-bench pthreadpool ${GBENCHMARK_LIBRARIES})
+ TARGET_LINK_LIBRARIES(throughput-bench pthreadpool benchmark)
ENDIF()