diff options
author | Marat Dukhan <marat@fb.com> | 2017-10-17 17:31:21 -0700 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2017-10-17 17:31:21 -0700 |
commit | b2ee7a9892e6ee4c8ce2fb1cc0f5b3015a1547a6 (patch) | |
tree | 7b6f245bf09d6c97e790e11d99a8394356846364 | |
parent | d0a0d042dbdf6ad66c4cfc450ea5d582b40a530a (diff) | |
download | FXdiv-b2ee7a9892e6ee4c8ce2fb1cc0f5b3015a1547a6.tar.gz |
Confu-like deps handling in CMake build
-rw-r--r-- | CMakeLists.txt | 56 | ||||
-rw-r--r-- | cmake/DownloadGoogleBenchmark.cmake | 15 | ||||
-rw-r--r-- | cmake/DownloadGoogleTest.cmake | 15 | ||||
-rw-r--r-- | cmake/FindGBenchmark.cmake | 32 | ||||
-rw-r--r-- | cmake/FindGTest.cmake | 38 |
5 files changed, 69 insertions, 87 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e27c73a..5a5037e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR) INCLUDE(GNUInstallDirs) @@ -20,6 +20,24 @@ IF(NOT MSVC) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 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") + +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") + +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") + # ---[ FXdiv library ADD_LIBRARY(fxdiv INTERFACE) TARGET_INCLUDE_DIRECTORIES(fxdiv INTERFACE include) @@ -27,39 +45,43 @@ TARGET_INCLUDE_DIRECTORIES(fxdiv INTERFACE include) INSTALL(FILES include/fxdiv.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) IF(FXDIV_BUILD_TESTS) - FIND_PACKAGE(GTest REQUIRED) + 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(multiply-high-test test/multiply-high.cc) - TARGET_INCLUDE_DIRECTORIES(multiply-high-test PRIVATE ${GTEST_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(multiply-high-test fxdiv ${GTEST_BOTH_LIBRARIES}) + TARGET_LINK_LIBRARIES(multiply-high-test fxdiv gtest gtest_main) ADD_TEST(multiply-high multiply-high-test) ADD_EXECUTABLE(quotient-test test/quotient.cc) - TARGET_INCLUDE_DIRECTORIES(quotient-test PRIVATE ${GTEST_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(quotient-test fxdiv ${GTEST_BOTH_LIBRARIES}) + TARGET_LINK_LIBRARIES(quotient-test fxdiv gtest gtest_main) ADD_TEST(quotient quotient-test) ENDIF() IF(FXDIV_BUILD_BENCHMARKS) - FIND_PACKAGE(GBenchmark REQUIRED) + # ---[ Build google benchmark + IF(NOT TARGET benchmark) + SET(BENCHMARK_ENABLE_TESTING ON CACHE BOOL "" FORCE) + ADD_SUBDIRECTORY( + "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" + "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark") + ENDIF() ADD_EXECUTABLE(init-bench bench/init.cc) - TARGET_INCLUDE_DIRECTORIES(init-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(init-bench fxdiv ${GBENCHMARK_LIBRARIES}) + TARGET_LINK_LIBRARIES(init-bench fxdiv benchmark) ADD_EXECUTABLE(multiply-bench bench/multiply.cc) - TARGET_INCLUDE_DIRECTORIES(multiply-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(multiply-bench fxdiv ${GBENCHMARK_LIBRARIES}) + TARGET_LINK_LIBRARIES(multiply-bench fxdiv benchmark) ADD_EXECUTABLE(divide-bench bench/divide.cc) - TARGET_INCLUDE_DIRECTORIES(divide-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(divide-bench fxdiv ${GBENCHMARK_LIBRARIES}) + TARGET_LINK_LIBRARIES(divide-bench fxdiv benchmark) ADD_EXECUTABLE(quotient-bench bench/quotient.cc) - TARGET_INCLUDE_DIRECTORIES(quotient-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(quotient-bench fxdiv ${GBENCHMARK_LIBRARIES}) + TARGET_LINK_LIBRARIES(quotient-bench fxdiv benchmark) ADD_EXECUTABLE(round-down-bench bench/round-down.cc) - TARGET_INCLUDE_DIRECTORIES(round-down-bench PRIVATE ${GBENCHMARK_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(round-down-bench fxdiv ${GBENCHMARK_LIBRARIES}) + TARGET_LINK_LIBRARIES(round-down-bench fxdiv benchmark) ENDIF() diff --git a/cmake/DownloadGoogleBenchmark.cmake b/cmake/DownloadGoogleBenchmark.cmake new file mode 100644 index 0000000..349e7cb --- /dev/null +++ b/cmake/DownloadGoogleBenchmark.cmake @@ -0,0 +1,15 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2) + +PROJECT(googlebenchmark-download NONE) + +INCLUDE(ExternalProject) +ExternalProject_Add(googlebenchmark + URL https://github.com/google/benchmark/archive/v1.2.0.zip + URL_HASH SHA256=cc463b28cb3701a35c0855fbcefb75b29068443f1952b64dd5f4f669272e95ea + SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googlebenchmark" + BINARY_DIR "${CONFU_DEPENDENCIES_BINARY_DIR}/googlebenchmark" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +) diff --git a/cmake/DownloadGoogleTest.cmake b/cmake/DownloadGoogleTest.cmake new file mode 100644 index 0000000..19f5eb1 --- /dev/null +++ b/cmake/DownloadGoogleTest.cmake @@ -0,0 +1,15 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2) + +PROJECT(googletest-download NONE) + +INCLUDE(ExternalProject) +ExternalProject_Add(googletest + URL https://github.com/google/googletest/archive/release-1.8.0.zip + URL_HASH SHA256=f3ed3b58511efd272eb074a3a6d6fb79d7c2e6a0e374323d1e6bcbcc1ef141bf + SOURCE_DIR "${CONFU_DEPENDENCIES_SOURCE_DIR}/googletest" + BINARY_DIR "${CONFU_DEPENDENCIES_BINARY_DIR}/googletest" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +) diff --git a/cmake/FindGBenchmark.cmake b/cmake/FindGBenchmark.cmake deleted file mode 100644 index 2c034b6..0000000 --- a/cmake/FindGBenchmark.cmake +++ /dev/null @@ -1,32 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) - -FUNCTION(BUILD_GBENCHMARK) - INCLUDE(ExternalProject) - SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "") - 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 deleted file mode 100644 index 2926103..0000000 --- a/cmake/FindGTest.cmake +++ /dev/null @@ -1,38 +0,0 @@ -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() |