diff options
author | Marat Dukhan <marat@fb.com> | 2017-10-17 12:55:28 -0700 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2017-10-17 12:55:28 -0700 |
commit | be01e8cf59f680e14bf5f1fc575a7a133a4a5d7d (patch) | |
tree | 67cffa85433e19b0e92f987470a03fb28ec85934 | |
parent | 097a0c8971176257d7d565c4d37b754a12b3566b (diff) | |
download | platform_external_pthreadpool-be01e8cf59f680e14bf5f1fc575a7a133a4a5d7d.tar.gz platform_external_pthreadpool-be01e8cf59f680e14bf5f1fc575a7a133a4a5d7d.tar.bz2 platform_external_pthreadpool-be01e8cf59f680e14bf5f1fc575a7a133a4a5d7d.zip |
CMake configuration
-rw-r--r-- | CMakeLists.txt | 68 | ||||
-rw-r--r-- | cmake/FindFXdiv.cmake | 22 | ||||
-rw-r--r-- | cmake/FindGBenchmark.cmake | 32 | ||||
-rw-r--r-- | cmake/FindGTest.cmake | 38 |
4 files changed, 160 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cd4b767 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,68 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) + +INCLUDE(GNUInstallDirs) + +# ---[ Project +PROJECT(pthreadpool LANGUAGES C CXX) + +# ---[ Options. +OPTION(PTHREADPOOL_BUILD_TESTS "Build pthreadpool unit tests" OFF) +OPTION(PTHREADPOOL_BUILD_BENCHMARKS "Build pthreadpool micro-benchmarks" OFF) + +# ---[ CMake options +LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +IF(PTHREADPOOL_BUILD_TESTS) + ENABLE_TESTING() +ENDIF() + +# ---[ Build flags +IF(NOT MSVC) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +ENDIF() + +# ---[ pthreadpool library +IF(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + SET(PTHREADPOOL_SRCS src/threadpool-shim.c) +ELSE() + SET(PTHREADPOOL_SRCS src/threadpool-pthreads.c) +ENDIF() + +ADD_LIBRARY(pthreadpool ${PTHREADPOOL_SRCS}) +SET_TARGET_PROPERTIES(pthreadpool PROPERTIES PUBLIC_HEADER include/pthreadpool.h) +TARGET_INCLUDE_DIRECTORIES(pthreadpool PUBLIC include) +IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + SET(CMAKE_THREAD_PREFER_PTHREAD TRUE) + SET(THREADS_PREFER_PTHREAD_FLAG TRUE) + FIND_PACKAGE(Threads REQUIRED) + 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}) + +INSTALL(TARGETS pthreadpool + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +IF(PTHREADPOOL_BUILD_TESTS) + FIND_PACKAGE(GTest REQUIRED) + + 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}) +ENDIF() + +IF(PTHREADPOOL_BUILD_BENCHMARKS) + FIND_PACKAGE(GBenchmark REQUIRED) + + ADD_EXECUTABLE(latency-bench bench/latency.cc) + TARGET_INCLUDE_DIRECTORIES(latency-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) + TARGET_LINK_LIBRARIES(latency-bench pthreadpool ${GBENCHMARK_LIBRARIES}) + + ADD_EXECUTABLE(throughput-bench bench/throughput.cc) + TARGET_INCLUDE_DIRECTORIES(throughput-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) + TARGET_LINK_LIBRARIES(throughput-bench pthreadpool ${GBENCHMARK_LIBRARIES}) +ENDIF() diff --git a/cmake/FindFXdiv.cmake b/cmake/FindFXdiv.cmake new file mode 100644 index 0000000..bdb6403 --- /dev/null +++ b/cmake/FindFXdiv.cmake @@ -0,0 +1,22 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) + +FUNCTION(BUILD_FXDIV) + INCLUDE(ExternalProject) + ExternalProject_Add(fxdiv + GIT_REPOSITORY https://github.com/Maratyszcza/FXdiv.git + GIT_TAG master + INSTALL_COMMAND "" + BUILD_BYPRODUCTS <SOURCE_DIR>/include/fxdiv.h + ) + + ExternalProject_Get_Property(fxdiv source_dir) + SET(FXDIV_FOUND TRUE PARENT_SCOPE) + SET(FXDIV_DEPENDENCY fxdiv PARENT_SCOPE) + SET(FXDIV_INCLUDE_DIRS ${source_dir}/include PARENT_SCOPE) + + MARK_AS_ADVANCED(FORCE FXDIV_FOUND) + MARK_AS_ADVANCED(FORCE FXDIV_DEPENDENCY) + MARK_AS_ADVANCED(FORCE FXDIV_INCLUDE_DIRS) +ENDFUNCTION(BUILD_FXDIV) + +BUILD_FXDIV() diff --git a/cmake/FindGBenchmark.cmake b/cmake/FindGBenchmark.cmake new file mode 100644 index 0000000..bdadd00 --- /dev/null +++ b/cmake/FindGBenchmark.cmake @@ -0,0 +1,32 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) + +FUNCTION(BUILD_GBENCHMARK) + INCLUDE(ExternalProject) + SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE) + ExternalProject_Add(google_benchmark + URL https://github.com/google/benchmark/archive/v1.2.0.zip + URL_HASH SHA256=cc463b28cb3701a35c0855fbcefb75b29068443f1952b64dd5f4f669272e95ea + INSTALL_COMMAND "" + BUILD_BYPRODUCTS <BINARY_DIR>/src/libbenchmark.a + ) + + ExternalProject_Get_Property(google_benchmark install_dir) + + ADD_LIBRARY(gbenchmark STATIC IMPORTED) + ADD_DEPENDENCIES(gbenchmark google_benchmark) + + ExternalProject_Get_Property(google_benchmark source_dir) + SET(GBENCHMARK_INCLUDE_DIRS ${source_dir}/include PARENT_SCOPE) + + ExternalProject_Get_Property(google_benchmark binary_dir) + SET_TARGET_PROPERTIES(gbenchmark PROPERTIES IMPORTED_LOCATION ${binary_dir}/src/libbenchmark.a) + + SET(GBENCHMARK_FOUND TRUE PARENT_SCOPE) + SET(GBENCHMARK_LIBRARIES gbenchmark PARENT_SCOPE) + + MARK_AS_ADVANCED(FORCE GBENCHMARK_FOUND) + MARK_AS_ADVANCED(FORCE GBENCHMARK_INCLUDE_DIRS) + MARK_AS_ADVANCED(FORCE GBENCHMARK_LIBRARIES) +ENDFUNCTION(BUILD_GBENCHMARK) + +BUILD_GBENCHMARK() diff --git a/cmake/FindGTest.cmake b/cmake/FindGTest.cmake new file mode 100644 index 0000000..2926103 --- /dev/null +++ b/cmake/FindGTest.cmake @@ -0,0 +1,38 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) + +FUNCTION(BUILD_GTEST) + INCLUDE(ExternalProject) + SET(BUILD_GTEST ON CACHE BOOL "" FORCE) + SET(BUILD_GMOCK OFF CACHE BOOL "" FORCE) + ExternalProject_Add(googletest + URL https://github.com/google/googletest/archive/release-1.8.0.zip + URL_HASH SHA256=f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf + INSTALL_COMMAND "" + BUILD_BYPRODUCTS <BINARY_DIR>/googlemock/gtest/libgtest.a <BINARY_DIR>/googlemock/gtest/libgtest_main.a + ) + + ADD_LIBRARY(gtest UNKNOWN IMPORTED) + ADD_LIBRARY(gtest_main UNKNOWN IMPORTED) + ADD_DEPENDENCIES(gtest googletest) + ADD_DEPENDENCIES(gtest_main googletest) + + ExternalProject_Get_Property(googletest source_dir) + SET(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE) + + ExternalProject_Get_Property(googletest binary_dir) + SET_TARGET_PROPERTIES(gtest PROPERTIES IMPORTED_LOCATION ${binary_dir}/googlemock/gtest/libgtest.a) + SET_TARGET_PROPERTIES(gtest_main PROPERTIES IMPORTED_LOCATION ${binary_dir}/googlemock/gtest/libgtest_main.a) + + SET(GTEST_FOUND TRUE PARENT_SCOPE) + SET(GTEST_BOTH_LIBRARIES gtest gtest_main PARENT_SCOPE) + SET(GTEST_LIBRARIES gtest PARENT_SCOPE) + SET(GTEST_MAIN_LIBRARIES gtest_main PARENT_SCOPE) + + MARK_AS_ADVANCED(FORCE GTEST_FOUND) + MARK_AS_ADVANCED(FORCE GTEST_INCLUDE_DIRS) + MARK_AS_ADVANCED(FORCE GTEST_LIBRARIES) + MARK_AS_ADVANCED(FORCE GTEST_MAIN_LIBRARIES) + MARK_AS_ADVANCED(FORCE GTEST_BOTH_LIBRARIES) +ENDFUNCTION(BUILD_GTEST) + +BUILD_GTEST() |