aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarat Dukhan <marat@fb.com>2017-10-17 17:31:21 -0700
committerMarat Dukhan <marat@fb.com>2017-10-17 17:31:21 -0700
commitb2ee7a9892e6ee4c8ce2fb1cc0f5b3015a1547a6 (patch)
tree7b6f245bf09d6c97e790e11d99a8394356846364
parentd0a0d042dbdf6ad66c4cfc450ea5d582b40a530a (diff)
downloadFXdiv-b2ee7a9892e6ee4c8ce2fb1cc0f5b3015a1547a6.tar.gz
Confu-like deps handling in CMake build
-rw-r--r--CMakeLists.txt56
-rw-r--r--cmake/DownloadGoogleBenchmark.cmake15
-rw-r--r--cmake/DownloadGoogleTest.cmake15
-rw-r--r--cmake/FindGBenchmark.cmake32
-rw-r--r--cmake/FindGTest.cmake38
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()