cmake: build as many source files as possible
[folly.git] / CMake / folly-deps.cmake
index 8f972c5f4ac3ae62956323b1d73d1332c9f05534..2d0a8be4a1c87cc9905008248b76f9f8fdfca9db 100755 (executable)
-find_package(Boost 1.55.0 MODULE\r
-  COMPONENTS\r
-    context\r
-    chrono\r
-    date_time\r
-    filesystem\r
-    program_options\r
-    regex\r
-    system\r
-    thread\r
-  REQUIRED\r
-)\r
-find_package(DoubleConversion MODULE REQUIRED)\r
-find_package(GFlags MODULE REQUIRED)\r
-find_package(GLog MODULE REQUIRED)\r
-find_package(LibEvent MODULE REQUIRED)\r
-find_package(OpenSSL MODULE REQUIRED)\r
-find_package(PThread MODULE REQUIRED)\r
+include(CheckCXXSourceCompiles)
+
+find_package(Boost 1.55.0 MODULE
+  COMPONENTS
+    context
+    chrono
+    date_time
+    filesystem
+    program_options
+    regex
+    system
+    thread
+  REQUIRED
+)
+set(FOLLY_SHINY_DEPENDENCIES
+  Boost::chrono
+  Boost::context
+  Boost::date_time
+  Boost::filesystem
+  Boost::program_options
+  Boost::regex
+  Boost::system
+  OpenSSL::SSL
+  OpenSSL::Crypto
+)
+
+find_package(DoubleConversion MODULE REQUIRED)
+list(APPEND FOLLY_LINK_LIBRARIES ${DOUBLE_CONVERSION_LIBRARY})
+list(APPEND FOLLY_INCLUDE_DIRECTORIES ${DOUBLE_CONVERSION_INCLUDE_DIR})
+
+set(FOLLY_HAVE_LIBGFLAGS OFF)
+find_package(gflags CONFIG QUIET)
+if (gflags_FOUND)
+  message(STATUS "Found gflags from package config")
+  set(FOLLY_HAVE_LIBGFLAGS ON)
+  set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} gflags)
+  list(APPEND CMAKE_REQUIRED_LIBRARIES ${GFLAGS_LIBRARIES})
+  list(APPEND CMAKE_REQUIRED_INCLUDES ${GFLAGS_INCLUDE_DIR})
+else()
+  find_package(GFlags MODULE)
+  set(FOLLY_HAVE_LIBGFLAGS ${LIBGFLAGS_FOUND})
+  list(APPEND FOLLY_LINK_LIBRARIES ${LIBGFLAGS_LIBRARY})
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBGFLAGS_INCLUDE_DIR})
+  list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBGFLAGS_LIBRARY})
+  list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBGFLAGS_INCLUDE_DIR})
+endif()
+
+set(FOLLY_HAVE_LIBGLOG OFF)
+find_package(glog CONFIG QUIET)
+if (glog_FOUND)
+  message(STATUS "Found glog from package config")
+  set(FOLLY_HAVE_LIBGLOG ON)
+  set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} glog::glog)
+else()
+  find_package(GLog MODULE)
+  set(FOLLY_HAVE_LIBGLOG ${LIBGLOG_FOUND})
+  list(APPEND FOLLY_LINK_LIBRARIES ${LIBGLOG_LIBRARY})
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBGLOG_INCLUDE_DIR})
+endif()
+
+find_package(Libevent CONFIG QUIET)
+if(TARGET event)
+  message(STATUS "Found libevent from package config")
+  set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} event)
+else()
+  find_package(LibEvent MODULE REQUIRED)
+  list(APPEND FOLLY_LINK_LIBRARIES ${LIBEVENT_LIB})
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBEVENT_INCLUDE_DIR})
+endif()
+
+find_package(OpenSSL MODULE REQUIRED)
+
+find_package(PThread MODULE)
+set(FOLLY_HAVE_PTHREAD ${LIBPTHREAD_FOUND})
+if (LIBPTHREAD_FOUND)
+  list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBPTHREAD_LIBRARIES})
+  list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBPTHREAD_INCLUDE_DIRS})
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBPTHREAD_INCLUDE_DIRS})
+  list(APPEND FOLLY_LINK_LIBRARIES ${LIBPTHREAD_LIBRARIES})
+endif()
+
+find_package(ZLIB MODULE)
+set(FOLLY_HAVE_LIBZ ${ZLIB_FOUND})
+if (ZLIB_FOUND)
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRS})
+  list(APPEND FOLLY_LINK_LIBRARIES ${ZLIB_LIBRARIES})
+endif()
+
+find_package(BZip2 MODULE)
+set(FOLLY_HAVE_LIBBZ2 ${BZIP2_FOUND})
+if (BZIP2_FOUND)
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${BZIP2_INCLUDE_DIRS})
+  list(APPEND FOLLY_LINK_LIBRARIES ${BZIP2_LIBRARIES})
+endif()
+
+find_package(LibLZMA MODULE)
+set(FOLLY_HAVE_LIBLZMA ${LIBLZMA_FOUND})
+if (LIBLZMA_FOUND)
+  list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBLZMA_INCLUDE_DIRS})
+  list(APPEND FOLLY_LINK_LIBRARIES ${LIBLZMA_LIBRARIES})
+endif()
+
+# TODO: We should ideally build FindXXX modules for the following libraries,
+# rather than the simple checks we currently have here.
+CHECK_INCLUDE_FILE_CXX(zstd.h FOLLY_HAVE_LIBZSTD)
+if (FOLLY_HAVE_LIBZSTD)
+  list(APPEND FOLLY_LINK_LIBRARIES zstd)
+endif()
+CHECK_INCLUDE_FILE_CXX(snappy.h FOLLY_HAVE_LIBSNAPPY)
+if (FOLLY_HAVE_LIBSNAPPY)
+  list(APPEND FOLLY_LINK_LIBRARIES snappy)
+endif()
+CHECK_INCLUDE_FILE_CXX(lz4.h FOLLY_HAVE_LIBLZ4)
+if (FOLLY_HAVE_LIBLZ4)
+  list(APPEND FOLLY_LINK_LIBRARIES lz4)
+endif()
+
+find_package(LibDwarf)
+list(APPEND FOLLY_LINK_LIBRARIES ${LIBDWARF_LIBRARIES})
+list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBDWARF_INCLUDE_DIRS})
+CHECK_INCLUDE_FILE_CXX(libdwarf/dwarf.h FOLLY_HAVE_LIBDWARF_DWARF_H)
+
+find_package(Libiberty)
+list(APPEND FOLLY_LINK_LIBRARIES ${LIBIBERTY_LIBRARIES})
+list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBIBERTY_INCLUDE_DIRS})
+
+find_package(LibAIO)
+list(APPEND FOLLY_LINK_LIBRARIES ${LIBAIO_LIBRARIES})
+list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBAIO_INCLUDE_DIRS})
+
+find_package(LibURCU)
+list(APPEND FOLLY_LINK_LIBRARIES ${LIBURCU_LIBRARIES})
+list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBURCU_INCLUDE_DIRS})
+
+list(APPEND FOLLY_LINK_LIBRARIES ${CMAKE_DL_LIBS})
+list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})