/* * Copyright (c) Facebook, Inc. and its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _FOLLY_CONFIG_H #define _FOLLY_CONFIG_H 1 #ifdef __APPLE__ #include // @manual #endif #include #if !defined(FOLLY_MOBILE) #if defined(__ANDROID__) || \ (defined(__APPLE__) && \ (TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR || TARGET_OS_IPHONE)) #define FOLLY_MOBILE 1 #else #define FOLLY_MOBILE 0 #endif #endif // FOLLY_MOBILE /* define if the Boost library is available */ #ifndef FOLLY_HAVE_BOOST #define FOLLY_HAVE_BOOST /**/ #endif /* define if the Boost::Regex library is available */ #ifndef FOLLY_HAVE_BOOST_REGEX #define FOLLY_HAVE_BOOST_REGEX /**/ #endif /* define if the Boost::Thread library is available */ #ifndef FOLLY_HAVE_BOOST_THREAD #define FOLLY_HAVE_BOOST_THREAD /**/ #endif /* Define to 1 if we support clock_gettime(2) */ #if !defined(FOLLY_HAVE_CLOCK_GETTIME) && \ (!defined(__APPLE__) || defined(CLOCK_REALTIME)) && !defined(_WIN32) #define FOLLY_HAVE_CLOCK_GETTIME 1 #endif #if !defined(_WIN32) #define FOLLY_USE_SYMBOLIZER 1 #endif #if !defined(FOLLY_HAVE_ELF) && defined(__linux__) && !defined(__ANDROID__) #define FOLLY_HAVE_ELF 1 #endif #if !defined(FOLLY_HAVE_DWARF) && defined(__linux__) && !defined(__ANDROID__) #define FOLLY_HAVE_DWARF 1 #endif #if !defined(FOLLY_HAVE_SWAPCONTEXT) && !defined(_WIN32) && \ !defined(__ANDROID__) #define FOLLY_HAVE_SWAPCONTEXT 1 #endif #if (defined(__linux__) && !defined(__ANDROID__)) || defined(__APPLE__) #define FOLLY_HAVE_BACKTRACE 1 #endif #if !defined(FOLLY_HAVE_LIBUNWIND) && !defined(_WIN32) && \ !(defined(__APPLE__) && defined(__arm__)) && !defined(__ANDROID__) #define FOLLY_HAVE_LIBUNWIND 1 #endif #if __has_include() #include #endif /* Define to 1 if you have the `double_conversion' library (-ldouble_conversion). */ #ifndef FOLLY_HAVE_LIBDOUBLE_CONVERSION #define FOLLY_HAVE_LIBDOUBLE_CONVERSION 1 #endif /* Define to 1 if you have the `gflags' library (-lgflags). */ #ifndef FOLLY_HAVE_LIBGFLAGS #define FOLLY_HAVE_LIBGFLAGS 1 #endif /* Define to 1 if you have the `glog' library (-lglog). */ #ifndef FOLLY_HAVE_LIBGLOG #define FOLLY_HAVE_LIBGLOG 1 #endif /* Define to 1 if you have the `gtest' library (-lgtest). */ #ifndef FOLLY_HAVE_LIBGTEST #define FOLLY_HAVE_LIBGTEST 1 #endif /* Define to 1 if you have the `gtest_main' library (-lgtest_main). */ #ifndef FOLLY_HAVE_LIBGTEST_MAIN #define FOLLY_HAVE_LIBGTEST_MAIN 1 #endif /* Define to 1 if you have the `jemalloc' library (-ljemalloc). */ #if !defined(FOLLY_HAVE_LIBJEMALLOC) && !defined(_WIN32) #define FOLLY_HAVE_LIBJEMALLOC 1 #endif /* Define to 1 if you have the `tcmalloc' library (-ltcmalloc). */ #if !defined(FOLLY_HAVE_LIBTCMALLOC) && !defined(_WIN32) #define FOLLY_HAVE_LIBTCMALLOC 1 #endif /* Define to 1 if you have the `lz4' library (-llz4). */ #if !defined(FOLLY_HAVE_LIBLZ4) && !FOLLY_MOBILE && !defined(__APPLE__) #define FOLLY_HAVE_LIBLZ4 1 #endif /* Define to 1 if you have the `lzma' library (-llzma). */ #if !defined(FOLLY_HAVE_LIBLZMA) && !FOLLY_MOBILE && !defined(__APPLE__) #define FOLLY_HAVE_LIBLZMA 1 #endif /* Define to 1 if you have the `snappy' library (-lsnappy). */ #if !defined(FOLLY_HAVE_LIBSNAPPY) && !FOLLY_MOBILE && !defined(__APPLE__) #define FOLLY_HAVE_LIBSNAPPY 1 #endif /* Define to 1 if you have the `z' library (-lz). */ #ifndef FOLLY_HAVE_LIBZ #define FOLLY_HAVE_LIBZ 1 #endif /* Define to 1 if you have the `zstd' library (-lzstd). */ #ifndef FOLLY_HAVE_LIBZSTD #define FOLLY_HAVE_LIBZSTD 1 #endif /* Define to 1 if you have the `bz2' library (-lbz2). */ #if !defined(FOLLY_HAVE_LIBBZ2) && !FOLLY_MOBILE && !defined(__APPLE__) #define FOLLY_HAVE_LIBBZ2 1 #endif /* Defined to 1 if you have linux vdso */ #if !defined(FOLLY_HAVE_LINUX_VDSO) && !defined(_MSC_VER) && !FOLLY_MOBILE && \ !defined(__APPLE__) && !defined(_WIN32) #define FOLLY_HAVE_LINUX_VDSO 1 #endif /* Define to 1 if you have the `malloc_size' function. */ /* #undef HAVE_MALLOC_SIZE */ /* Define to 1 if you have the `malloc_usable_size' function. */ #if !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE) && !defined(__APPLE__) && \ !defined(_WIN32) && !(defined(ANDROID) && __ANDROID_API__ < 17) #define FOLLY_HAVE_MALLOC_USABLE_SIZE 1 #endif // Clang doesn't support ifuncs. This also allows ifunc support to be explicitly // passed in as a compile flag. #ifndef FOLLY_HAVE_IFUNC #if defined(__clang__) || defined(__APPLE__) && !defined(_WIN32) #define FOLLY_HAVE_IFUNC 0 #else #define FOLLY_HAVE_IFUNC 1 #endif #endif /* Define to 1 if the system has the type `__int128'. */ #if !defined(FOLLY_HAVE_INT128_T) && __SIZEOF_INT128__ >= 16 && !defined(_WIN32) #define FOLLY_HAVE_INT128_T 1 #endif /* Define to 1 if the system needs the standard integer traits defined for the * type `__int128'. */ #if !defined(FOLLY_SUPPLY_MISSING_INT128_TRAITS) && FOLLY_HAVE_INT128_T && \ !defined(__APPLE__) && defined(__STRICT_ANSI__) && \ (defined(__llvm__) && !defined(_LIBCPP_VERSION)) #define FOLLY_SUPPLY_MISSING_INT128_TRAITS 1 #endif /* Define if g++ supports C++0x features. */ #ifndef FOLLY_HAVE_STDCXX_0X #define FOLLY_HAVE_STDCXX_0X /**/ #endif // Define to 1 if you have the `preadv' and `pwritev' functions, respectively #if !defined(FOLLY_HAVE_PREADV) && !defined(FOLLY_HAVE_PWRITEV) #if defined(__GLIBC_PREREQ) && !defined(__APPLE__) #if __GLIBC_PREREQ(2, 10) #define FOLLY_HAVE_PREADV 1 #define FOLLY_HAVE_PWRITEV 1 #endif #endif #endif #ifndef FOLLY_HAVE_PREADV #define FOLLY_HAVE_PREADV 0 #endif #ifndef FOLLY_HAVE_PWRITEV #define FOLLY_HAVE_PWRITEV 0 #endif /* Define to 1 if your architecture can handle unaligned loads and stores. */ #if !defined(FOLLY_HAVE_UNALIGNED_ACCESS) && !defined(__ANDROID__) && \ !defined(__arm__) #define FOLLY_HAVE_UNALIGNED_ACCESS 1 #endif /* Define to 1 if the linker supports weak symbols. */ #if !defined(FOLLY_HAVE_WEAK_SYMBOLS) && !defined(__APPLE__) && !defined(_WIN32) #define FOLLY_HAVE_WEAK_SYMBOLS 1 #endif #if !defined(FOLLY_HAVE_WCHAR_SUPPORT) && !defined(__ANDROID__) #define FOLLY_HAVE_WCHAR_SUPPORT 1 #endif /* Define to 1 if has . */ #if !defined(FOLLY_HAVE_EXTRANDOM_SFMT19937) && defined(__has_include) && \ !defined(__ANDROID__) #if __has_include() #define FOLLY_HAVE_EXTRANDOM_SFMT19937 1 #endif #endif /* Define to 1 if the compiler has VLA (variable-length array) support, otherwise define to 0 */ #if !defined(FOLLY_HAVE_VLA) && !defined(_WIN32) #define FOLLY_HAVE_VLA 1 #endif /* Define to 1 if the system has the type `_Bool'. */ /* #undef HAVE__BOOL */ /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #ifndef FOLLY_LT_OBJDIR #define FOLLY_LT_OBJDIR ".libs/" #endif /* Name of package */ #ifndef FOLLY_PACKAGE #define FOLLY_PACKAGE "folly" #endif /* Define to the address where bug reports for this package should be sent. */ #ifndef FOLLY_PACKAGE_BUGREPORT #define FOLLY_PACKAGE_BUGREPORT "folly@fb.com" #endif /* Define to the full name of this package. */ #ifndef FOLLY_PACKAGE_NAME #define FOLLY_PACKAGE_NAME "folly" #endif /* Define to the full name and version of this package. */ #ifndef FOLLY_PACKAGE_STRING #define FOLLY_PACKAGE_STRING "folly 0.1" #endif /* Define to the one symbol short name of this package. */ #ifndef FOLLY_PACKAGE_TARNAME #define FOLLY_PACKAGE_TARNAME "folly" #endif /* Define to the home page for this package. */ #ifndef FOLLY_PACKAGE_URL #define FOLLY_PACKAGE_URL "" #endif /* Define to the version of this package. */ #ifndef FOLLY_PACKAGE_VERSION #define FOLLY_PACKAGE_VERSION "0.1" #endif /* Define to 1 if you have the ANSI C header files. */ #ifndef FOLLY_STDC_HEADERS #define FOLLY_STDC_HEADERS 1 #endif /* Define to 1 if you can safely include both and . */ #ifndef FOLLY_TIME_WITH_SYS_TIME #define FOLLY_TIME_WITH_SYS_TIME 1 #endif /* Define to 1 if openssl has the ASN1_TIME_diff() function */ #ifndef FOLLY_HAVE_OPENSSL_ASN1_TIME_DIFF #define FOLLY_HAVE_OPENSSL_ASN1_TIME_DIFF 1 #endif /* Define to 1 if this build supports use in shared libraries */ #ifndef FOLLY_SUPPORT_SHARED_LIBRARY #define FOLLY_SUPPORT_SHARED_LIBRARY 1 #endif /* Define to 1 if this build should use extern template for Future and * SemiFuture */ #ifndef FOLLY_USE_EXTERN_FUTURE_UNIT #if !defined(__ANDROID__) && !defined(__APPLE__) #define FOLLY_USE_EXTERN_FUTURE_UNIT 1 #else #define FOLLY_USE_EXTERN_FUTURE_UNIT 0 #endif #endif /* We always use libstdc++ in fbcode */ #if !defined(FOLLY_USE_LIBSTDCPP) && !defined(FOLLY_USE_LIBCPP) && \ !defined(_WIN32) && !defined(__APPLE__) #define FOLLY_USE_LIBSTDCPP 1 #endif /* Define to 1 if we're using libc++. */ #if !defined(FOLLY_USE_LIBCPP) && defined(__APPLE__) && \ !defined(FOLLY_USE_LIBSTDCPP) #define FOLLY_USE_LIBCPP 1 #endif #if defined(FOLLY_USE_LIBCPP) && defined(FOLLY_USE_LIBSTDCPP) #error "Both libstdc++ and libc++ cannot be used simultaneously" #endif /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ /* #undef volatile */ /* Define to 1 if the gflags namespace is not "gflags" */ #ifndef FOLLY_UNUSUAL_GFLAGS_NAMESPACE #define FOLLY_UNUSUAL_GFLAGS_NAMESPACE 1 #endif /* Define to gflags namespace ("google" or "gflags") */ #ifndef FOLLY_GFLAGS_NAMESPACE #define FOLLY_GFLAGS_NAMESPACE google #endif #if !defined(FOLLY_HAVE_PTHREAD_SPINLOCK_T) && !FOLLY_MOBILE && \ !defined(__APPLE__) && !defined(_WIN32) #define FOLLY_HAVE_PTHREAD_SPINLOCK_T 1 #endif #if !defined(FOLLY_HAVE_PTHREAD_ATFORK) && !defined(__ANDROID__) && \ !defined(_WIN32) #define FOLLY_HAVE_PTHREAD_ATFORK 1 #endif #define FOLLY_DEMANGLE_MAX_SYMBOL_SIZE 1024 #if __GNUC__ && !__clang__ #define FOLLY_HAVE_SHADOW_LOCAL_WARNINGS 1 #endif #ifndef _WIN32 #define FOLLY_HAVE_PTHREAD 1 #endif /* For internal fbsource-based builds, ASAN is always enabled globally for the * entire build or not. FOLLY_LIBRARY_SANITIZE_ADDRESS is therefore the same as * FOLLY_SANITIZE_ADDRESS. We never have builds where folly is compiled with * ASAN enabled but other libraries have ASAN disabled, or vice-versa. */ #if defined(__has_feature) #if __has_feature(address_sanitizer) || __SANITIZE_ADDRESS__ #define FOLLY_LIBRARY_SANITIZE_ADDRESS 1 #else #define FOLLY_LIBRARY_SANITIZE_ADDRESS 0 #endif #else // defined(__has_feature) #if __SANITIZE_ADDRESS__ #define FOLLY_LIBRARY_SANITIZE_ADDRESS 1 #else #define FOLLY_LIBRARY_SANITIZE_ADDRESS 0 #endif #endif // defined(__has_feature) // We depend on JEMalloc headers in fbcode, so use them (note that when using // sanitizers, `#ifdef` gates in the code will not use JEMalloc headers, // despite this setting). This set of defines is a bit complex, but we try to // come up with a set of defines that will only match in fbcode, where JEMalloc // is available. #if !defined(FOLLY_USE_JEMALLOC) && !FOLLY_MOBILE && !defined(__APPLE__) && \ !defined(__ANDROID__) && !defined(_WIN32) && !defined(__wasm32__) #define FOLLY_USE_JEMALLOC 1 #endif // We depend on range-v3 in fbcode. This set of defines is a bit complex, but we // try to come up with a condition that matches in fbcode, where range-v3 is // both available and desired. #if !defined(FOLLY_USE_RANGEV3) && !FOLLY_MOBILE && !defined(__APPLE__) && \ !defined(__ANDROID__) && !defined(_WIN32) #define FOLLY_USE_RANGEV3 1 #endif // pipe2 is available on glibc 2.9 or later #ifdef __GLIBC__ #if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9)) #ifndef FOLLY_HAVE_PIPE2 #define FOLLY_HAVE_PIPE2 1 #endif #endif #endif // accept4, recvmmsg, sendmmsg #if defined(__linux__) && (!defined(__ANDROID__) || (__ANDROID_API__ >= 21)) #define FOLLY_HAVE_ACCEPT4 1 #define FOLLY_HAVE_RECVMMSG 1 #define FOLLY_HAVE_SENDMMSG 1 #endif #if defined(__GLIBC_PREREQ) #if __GLIBC_PREREQ(2, 25) #define FOLLY_HAVE_GETRANDOM 1 #else #define FOLLY_HAVE_GETRANDOM 0 #endif #else #define FOLLY_HAVE_GETRANDOM 0 #endif #ifndef FOLLY_HAVE_LIBRT #if defined(__linux__) && !FOLLY_MOBILE #define FOLLY_HAVE_LIBRT 1 #else #define FOLLY_HAVE_LIBRT 0 #endif #endif // disable coroutines in our fork as we only need headers for containers #define FOLLY_CFG_NO_COROUTINES 1 /* once: _FOLLY_CONFIG_H */ #endif