blob: eac40de532bf291081d1cce588457e6ef66b7418 [file] [log] [blame]
include(CheckCXXSourceCompiles)
# Compile FarmHash with C++11 support.
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS FARMHASH_CAN_USE_CXX11
)
# Check if __builtin_expect is available.
CHECK_CXX_SOURCE_COMPILES("
int main(int argc, char **argv) {
if (__builtin_expect(argc, 1)) {
return 0;
} else {
return argc;
}
}
" HAVE_BUILTIN_EXPECT)
if (NOT HAVE_BUILTIN_EXPECT)
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS FARMHASH_NO_BUILTIN_EXPECT
)
endif()
# Check endianness.
include(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
if (WORDS_BIGENDIAN)
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS WORDS_BIGENDIAN
)
endif()
# TODO(chasseur): FarmHash conditionally compiles fast versions of hash
# functions that use SSSE3, SSE4.1, SSE4.2, AES-NI, and AVX, where available,
# which are turned on based on preprocessor macros defined by GCC and other
# similar compilers (e.g. Clang, ICC) when those instructions sets are usable.
# MSVC sets __AVX__ when AVX is available, but does NOT set symbols for any
# other instruction set extensions optionally used by FarmHash, so building
# with MSVC will fall back on generic x86 versions of some internal hashing
# functions. Try to work out a portable way of detecting the other extensions
# and enabling them under MSVC.
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_library(farmhash farmhash.cc)
# Supress GCC warnings about overflow in farmhash only.
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-Wno-overflow" COMPILER_HAS_WNO_OVERFLOW)
if (COMPILER_HAS_WNO_OVERFLOW)
set_target_properties(farmhash PROPERTIES COMPILE_FLAGS "-Wno-overflow")
endif()