"MSVC version '${MSVC_VERSION}' is not supported."
)
endif()
-else()
- message(
- FATAL_ERROR
- "The CMake build should only be used on Windows. "
- "For every other platform, use autoconf."
- )
endif()
set(FOLLY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/folly")
auto_sources(files "*.cpp" "RECURSE" "${FOLLY_DIR}")
auto_sources(hfiles "*.h" "RECURSE" "${FOLLY_DIR}")
-# No need for tests or benchmarks, and we can't build most experimental stuff.
+# Exclude tests, benchmarks, and other standalone utility executables from the
+# library sources. Test sources are listed separately below.
REMOVE_MATCHES_FROM_LISTS(files hfiles
MATCHES
"/build/"
- "/experimental/exception_tracer/"
"/experimental/hazptr/bench/"
"/experimental/hazptr/example/"
"/experimental/logging/example/"
"/Benchmark.cpp$"
)
list(REMOVE_ITEM files
- ${FOLLY_DIR}/Poly.cpp
- ${FOLLY_DIR}/SingletonStackTrace.cpp
${FOLLY_DIR}/experimental/JSONSchemaTester.cpp
- ${FOLLY_DIR}/experimental/RCUUtils.cpp
- ${FOLLY_DIR}/experimental/io/AsyncIO.cpp
${FOLLY_DIR}/experimental/io/HugePageUtil.cpp
${FOLLY_DIR}/experimental/symbolizer/ElfUtil.cpp
${FOLLY_DIR}/futures/test/Benchmark.cpp
)
list(REMOVE_ITEM hfiles
- ${FOLLY_DIR}/Fingerprint.h
- ${FOLLY_DIR}/Poly.h
- ${FOLLY_DIR}/Poly-inl.h
- ${FOLLY_DIR}/detail/PolyDetail.h
- ${FOLLY_DIR}/detail/TypeList.h
${FOLLY_DIR}/detail/SlowFingerprint.h
${FOLLY_DIR}/detail/FingerprintPolynomial.h
- ${FOLLY_DIR}/experimental/RCURefCount.h
- ${FOLLY_DIR}/experimental/RCUUtils.h
- ${FOLLY_DIR}/experimental/io/AsyncIO.h
- ${FOLLY_DIR}/poly/Nullable.h
- ${FOLLY_DIR}/poly/Regular.h
)
+
+# Exclude specific sources if we do not have third-party libraries
+# required to build them.
if (NOT FOLLY_USE_SYMBOLIZER)
REMOVE_MATCHES_FROM_LISTS(files hfiles
MATCHES
+ "/experimental/exception_tracer/"
"/experimental/symbolizer/"
)
+ list(REMOVE_ITEM files
+ ${FOLLY_DIR}/SingletonStackTrace.cpp
+ )
+endif()
+if (NOT ${LIBURCU_FOUND})
+ list(REMOVE_ITEM files
+ ${FOLLY_DIR}/experimental/RCUUtils.cpp
+ )
+ list(REMOVE_ITEM hfiles
+ ${FOLLY_DIR}/experimental/RCURefCount.h
+ ${FOLLY_DIR}/experimental/RCUUtils.h
+ )
+endif()
+if (NOT ${LIBAIO_FOUND})
+ list(REMOVE_ITEM files
+ ${FOLLY_DIR}/experimental/io/AsyncIO.cpp
+ )
+ list(REMOVE_ITEM hfiles
+ ${FOLLY_DIR}/experimental/io/AsyncIO.h
+ )
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
-list(REMOVE_ITEM files
- ${FOLLY_DIR}/Subprocess.cpp
-)
+ list(REMOVE_ITEM files
+ ${FOLLY_DIR}/Poly.cpp
+ ${FOLLY_DIR}/Subprocess.cpp
+ )
+ list(REMOVE_ITEM hfiles
+ ${FOLLY_DIR}/Poly.h
+ ${FOLLY_DIR}/Poly-inl.h
+ ${FOLLY_DIR}/detail/PolyDetail.h
+ ${FOLLY_DIR}/detail/TypeList.h
+ ${FOLLY_DIR}/poly/Nullable.h
+ ${FOLLY_DIR}/poly/Regular.h
+ )
endif()
add_library(folly_base OBJECT
option(BUILD_SLOW_TESTS "If enabled, compile tests that take a while to run in debug mode." OFF)
if (BUILD_TESTS)
find_package(GMock MODULE REQUIRED)
+ include(GoogleTest OPTIONAL RESULT_VARIABLE HAVE_CMAKE_GTEST)
+ enable_testing()
add_library(folly_test_support
+ ${FOLLY_DIR}/test/common/TestMain.cpp
${FOLLY_DIR}/test/DeterministicSchedule.cpp
${FOLLY_DIR}/test/DeterministicSchedule.h
${FOLLY_DIR}/test/SingletonTestStructs.cpp
TEST chrono_conv_test SOURCES ConvTest.cpp
DIRECTORY compression/test/
- TEST compression_test SOURCES CompressionTest.cpp
+ TEST compression_test SLOW SOURCES CompressionTest.cpp
DIRECTORY container/test/
TEST access_test SOURCES AccessTest.cpp
TEST array_test SOURCES ArrayTest.cpp
TEST bit_iterator_test SOURCES BitIteratorTest.cpp
- TEST enumerate_test SOURCES EnumerateTest.cpp
+ # TODO: CMake's gtest_add_tests() function currently chokes on
+ # EnumerateTest.cpp since it uses macros to define tests.
+ #TEST enumerate_test SOURCES EnumerateTest.cpp
TEST evicting_cache_map_test SOURCES EvictingCacheMapTest.cpp
TEST foreach_test SOURCES ForeachTest.cpp
TEST merge_test SOURCES MergeTest.cpp
TEST serial_executor_test SOURCES SerialExecutorTest.cpp
TEST thread_pool_executor_test SOURCES ThreadPoolExecutorTest.cpp
TEST threaded_executor_test SOURCES ThreadedExecutorTest.cpp
+ TEST timed_drivable_executor_test SOURCES TimedDrivableExecutorTest.cpp
DIRECTORY executors/task_queue/test/
TEST unbounded_blocking_queue_test SOURCES UnboundedBlockingQueueTest.cpp