diff options
author | Marat Dukhan <marat@fb.com> | 2017-10-17 19:57:56 -0700 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2017-10-17 19:57:56 -0700 |
commit | efce26f1dd00732365b1ab2b65d091e0d4e69505 (patch) | |
tree | 60fe7c40b85ab17fd0d0b5ee535221b64dd42d9f /CMakeLists.txt | |
parent | 6f35d78916158a35723475546822b32de8a3b713 (diff) | |
download | pthreadpool-efce26f1dd00732365b1ab2b65d091e0d4e69505.tar.gz |
Confu-like deps management in CMake build
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 71 |
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() |